深圳知名装修公司排名,宜昌网站排名优化,宝塔默认安装wordpress,小说网站如何建设一、概述 在k8s当中#xff0c;“亲和性”分为三种#xff0c;节点亲和性、pod亲和性、pod反亲和性#xff1b;
亲和性分类名称解释说明nodeAffinity节点亲和性通过【节点】标签匹配#xff0c;用于控制pod调度到哪些node节点上#xff0c;以及不能调度到哪些node节点上“亲和性”分为三种节点亲和性、pod亲和性、pod反亲和性
亲和性分类名称解释说明nodeAffinity节点亲和性通过【节点】标签匹配用于控制pod调度到哪些node节点上以及不能调度到哪些node节点上主角node节点podAffinitypod亲和性通过【节点pod】标签匹配可以和哪些pod部署在同一个节点上拓扑域主角是podpodAntiAffinitypod反亲和性通过【节点pod】标签匹配与pod亲和性相反就是和那些pod不在一个节点上拓扑域
二、nodeAffinity-节点亲和性
1给k8s节点创建标签 [rootk8s231 ~]# kubectl label nodes k8s231 k8sxinjizhiwa-01 node/k8s231 labeled [rootk8s231 ~]# kubectl label nodes k8s232 k8sxinjizhiwa-02 node/k8s232 labeled [rootk8s231 ~]# kubectl label nodes k8s233 k8sxinjizhiwa-03 node/k8s233 labeled 查看标签 [rootk8s231 dns]# kubectl get nodes --show-labels 2编辑资源清单设置节点亲和性 [rootk8s231 nodeaffinity]# cat nodeaffinity.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dm-affinity spec: replicas: 20 selector: matchLabels: k8s: xinjizhiwa template: metadata: name: pod-affinity labels: k8s: xinjizhiwa spec: #声明亲和性 affinity: #声明亲和性类型 nodeAffinity: #硬限制必须满足的条件有哪些不满足下面的条件亲和性就设置失败 requiredDuringSchedulingIgnoredDuringExecution: #设置节点选择器列表 nodeSelectorTerms: #声明基于节点的标签进行关联 - matchExpressions: - key: k8s values: - xinjizhiwa-03 - xinjizhiwa-02 #设置key和value的关系 #--Inkeyvalue必须写value #--NotInkey value必须写value operator: In #软限制不一定满足但会优先满足相当于一高了调度的优先级 preferredDuringSchedulingIgnoredDuringExecution: #配置权重 - weight: 10 #偏向性 preference: #基于节点的标签进行关联 matchExpressions: #节点的标签名称 - key: k8s values: - xinjizhiwa-03 #关联关系表示key和values的关系 #In表示包含关系value必须写 #NotIn表示不包含value必须写 #Exists 表示存在关系不能写value #DoesNotExist不存在不能写value #Gt大于value必须是一个单一的元素且值将被解释称一个整数 #Lt小于value必须是一个单一的元素且值将被解释称一个整数 operator: In containers: - name: c1 image: nginx:1.20.1-alpine ports: - containerPort: 80 3创建资源 [rootk8s231 nodeaffinity]# kubectl apply -f nodeaffinity.yaml 4查看pod所在节点验证亲和性 三、podAffinity-pod的亲和性 基于“节点标签”进行设置第一个pod副本创建在了哪个节点上那么其余副本也会创建在这个节点上 拓扑域节点机器的标签的key和value都相等的机器就是同一个拓扑域
1编辑资源清单设置pod亲和性 [rootk8s231 nodeaffinity]# cat podaffinity.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dm-affinity spec: replicas: 20 selector: matchLabels: k8s: xinjizhiwa template: metadata: name: pod-affinity labels: k8s: xinjizhiwa spec: #声明亲和性 affinity: #声明亲和性类型 podAffinity: #硬限制必须满足的条件有哪些不满足下面的条件亲和性就设置失败 requiredDuringSchedulingIgnoredDuringExecution: #设置拓扑域指定【节点的标签名】 #【节点key】就是说设置了拓扑域pod就会往这个标签的节点进行创建 #只要满足key是k8s的节点的标签那么就是同一个拓扑域 - topologyKey: k8s #【pod标签】确定pod的标签用于二次确认选中了拓扑域节点标签的key再次选中pod标签才能确认调度到哪个节点 labelSelector: matchExpressions: #意思是说只要key的值是k8s的pod创建在了哪个节点“我”就跟随他。也创建在这个节点上 - key: k8s #如果pod标签出现了key值相同value值不同的情况下就不见设置Exists存在的关系了 #建议设置In的方式进行匹配当然此时Value就不能设置了 operator: Exists containers: - name: c1 image: nginx:1.20.1-alpine ports: - containerPort: 80 2创建资源 [rootk8s231 nodeaffinity]# kubectl apply -f podaffinity.yaml 3查看pod所在节点 [rootk8s231 nodeaffinity]# kubectl get pods -o wide 四、podAntAffinity-pod的反亲和性 pod的亲和性符合拓扑域的范围指定标签的pod创建在哪里其他pod就创建在哪里 pod的反亲和性与之相反符合拓扑域的范围指定标签的pod创建在哪里其他pod就不能创建在哪里
1编辑资源清单设置pod的反亲和性 [rootk8s231 nodeaffinity]# cat podantaffinity.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dm-affinity spec: replicas: 4 selector: matchLabels: k8s: xinjizhiwa template: metadata: name: pod-affinity labels: k8s: xinjizhiwa spec: #声明亲和性 affinity: #声明亲和性类型 podAntiAffinity: #硬限制必须满足的条件有哪些不满足下面的条件亲和性就设置失败 requiredDuringSchedulingIgnoredDuringExecution: #设置拓扑域指定【节点的标签名】 #【节点key】就是说设置了拓扑域pod就会往这个标签的节点进行创建 - topologyKey: k8s #【pod标签】确定pod的标签用于二次确认选中了拓扑域节点标签的key再次选中pod标签才能确认调度到哪个节点 labelSelector: matchExpressions: - key: k8s #如果pod标签出现了key值相同value值不同的情况下就不见设置Exists存在的关系了 #建议设置In的方式进行匹配当然此时Value就不能设置了 operator: Exists containers: - name: c1 image: nginx:1.20.1-alpine ports: - containerPort: 80 2创建资源 [rootk8s231 nodeaffinity]# kubectl apply -f podantaffinity.yaml 3查看pod 结论
1由于第一pod创建在了k8s232中所以第二个pod就无法再k8s232中创建
2第二个pod就再k8s233中创建了
3由于我们是4个副本k8s231还设置了污点无法创建pod
4所以我们4个副本最后只能创建成功2个剩下两个pending
至此亲和性学习完毕