一·、概述
? ? ? ? 在k8s當(dāng)中,“親和性”分為三種,節(jié)點親和性、pod親和性、pod反親和性;
親和性分類 | 名稱 | 解釋說明 |
nodeAffinity | 節(jié)點親和性 | 通過【節(jié)點】標(biāo)簽匹配,用于控制pod調(diào)度到哪些node節(jié)點上,以及不能調(diào)度到哪些node節(jié)點上;(主角node節(jié)點) |
podAffinity | pod親和性 | 通過【節(jié)點+pod】標(biāo)簽匹配,可以和哪些pod部署在同一個節(jié)點上(拓撲域);(主角是pod) |
podAntiAffinity | pod反親和性 | 通過【節(jié)點+pod】標(biāo)簽匹配,與pod親和性相反,就是和那些pod不在一個節(jié)點上(拓撲域); |
二、nodeAffinity-節(jié)點親和性
1,給k8s節(jié)點創(chuàng)建標(biāo)簽
[root@k8s231 ~]# kubectl label nodes k8s231 k8s=xinjizhiwa-01
node/k8s231 labeled
[root@k8s231 ~]# kubectl label nodes k8s232 k8s=xinjizhiwa-02
node/k8s232 labeled
[root@k8s231 ~]# kubectl label nodes k8s233 k8s=xinjizhiwa-03
node/k8s233 labeled
查看標(biāo)簽
[root@k8s231 dns]# kubectl get nodes --show-labels
2,編輯資源清單設(shè)置節(jié)點親和性
[root@k8s231 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:
? ? ? ? ? #硬限制,必須滿足的條件有哪些?(不滿足下面的條件,親和性就設(shè)置失敗)
? ? ? ? ? requiredDuringSchedulingIgnoredDuringExecution:
? ? ? ? ? ? #設(shè)置節(jié)點選擇器列表:
? ? ? ? ? ? nodeSelectorTerms:
? ? ? ? ? ? #聲明基于節(jié)點的標(biāo)簽進行關(guān)聯(lián)
? ? ? ? ? ? - matchExpressions:
? ? ? ? ? ? ? - key: k8s
? ? ? ? ? ? ? ? values:?
? ? ? ? ? ? ? ? - xinjizhiwa-03
? ? ? ? ? ? ? ? - xinjizhiwa-02
? ? ? ? ? ? ? ? #設(shè)置key和value的關(guān)系;
? ? ? ? ? ? ? ? #--In:key==value(必須寫value)
? ? ? ? ? ? ? ? #--NotIn:key !=value(必須寫value)
? ? ? ? ? ? ? ? operator: In
? ? ? ? ? #軟限制,不一定滿足,但會優(yōu)先滿足,相當(dāng)于一高了調(diào)度的優(yōu)先級;
? ? ? ? ? preferredDuringSchedulingIgnoredDuringExecution:
? ? ? ? ? #配置權(quán)重
? ? ? ? ? - weight: 10
? ? ? ? ? ? #偏向性
? ? ? ? ? ? preference:
? ? ? ? ? ? ? #基于節(jié)點的標(biāo)簽進行關(guān)聯(lián)
? ? ? ? ? ? ? matchExpressions:
? ? ? ? ? ? ? #節(jié)點的標(biāo)簽名稱
? ? ? ? ? ? ? - key: k8s
? ? ? ? ? ? ? ? values:
? ? ? ? ? ? ? ? - xinjizhiwa-03
? ? ? ? ? ? ? ? #關(guān)聯(lián)關(guān)系,表示key和values的關(guān)系
? ? ? ? ? ? ? ? #In:表示包含關(guān)系(value必須寫)
? ? ? ? ? ? ? ? #NotIn:表示不包含(value必須寫)
? ? ? ? ? ? ? ? #Exists: 表示存在關(guān)系(不能寫value)
? ? ? ? ? ? ? ? #DoesNotExist:不存在(不能寫value)
? ? ? ? ? ? ? ? #Gt:大于(value必須是一個單一的元素,且值將被解釋稱一個整數(shù))
? ? ? ? ? ? ? ? #Lt:小于(value必須是一個單一的元素,且值將被解釋稱一個整數(shù))
? ? ? ? ? ? ? ? operator: In
? ? ? containers:
? ? ? - name: c1
? ? ? ? image: nginx:1.20.1-alpine
? ? ? ? ports:
? ? ? ? - containerPort: 80
3,創(chuàng)建資源
[root@k8s231 nodeaffinity]# kubectl apply -f nodeaffinity.yaml
4,查看pod所在節(jié)點,驗證親和性
三、podAffinity-pod的親和性
? ? ? ? 基于“節(jié)點標(biāo)簽”進行設(shè)置,第一個pod副本創(chuàng)建在了哪個節(jié)點上,那么其余副本也會創(chuàng)建在這個節(jié)點上;
? ? ? ? 拓撲域:節(jié)點機器的標(biāo)簽的key和value都相等的機器,就是同一個拓撲域;
1,編輯資源清單設(shè)置pod親和性
[root@k8s231 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:
? ? ? ? ? #硬限制,必須滿足的條件有哪些?(不滿足下面的條件,親和性就設(shè)置失?。?br> ? ? ? ? ? requiredDuringSchedulingIgnoredDuringExecution:
? ? ? ? ? #設(shè)置拓撲域,指定【節(jié)點的標(biāo)簽名】
? ? ? ? ? #【節(jié)點key】就是說,設(shè)置了拓撲域,pod就會往這個標(biāo)簽的節(jié)點進行創(chuàng)建? ? ? ? ? #只要滿足key是k8s的節(jié)點的標(biāo)簽,那么就是同一個拓撲域
? ? ? ? ? - topologyKey: k8s
? ? ? ? ? ? #【pod標(biāo)簽】確定pod的標(biāo)簽,用于二次確認,選中了拓撲域(節(jié)點標(biāo)簽的key),再次選中pod標(biāo)簽才能確認調(diào)度到哪個節(jié)點;
? ? ? ? ? ? labelSelector:
? ? ? ? ? ? ? matchExpressions:?? ? ? ? ? ? ? #意思是說,只要key的值是k8s的pod創(chuàng)建在了哪個節(jié)點,“我”就跟隨他。也創(chuàng)建在這個節(jié)點上;
? ? ? ? ? ? ? - key: k8s
? ? ? ? ? ? ? ? #如果pod標(biāo)簽,出現(xiàn)了key值相同,value值不同的情況下,就不見設(shè)置Exists存在的關(guān)系了
? ? ? ? ? ? ? ? #建議設(shè)置:In的方式進行匹配,當(dāng)然此時Value就不能設(shè)置了;
? ? ? ? ? ? ? ? operator: Exists
? ? ? containers:
? ? ? - name: c1
? ? ? ? image: nginx:1.20.1-alpine
? ? ? ? ports:
? ? ? ? - containerPort: 80
2,創(chuàng)建資源
[root@k8s231 nodeaffinity]# kubectl apply -f podaffinity.yaml
3,查看pod所在節(jié)點
[root@k8s231 nodeaffinity]# kubectl get pods -o wide
四、podAntAffinity-pod的反親和性
? ? ? ? pod的親和性:符合拓撲域的范圍,指定標(biāo)簽的pod創(chuàng)建在哪里,其他pod就創(chuàng)建在哪里;
? ? ? ? pod的反親和性:與之相反,符合拓撲域的范圍,指定標(biāo)簽的pod創(chuàng)建在哪里,其他pod就不能創(chuàng)建在哪里;
1,編輯資源清單設(shè)置pod的反親和性
[root@k8s231 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:
? ? ? ? ? #硬限制,必須滿足的條件有哪些?(不滿足下面的條件,親和性就設(shè)置失敗)
? ? ? ? ? requiredDuringSchedulingIgnoredDuringExecution:
? ? ? ? ? #設(shè)置拓撲域,指定【節(jié)點的標(biāo)簽名】
? ? ? ? ? #【節(jié)點key】就是說,設(shè)置了拓撲域,pod就會往這個標(biāo)簽的節(jié)點進行創(chuàng)建
? ? ? ? ? - topologyKey: k8s
? ? ? ? ? ? #【pod標(biāo)簽】確定pod的標(biāo)簽,用于二次確認,選中了拓撲域(節(jié)點標(biāo)簽的key),再次選中pod標(biāo)簽才能確認調(diào)度到哪個節(jié)點;
? ? ? ? ? ? labelSelector:
? ? ? ? ? ? ? matchExpressions:?
? ? ? ? ? ? ? - key: k8s
? ? ? ? ? ? ? ? #如果pod標(biāo)簽,出現(xiàn)了key值相同,value值不同的情況下,就不見設(shè)置Exists存在的關(guān)系了
? ? ? ? ? ? ? ? #建議設(shè)置:In的方式進行匹配,當(dāng)然此時Value就不能設(shè)置了;
? ? ? ? ? ? ? ? operator: Exists
? ? ? containers:
? ? ? - name: c1
? ? ? ? image: nginx:1.20.1-alpine
? ? ? ? ports:
? ? ? ? - containerPort: 80
?
2,創(chuàng)建資源
[root@k8s231 nodeaffinity]# kubectl apply -f podantaffinity.yaml
3,查看pod
結(jié)論:
1,由于第一pod創(chuàng)建在了k8s232中,所以第二個pod就無法再k8s232中創(chuàng)建;
2,第二個pod就再k8s233中創(chuàng)建了;
3,由于我們是4個副本,k8s231還設(shè)置了污點,無法創(chuàng)建pod;
4,所以,我們4個副本,最后只能創(chuàng)建成功2個,剩下兩個pending;文章來源:http://www.zghlxwxcb.cn/news/detail-829101.html
至此,親和性,學(xué)習(xí)完畢文章來源地址http://www.zghlxwxcb.cn/news/detail-829101.html
到了這里,關(guān)于22-k8s中pod的調(diào)度-親和性affinity的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!