我使用1个主节点和2个节点创建了k8s集群和网络。但是,在pod(nginx)部署期间,部署仅在一个服务器(即node1)上发生,而不在另一台服务器(即node2)上发生,结果显示在o / p
下[root@controller Kubernetes]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 10m 192.168.1.2 node1 <none> <none>
[root@controller Kubernetes]#
这意味着nginx仅部署在node1上,而不部署在node2上
节点加入主节点的结果
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
controller Ready master 142m v1.16.0 192.168.33.20 <none> CentOS Linux 7 (Core) 3.10.0-1062.1.1.el7.x86_64 docker://1.13.1
node1 Ready <none> 134m v1.16.0 192.168.33.10 <none> CentOS Linux 7 (Core) 3.10.0-1062.1.1.el7.x86_64 docker://1.13.1
node2 Ready <none> 46m v1.16.0 192.168.33.30 <none> CentOS Linux 7 (Core) 3.10.0-1062.1.1.el7.x86_64 docker://1.13.1
[root@controller Kubernetes]#
Pod文件:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx-web-application
spec:
containers:
- name: nginx-container
image: nginx
当我使用以下命令运行时,我也想在node2上看到部署的发生,你能告诉我为什么在两个节点上都没有发生吗?
kubectl create -f pod.yml
答案 0 :(得分:2)
您的设置创建了一个在一个节点上带有一个容器的Pod(哪个容器由kube-scheduler决定)。
如果要在每个节点上运行该容器,请使用DaemonSet,以确保在每个节点上运行容器的副本。
具有两个或多个副本的Deployment应该可以工作,因为如果两个节点都可以运行该pod,则您有两个节点(请查看kube-scheduler)。
最后一件事-您可以使用Taints and Tolerations。最简单的方法是污染您的node1
,以免在其上切碎豆荚(来自文档的示例):
kubectl taint nodes node1 key:NoSchedule-
答案 1 :(得分:1)
Pod恰好是一个容器的副本(很少有,多个紧密耦合的容器)。它将仅在一个节点上运行。
您几乎永远不想直接使用Pod;而是选择一个更高级别的控制器对象。大多数情况下,您会使用Deployment,它可以告诉您想要例如 3个在集群中某处运行的Pod的副本。如果您实际上需要在每个节点上运行一个副本(通常只有基础架构类型的Pod才需要),那么这就是DaemonSet的模型。