k8s設(shè)置非強一致反親和性示例
Q:如何設(shè)置反親和性
盡可能讓 pod 部署在不同的 node 上,如果需要部署的pod數(shù)大于節(jié)點數(shù),也可以在一個節(jié)點上部署多個 pod,如何設(shè)置?
A:要設(shè)置反親和性(PodAntiAffinity),以盡可能讓Pod部署在不同的節(jié)點上,但允許多個Pod在一個節(jié)點上部署,您可以使用適當?shù)腜odAntiAffinity規(guī)則。這通常涉及到使用適當?shù)臉撕灪屯負溆颉?/p>
以下是如何設(shè)置這樣的反親和性規(guī)則的一般步驟:
- 為節(jié)點添加標簽:首先,您需要為集群中的節(jié)點添加適當?shù)臉撕灒员隳梢栽诜从H和性規(guī)則中使用它們。例如,您可以為節(jié)點添加一個標簽,如
rack
或zone
,以表示節(jié)點所在的機架或區(qū)域。 - 創(chuàng)建PodAntiAffinity規(guī)則:在您的Pod定義中,您可以使用
affinity
字段來定義反親和性規(guī)則。以下是一個示例:
apiVersion: v1 kind: Pod metadata: name: my-pod spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 # 設(shè)置優(yōu)先級 podAffinityTerm: labelSelector: matchExpressions: - key: "app" operator: In values: - my-app topologyKey: "kubernetes.io/hostname" # 使用節(jié)點的主機名標簽,或者您設(shè)置的標簽
上述示例中,我們創(chuàng)建了一個PodAntiAffinity規(guī)則,該規(guī)則使用preferredDuringSchedulingIgnoredDuringExecution
字段,這表示這是一個"優(yōu)先級規(guī)則",而不是絕對必需的規(guī)則。該規(guī)則要求不同Pod的my-app
標簽值必須匹配,但它們不能調(diào)度到相同的節(jié)點上,使用節(jié)點的主機名標簽(kubernetes.io/hostname
)作為拓撲域鍵來實現(xiàn)這一點。
部署Pod
當您部署多個Pod時,Kubernetes調(diào)度器將根據(jù)反親和性規(guī)則盡力確保它們不會在相同的節(jié)點上調(diào)度。如果有足夠的節(jié)點可用,它們可以分布在不同的節(jié)點上,以滿足反親和性規(guī)則。如果節(jié)點數(shù)量少于Pod數(shù)量,一些Pod可能需要共享節(jié)點,但反親和性規(guī)則會盡力確保它們分布在盡可能多的不同節(jié)點上。
請注意,設(shè)置preferredDuringSchedulingIgnoredDuringExecution
而不是requiredDuringSchedulingIgnoredDuringExecution
允許一些Pod仍然可以共享節(jié)點,如果沒有足夠的節(jié)點可供選擇。這可以幫助在節(jié)點資源有限的情況下仍然盡量滿足反親和性規(guī)則。
確保您的集群中有足夠的節(jié)點來容納您的Pod,以便反親和性規(guī)則可以正常工作。如果節(jié)點資源不足,Pod可能會被迫在同一節(jié)點上調(diào)度,這可能會違反反親和性規(guī)則。
Q:幫我修改
affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: #設(shè)置調(diào)度策略。 - labelSelector: matchExpressions: - key: app operator: In values: - imdb-match-api topologyKey: kubernetes.io/hostname
A: 您提供的配置是使用requiredDuringSchedulingIgnoredDuringExecution
,這表示Pod之間的反親和性是強制的,而且如果違反規(guī)則,Pod將不會被調(diào)度。
如果您希望Pod之間的反親和性是強制的,但仍然允許多個Pod在一個節(jié)點上部署,您可以使用preferredDuringSchedulingIgnoredDuringExecution
,這樣如果沒有足夠的節(jié)點來滿足規(guī)則,Pod仍然可以共享節(jié)點。
修改版本
以下是您的配置的修改版本:
apiVersion: v1 kind: Pod metadata: name: my-pod spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 # 設(shè)置優(yōu)先級 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - imdb-match-api topologyKey: kubernetes.io/hostname
這將創(chuàng)建一個"優(yōu)先級規(guī)則",它要求不同Pod的imdb-match-api
標簽值必須匹配,但它們不能調(diào)度到相同的節(jié)點上。如果沒有足夠的節(jié)點來滿足這一規(guī)則,Pod仍然可以共享節(jié)點,但反親和性規(guī)則將盡力確保它們分布在盡可能多的不同節(jié)點上。
以上就是k8s設(shè)置非強一致反親和性示例的詳細內(nèi)容,更多關(guān)于k8s設(shè)置非強一致反親和性的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
K8s準入控制Admission?Controller深入介紹
本篇我們將聚焦于?kube-apiserver?請求處理過程中一個很重要的部分?--?準入控制器(Admission?Controller)深入講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04k8s?Service?實現(xiàn)服務(wù)發(fā)現(xiàn)和負載均衡
這篇文章主要為大家介紹了k8s?Service?實現(xiàn)服務(wù)發(fā)現(xiàn)和負載均衡的工作原理及使用方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04kubelet為cadvisor添加namespace/pod/container標簽示例詳解
這篇文章主要為大家介紹了kubelet為cadvisor添加namespace/pod/container標簽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09一文解析Kubernetes使用PVC后數(shù)據(jù)丟失
這篇文章主要為大家介紹了Kubernetes使用PVC后數(shù)據(jù)丟失原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03