我有4个节点(kubelets
)配置了标签role=nginx
master ~ # kubectl get node
NAME LABELS STATUS
10.1.141.34 kubernetes.io/hostname=10.1.141.34,role=nginx Ready
10.1.141.40 kubernetes.io/hostname=10.1.141.40,role=nginx Ready
10.1.141.42 kubernetes.io/hostname=10.1.141.42,role=nginx Ready
10.1.141.43 kubernetes.io/hostname=10.1.141.43,role=nginx Ready
我修改了复制controller
并添加了这些行
spec:
replicas: 4
selector:
role: nginx
但是当我开火时,我在一台主机上获得了2个吊舱。我想要的是每台主机上有1个pod。我错过了什么?
答案 0 :(得分:7)
在DaemonSet可用之前,您还可以指定pod使用主机端口并将复制控制器中的副本数设置为大于节点数的值。主机端口约束将允许每个主机只有一个pod。
答案 1 :(得分:2)
我能够通过修改标签来实现这一点,如下所示
master ~ # kubectl get nodes -o wide
NAME LABELS STATUS
10.1.141.34 kubernetes.io/hostname=10.1.141.34,role=nginx1 Ready
10.1.141.40 kubernetes.io/hostname=10.1.141.40,role=nginx2 Ready
10.1.141.42 kubernetes.io/hostname=10.1.141.42,role=nginx3 Ready
10.1.141.43 kubernetes.io/hostname=10.1.141.43,role=nginx4 Ready
然后我创建了4个nginx复制控制器,每个控制器都引用了nginx {1 | 2 | 3 | 4}角色和标签。
答案 2 :(得分:1)
复制控制器不保证每个节点有一个pod,因为调度程序将找到最适合每个pod的容器。我想你想要的是DaemonSet controller,它仍处于开发阶段。上面发布的解决方法也可以。