欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

k8s中topologyKey的作用及說明

 更新時間:2025年08月12日 15:23:33   作者:容器云  
topologyKey定義拓?fù)溆?用于Pod親和/反親和性規(guī)則,調(diào)度器根據(jù)其分組節(jié)點(diǎn),當(dāng)前配置僅強(qiáng)制節(jié)點(diǎn)標(biāo)簽匹配,未限制副本數(shù)量,建議補(bǔ)充podAntiAffinity實(shí)現(xiàn)隔離
spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: rcs-prod
                    operator: In
                    values:
                      - 'true'
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector: {}
              topologyKey: rcs-prod
        podAntiAffinity: {}

topologyKey的作用

一、topologyKey的核心作用

topologyKey 通過 節(jié)點(diǎn)的標(biāo)簽(Label) 劃分邏輯上的“拓?fù)溆?rdquo;,用于實(shí)現(xiàn):

1.Pod 親和性(PodAffinity)

將 Pod 調(diào)度到與目標(biāo) Pod 相同的拓?fù)溆?/strong>(例如同一機(jī)架、可用區(qū)或自定義分組)。

2.Pod 反親和性(PodAntiAffinity)

阻止 Pod 調(diào)度到與目標(biāo) Pod 相同的拓?fù)溆?/strong>(例如避免單節(jié)點(diǎn)或單可用區(qū)部署)。

二、topologyKey的值來源

topologyKey 的值是 節(jié)點(diǎn)標(biāo)簽的鍵(Key),可以是:

Kubernetes 內(nèi)置標(biāo)簽

  • kubernetes.io/hostname(節(jié)點(diǎn)主機(jī)名,粒度最細(xì))
  • topology.kubernetes.io/zone(可用區(qū),如 AWS 的 us-east-1a
  • topology.kubernetes.io/region(地域,如 us-east-1

topologyKey 是 Pod 親和性/反親和性規(guī)則中用于定義"拓?fù)溆?quot;的節(jié)點(diǎn)標(biāo)簽鍵。它決定了如何將節(jié)點(diǎn)分組以實(shí)現(xiàn) Pod 的共置或隔離:

  • 當(dāng)兩個 Pod 在具有相同 topologyKey 值的節(jié)點(diǎn)上時,它們被視為在同一拓?fù)溆蛑?/li>
  • 對于 podAffinity,Kubernetes 會嘗試將 Pod 調(diào)度到與指定 Pod 在同一拓?fù)溆虻墓?jié)點(diǎn)上
  • 對于 podAntiAffinity,Kubernetes 會確保 Pod 不會被調(diào)度到與指定 Pod 在同一拓?fù)溆虻墓?jié)點(diǎn)上

調(diào)度器如何工作

當(dāng)調(diào)度器決定pod調(diào)度到哪里時,它首先檢查pod的podAffinity配置,找 出那些符合標(biāo)簽選擇器的pod, 接著查詢這些pod運(yùn)行在哪些節(jié)點(diǎn)上。

特別的是, 它會尋找標(biāo)簽?zāi)芷ヅ鋚odAffinity配置中topologyKey的節(jié)點(diǎn)。接著,它會優(yōu) 先選擇所有的標(biāo)簽匹配pod的值的節(jié)點(diǎn)。

配置詳細(xì)解釋

nodeAffinity 部分

nodeAffinity:
  requiredDuringSchedulingIgnoredDuringExecution:
    nodeSelectorTerms:
      - matchExpressions:
          - key: rcs-prod
            operator: In
            values:
              - 'true'
  • 含義:Pod 必須被調(diào)度到帶有標(biāo)簽 rcs-prod=true 的節(jié)點(diǎn)上
  • requiredDuringSchedulingIgnoredDuringExecution 表示這是硬性要求,調(diào)度時必須滿足

podAffinity 部分

podAffinity:
  requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector: {}
      topologyKey: rcs-prod

含義:Pod 必須與集群中所有其他 Pod 部署在相同拓?fù)溆颍淳哂邢嗤?nbsp;rcs-prod 標(biāo)簽值的節(jié)點(diǎn)上)

  • labelSelector: {} 匹配所有 Pod,因?yàn)闆]有指定具體標(biāo)簽
  • topologyKey: rcs-prod 表示使用節(jié)點(diǎn)的 rcs-prod 標(biāo)簽作為拓?fù)溆?/li>

podAntiAffinity 部分

podAntiAffinity: {}

這是一個空配置,表示沒有 Pod 反親和性規(guī)則

綜合理解

這個配置的整體效果是:

  • Pod 只能被調(diào)度到帶有 rcs-prod=true 標(biāo)簽的節(jié)點(diǎn)上
  • Pod 必須與所有其他 Pod 部署在相同拓?fù)溆颍此?Pod 都在具有相同 rcs-prod 標(biāo)簽值的節(jié)點(diǎn)上)

注意:這里的 podAffinity 配置有些特殊,因?yàn)樗褂昧丝諛?biāo)簽選擇器匹配所有 Pod,這可能導(dǎo)致調(diào)度困難,除非集群中所有節(jié)點(diǎn)都有相同的 rcs-prod 標(biāo)簽值。

當(dāng)前的設(shè)置并不能避免相同的 Pod 調(diào)度到同一個節(jié)點(diǎn)上。以下是詳細(xì)分析:

為什么當(dāng)前配置不能防止相同 Pod 調(diào)度到同一節(jié)點(diǎn)?

1.缺少 podAntiAffinity 規(guī)則

  • 您當(dāng)前的 podAntiAffinity: {} 是空的,沒有定義任何反親和性規(guī)則。
  • 要阻止相同 Pod 調(diào)度到同一節(jié)點(diǎn),必須明確配置反親和性。

2.podAffinity 的作用是共置(co-location),而非隔離

  • 當(dāng)前的 podAffinity 只是強(qiáng)制 Pod 必須調(diào)度到具有相同 rcs-prod 標(biāo)簽值的節(jié)點(diǎn),但不會阻止相同 Pod 部署到同一節(jié)點(diǎn)。

3.topologyKey 在 podAffinity 中的用途

  • 它僅定義“拓?fù)溆?rdquo;(如節(jié)點(diǎn)、機(jī)架、區(qū)域等),而不是 Pod 之間的排斥規(guī)則。
  • 當(dāng)前的 topologyKey: rcs-prod 僅確保 Pod 調(diào)度到具有相同 rcs-prod 標(biāo)簽值的節(jié)點(diǎn),但不會限制同一節(jié)點(diǎn)上的副本數(shù)量。

如何修改配置以避免相同 Pod 調(diào)度到同一節(jié)點(diǎn)?

如果希望 相同的 Pod 不被調(diào)度到同一個節(jié)點(diǎn)(例如避免單點(diǎn)故障),需要配置 podAntiAffinity,例如:

方案 1:硬性反親和性(不允許同一節(jié)點(diǎn)調(diào)度)

affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:  # 硬性要求
      - labelSelector:
          matchLabels:
            app: your-pod-label  # 替換為您的 Pod 標(biāo)簽
        topologyKey: kubernetes.io/hostname  # 以節(jié)點(diǎn)主機(jī)名為拓?fù)溆?/pre>

方案 2:軟性反親和性(盡量不調(diào)度到同一節(jié)點(diǎn))

affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:  # 軟性偏好
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchLabels:
              app: your-pod-label
          topologyKey: kubernetes.io/hostname

關(guān)鍵點(diǎn)說明

1.topologyKey 的選擇

  • 如果使用 kubernetes.io/hostname,則反親和性針對單個節(jié)點(diǎn)(最嚴(yán)格)。
  • 如果使用其他標(biāo)簽(如 zone),則反親和性會作用于更廣的拓?fù)溆颍ㄈ缯麄€可用區(qū))。

2.labelSelector 必須匹配 Pod 標(biāo)簽

  • 您需要確保 matchLabels 中的標(biāo)簽與您的 Pod 模板中定義的標(biāo)簽一致,例如:
metadata:
  labels:
    app: your-pod-label  # 需與反親和性規(guī)則匹配

3.nodeAffinity 和 podAntiAffinity 可以共存

  • 您的原有 nodeAffinity 可以保留,只需補(bǔ)充 podAntiAffinity 即可。

最終建議配置

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
            - key: rcs-prod
              operator: In
              values:
                - "true"
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchLabels:
            app: your-pod-label  # 替換為您的實(shí)際 Pod 標(biāo)簽
        topologyKey: kubernetes.io/hostname  # 確保不調(diào)度到同一節(jié)點(diǎn)

這樣既能滿足節(jié)點(diǎn)親和性要求,又能避免相同 Pod 調(diào)度到同一節(jié)點(diǎn)。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Kubernetes?安裝flannel組件的過程(本地?kube-flannel.yml?文件)

    Kubernetes?安裝flannel組件的過程(本地?kube-flannel.yml?文件)

    文章介紹了如何在無法直接訪問raw.githubusercontent.com的情況下,通過科學(xué)上網(wǎng)或下載kube-flannel.yml文件源碼來部署Flannel網(wǎng)絡(luò)插件的方法,感興趣的朋友一起看看吧
    2025-03-03
  • CentOS 7.9 升級內(nèi)核 kernel-ml-5.6.14版本的方法

    CentOS 7.9 升級內(nèi)核 kernel-ml-5.6.14版本的方法

    這篇文章主要介紹了CentOS 7.9 升級內(nèi)核 kernel-ml-5.6.14版本,默認(rèn)內(nèi)核版本為3.10.0,現(xiàn)升級到 5.6.14 版本,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • k8s的架構(gòu)組成操作代碼

    k8s的架構(gòu)組成操作代碼

    k8s是一個輕便的和可擴(kuò)展的開源平臺,用于管理容器化應(yīng)用和服務(wù),通過k8s能夠進(jìn)行應(yīng)用的自動化部署和擴(kuò)縮容,這篇文章主要介紹了k8s的架構(gòu)組成,需要的朋友可以參考下
    2024-05-05
  • 詳解kubectl資源管理命令(陳述式)

    詳解kubectl資源管理命令(陳述式)

    kubectl是官方的CTL命令行工具,用于與apiserver進(jìn)行通信,將用戶在命令行輸入的命令,組織并轉(zhuǎn)化為apiserver能識別的信息,進(jìn)而實(shí)現(xiàn)管理k8s各種資源的一種有效途徑,這篇文章主要介紹了詳解kubectl資源管理命令(陳述式),需要的朋友可以參考下
    2025-04-04
  • 一篇文章搞懂K8S高級特性

    一篇文章搞懂K8S高級特性

    這篇文章主要給大家介紹了關(guān)于K8S高級特性的相關(guān)資料,文中通過時實(shí)例代碼以及圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-11-11
  • 淺析k8s中各組件和kube?apiserver通信時的認(rèn)證和鑒權(quán)問題

    淺析k8s中各組件和kube?apiserver通信時的認(rèn)證和鑒權(quán)問題

    這篇文章主要介紹了k8s中各組件和kube?apiserver通信時的認(rèn)證和鑒權(quán),本文使用的k8s集群是用kubekey搭建,命令是./kk create cluster --with-kubernetes v1.21.5 --with-kubesphere v3.2.1,需要的朋友可以參考下
    2022-06-06
  • k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理(最新推薦)

    k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理(最新推薦)

    這篇文章主要介紹了k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Rainbond云原生快捷部署生產(chǎn)可用的Gitlab步驟詳解

    Rainbond云原生快捷部署生產(chǎn)可用的Gitlab步驟詳解

    這篇文章主要為大家介紹了Rainbond云原生快捷部署生產(chǎn)可用的Gitlab步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • 玩客云安裝青龍面板實(shí)現(xiàn)京東簽到薅羊毛功能

    玩客云安裝青龍面板實(shí)現(xiàn)京東簽到薅羊毛功能

    這篇文章主要介紹了玩客云安裝青龍面板實(shí)現(xiàn)京東簽到薅羊毛,本人準(zhǔn)備的服務(wù)器就是玩客云,只需運(yùn)行一些常用的?docker?容器就行,需要的朋友可以參考下
    2022-05-05
  • 使用k8tz解決pod內(nèi)的時區(qū)問題(坑的解決)

    使用k8tz解決pod內(nèi)的時區(qū)問題(坑的解決)

    時區(qū)的不一致,會帶來很多困擾。即使代碼與時區(qū)無關(guān),但容器日志與系統(tǒng)日志時間相關(guān)聯(lián)排查問題也會讓人頭疼,這篇文章主要介紹了使用k8tz優(yōu)雅的解決pod內(nèi)的時區(qū)問題,需要的朋友可以參考下
    2022-10-10

最新評論