Kubernetes POD与StatefulSet中不同节点的关联

Kubernetes POD与StatefulSet中不同节点的关联,kubernetes,kubernetes-pod,kubernetes-statefulset,kubernetes-operator,Kubernetes,Kubernetes Pod,Kubernetes Statefulset,Kubernetes Operator,我正在创建StatefulSet,我希望一个StatefulSet中的pod分布在k8s集群的不同节点上。在我的例子中,一个StatefulSet就是一个数据库复制集 sts.Spec.Template.Labels[“mydb.io/replicaset uuid”]=replicasetUUID.String() sts.Spec.Template.Spec.Affinity.PodAntiAffinity=&corev1.PodAntiAffinity{ RequiredDuringSch

我正在创建StatefulSet,我希望一个StatefulSet中的pod分布在k8s集群的不同节点上。在我的例子中,一个StatefulSet就是一个数据库复制集

sts.Spec.Template.Labels[“mydb.io/replicaset uuid”]=replicasetUUID.String()
sts.Spec.Template.Spec.Affinity.PodAntiAffinity=&corev1.PodAntiAffinity{
RequiredDuringSchedulingIgnoredDuringExecution:[]corev1.PodAffinityTerm{
{
LabelSelector:&metav1.LabelSelector{
匹配表达式:[]metav1.LabelSelector要求{
{
键:“mydb.io/replicaset uuid”,
操作员:metav1.LabelSelectorOpIn,
值:[]字符串{replicasetUUID.string()},
},
},
},
TopologyKey:“kubernetes.io/hostname”,
},
},
}
然而,通过这些设置,我得到了相反的结果
storage-0-0
storage-0-1
位于同一复制集和同一节点上

此外,它们具有完全相同的标签
mydb.io/replicaset uuid

$ kubectl -n mydb get pods -o wide
NAME                             READY   STATUS    RESTARTS   AGE   IP        NODE                           NOMINATED NODE   READINESS GATES
storage-0-0                      1/1     Running   0          40m   x.x.x.x   kubernetes-cluster-x-main-0    <none>           <none>
storage-0-1                      1/1     Running   0          39m   x.x.x.x   kubernetes-cluster-x-main-0    <none>           <none>
storage-1-0                      1/1     Running   0          40m   x.x.x.x   kubernetes-cluster-x-slave-0   <none>           <none>
storage-1-1                      1/1     Running   0          40m   x.x.x.x   kubernetes-cluster-x-slave-0   <none>           <none>
mydb-operator-58c9bfbb9b-7djml   1/1     Running   0          46m   x.x.x.x   kubernetes-cluster-x-slave-0   <none>           <none>
$kubectl-n mydb获取吊舱-o宽
名称就绪状态重新启动老化IP节点指定节点就绪门
存储-0-0 1/1运行0 40m x.x.x.x kubernetes-cluster-x-main-0
存储-0-1 1/1运行0 39m x.x.x.x kubernetes-cluster-x-main-0
存储-1-0 1/1运行0 40m x.x.x kubernetes-cluster-x-slave-0
存储-1-1 1/1运行0 40m x.x.x.x kubernetes-cluster-x-slave-0
mydb-operator-58c9bfbb9b-7djml 1/1运行0 46m x.x.x kubernetes-cluster-x-slave-0

我建议在statefulset定义中使用podAntiAffinity规则来部署应用程序,这样就不会有两个实例位于同一主机上


参考资料:

正如@jesmart在评论中所说,它工作正常:

问题描述正确,我只是在应用程序中指出了错误的图像


您能用yaml格式描述结果StatefulSet吗
k获取statefulset-n mydb storage-0-oyaml
并检查什么是反亲和力定义?@谢谢,在那里查看并发现一个bug)我明白了。你解决问题了吗?@jesmart,如果问题解决了,请写下答案。@MikołajGłodziak问题描述中写的内容正确无误,我只是在应用程序中指出了错误的图像