pod的亲和与反亲和


Rancher K8s Pod 的亲和与反亲和操作文档

软件版本
Rancher2.5.11-ent
k8s1.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之间的反亲和

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kubernetes中,和性(Affinity)和反亲和性(Anti-Affinity)是用于定义Pod如何与其他Pod或节点进行调度的策略。而污点(Taint)和容忍(Toleration)则用于控制哪些Pod可以被调度到特定的节点上。 和性和反亲和性: - 和性:通过和性规则,可以指定Pod与其他Pod或节点之间的关系。例如,可以让一个Pod和于具有特定标签的节点,这样它就会更有可能被调度到这些节点上。 - 反亲和性:与和性相反,反亲和性规则可以指定Pod与某些Pod或节点之间的冲突关系。例如,可以让一个Pod反亲和于具有特定标签的节点,这样它就不会被调度到这些节点上。 和性和反亲和性规则可以通过使用Pod的`spec.affinity`字段来定义。 污点和容忍: - 污点:污点是节点上的一个属性,可以将其应用于节点,以阻止一些Pod被调度到该节点上。污点可以指定键值对形式的标签,并具有可选的效果(effect),如NoSchedule、PreferNoSchedule、NoExecute等。当节点上有一个或多个污点时,只有具有对应容忍规则的Pod才能被调度到该节点上。 - 容忍:容忍是Pod的一个属性,用于声明Pod可以容忍哪些污点。通过在Pod的`spec.tolerations`字段中定义容忍规则,Pod可以在具有相应污点的节点上进行调度。 污点和容忍规则可以通过使用Pod的`spec.tolerations`字段来定义。 使用和性、反亲和性、污点和容忍规则,可以更精确地控制Pod的调度和部署策略,以满足特定的应用需求和资源限制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值