Rancher K8s Pod 的亲和与反亲和操作文档
软件 | 版本 |
---|---|
Rancher | 2.5.11-ent |
k8s | 1.20.12 |
定义主机标签
全局>集群>主机
选择对应的worker节点,编辑,标签,添加标签
键为app
值为true
部署测试服务
部署第一个测试服务
全局>集群>项目>资源>工作负载>部署工作负载
名称为:app-test01
镜像为:nginx:latest
副本数为:1
命名空间为:schedule
端口为:80 以nodeport的方式发布
app-test01服务默认被调度到了workerlb节点
部署第二个测试服务
全局>集群>项目>资源>工作负载>选择第一个工作负载>克隆
名称修改为:app-test02
app-test02服务默认被调度到了workerlb节点
设置亲和
设置测试服务app-test01的亲和
复制主机标签
全局>集群>主机>复制需要亲和的主机标签app=true
编辑测试服务app-test01
全局>集群>项目>资源>工作负载>选择测试服务app-test01>编辑
选择主机调度,选择每个pod自动匹配主机,选择首选,添加自定义规则,粘贴上一步复制的主机标签app=true
升级完成后发现服务已经调度到具有app=true标签的主机worker03上面
设置测试服务app-test02的亲和
复制主机标签
全局>集群>主机>复制需要亲和的主机标签app=true
编辑测试服务app-test02
全局>集群>项目>资源>工作负载>选择测试服务app-test02>编辑
选择主机调度,选择每个pod自动匹配主机,选择首选,添加自定义规则,粘贴上一步复制的主机标签app=true
升级完成后发现服务已经调度到具有app=true标签的主机worker01上面
设置反亲和
设置测试服务app-test01的反亲和
为测试服务app-test01添加反亲和的labelSelector
全局>集群>项目>资源>工作负载>选择app-test01>编辑
选择标签/注释,添加标签
键为appName
值为ScheduleTest01
修改测试服务app-test01的yaml文件
全局>集群>项目>资源>工作负载>选择app-test01>查看/编辑YAML
在spec
spec:
template:
spec:
下添加以下内容
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
appName: ScheduleTest01 #上一步为app-test01添加的反亲和的标签
测试
全局>集群>项目>资源>工作负载>选择app-test01
修改服务的pods副本数为2
2个pod会调度到不同的主机上,实现同一工作负载的pods的反亲和
设置测试服务app-test02的反亲和
为测试服务app-test02添加反亲和的labelSelector
全局>集群>项目>资源>工作负载>选择app-test02>编辑
选择标签/注释,添加标签
键为appName
值为ScheduleTest02
修改测试服务app-test02的yaml文件
全局>集群>项目>资源>工作负载>选择app-test02>查看/编辑YAML
在spec
spec:
template:
spec:
下添加以下内容
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
appName: ScheduleTest02 #上一步为app-test02添加的反亲和的标签
测试
全局>集群>项目>资源>工作负载>选择app-test02
修改服务的pods副本数为2
2个pod会调度到不同的主机上,实现同一工作负载的pods的反亲和
设置两个测试服务的反亲和
修改测试服务app-test01和app-test02的反亲和标签
全局>集群>项目>资源>工作负载>选择app-test01>编辑
选择标签/注释,添加标签
键为appName
值为ScheduleTest
全局>集群>项目>资源>工作负载>选择app-test02>编辑
选择标签/注释,添加标签
键为appName
值为ScheduleTest
修改测试服务app-test01和app-test02的yaml
全局>集群>项目>资源>工作负载>选择app-test01>查看/编辑YAML
在spec
spec:
template:
spec:
下添加以下内容
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
appName: ScheduleTest #上一步添加的反亲和的标签
全局>集群>项目>资源>工作负载>选择app-test02>查看/编辑YAML
在spec
spec:
template:
spec:
下添加以下内容
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
appName: ScheduleTest #上一步添加的反亲和的标签
测试
全局>集群>项目>资源>工作负载>选择app-test01
修改服务的pods副本数为2
全局>集群>项目>资源>工作负载>选择app-test02
修改服务的pods副本数为1
服务启动后两个测试服务的3个pod会调度到三台不同的主机上,实现不同工作负载的pod之间的反亲和