【K8s】版本及版本偏差支持策略


版本支持策略

Kubernetes 版本號格式為 x.y.z,其中 x 為大版本號,y 為小版本號,z 為補丁版本號。 版本號格式遵循 Semantic Versioning 規則。

Kubernetes 項目會維護最近的三個小版本分支(1.21, 1.20, 1.19)。 Kubernetes 1.19 及更高的版本將獲得大約1年的補丁支持。 Kubernetes 1.18 及更早的版本獲得大約9個月的補丁支持。

一些 bug 修復,包括安全修復,取決於其嚴重性和可行性,有可能會反向合並到這三個發布分支。 補丁版本會定期 或根據需要從這些分支中發布。 最終是否發布是由 發布管理者 來決定的。

版本偏差策略

kube-apiserver

在 高可用(HA)集群 中, 多個 kube-apiserver 實例小版本號最多差1。

例如:

  • 最新的 kube-apiserver 版本號如果是 1.21
  • 其他受支持的 kube-apiserver 版本號包括 1.21 和 1.20

kubelet

kubelet 版本號不能高於 kube-apiserver,最多可以比 kube-apiserver 低兩個小版本。

例如:

  • kube-apiserver 版本號如果是 1.21
  • 受支持的的 kubelet 版本將包括 1.21、 1.20 和 1.19

說明: 如果 HA 集群中多個 kube-apiserver 實例版本號不一致,相應的 kubelet 版本號可選范圍也要減小。

例如:

  • 如果 kube-apiserver 實例同時存在 1.21 和 1.20
  • kubelet 的受支持版本將是 1.20 和 1.19 (1.21 不再支持,因為它比 1.20 版本的 kube-apiserver 更新)

kube-controller-manager、 kube-scheduler 和 cloud-controller-manager

kube-controller-manager、kube-scheduler 和 cloud-controller-manager 版本不能高於 kube-apiserver 版本號。 最好它們的版本號與 kube-apiserver 保持一致,但允許比 kube-apiserver 低一個小版本(為了支持在線升級)。

例如:

  • 如果 kube-apiserver 版本號為 1.21
  • kube-controller-manager、kube-scheduler 和 cloud-controller-manager 版本支持 1.21 和 1.20

說明: 如果在 HA 集群中,多個 kube-apiserver 實例版本號不一致,他們也可以跟 任意一個 kube-apiserver 實例通信(例如,通過 load balancer), 但 kube-controller-manager、kube-scheduler 和 cloud-controller-manager 版本可用范圍會相應的減小。

例如:

  • kube-apiserver 實例同時存在 1.21 和 1.20 版本
  • kube-controller-manager、kube-scheduler 和 cloud-controller-manager 可以通過 load balancer 與所有的 kube-apiserver 通信
  • kube-controller-manager、kube-scheduler 和 cloud-controller-manager 可選版本為 1.20 (1.21 不再支持,因為它比 1.20 版本的 kube-apiserver 更新)

kubectl

kubectl 可以比 kube-apiserver 高一個小版本,也可以低一個小版本。

例如:

  • 如果 kube-apiserver 當前是 1.21 版本
  • kubectl 則支持 1.22、1.21 和 1.20

說明: 如果 HA 集群中的多個 kube-apiserver 實例版本號不一致,相應的 kubectl 可用版本范圍也會減小。

例如:

  • kube-apiserver 多個實例同時存在 1.21 和 1.20
  • kubectl 可選的版本為 1.21 和 1.20(其他版本不再支持, 因為它會比其中某個 kube-apiserver 實例高或低一個小版本)

支持的組件升級次序

組件之間支持的版本偏差會影響組件升級的順序。 本節描述組件從版本 1.20 到 1.21 的升級次序。

kube-apiserver

前提條件:

  • 單實例集群中,kube-apiserver 實例版本號須是 1.20
  • 高可用(HA)集群中,所有的 kube-apiserver 實例版本號必須是 1.20 或 1.21 (確保滿足最新和最舊的實例小版本號相差不大於1)
  • kube-controller-manager、kube-scheduler 和 cloud-controller-manager 版本號必須為 1.20 (確保不高於 API server 的版本,且版本號相差不大於1)
  • kubelet 實例版本號必須是 1.20 或 1.19(確保版本號不高於 API server,且版本號相差不大於2)
  • 注冊的 admission 插件必須能夠處理新的 kube-apiserver 實例發送過來的數據:
    • ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 對象必須升級到可以處理 1.21 版本新加的 REST 資源(或使用 1.15 版本提供的 matchPolicy: Equivalent 選項)
    • 插件可以處理任何 1.21 版本新的 REST 資源數據和新加的字段

升級 kube-apiserver 到 1.21

說明:根據 API 棄用策略 和 API 變更指南, kube-apiserver 不能跨小版本號升級,即使是單實例集群也不可以。

kube-controller-manager、kube-scheduler 和 cloud-controller-manager

前提條件:

  • kube-apiserver 實例必須為 1.21 (HA 集群中,所有的kube-apiserver 實例必須在組件升級前完成升級)

升級 kube-controller-manager、kube-scheduler 和 cloud-controller-manager 到 1.21

kubelet

前提條件:

  • kube-apiserver 實例必須為 1.21 版本

kubelet 可以升級到 1.21(或者停留在 1.20 或 1.19)

說明:在對 kubelet 執行次版本升級時,先騰空 節點上的 Pods。 目前不支持原地升級 kubelet 的次版本。

警告:集群中 kubelet 版本號不建議比 kube-apiserver 低兩個版本號:

  • 它們必須升級到與 kube-apiserver 相差不超過 1 個小版本,才可以升級其他控制面組件
  • 有可能使用低於 3 個在維護的小版本

kube-proxy

  • kube-proxy 必須與節點上的 kubelet 的小版本相同
  • kube-proxy 一定不能比 kube-apiserver 小版本更新
  • kube-proxy 最多只能比 kube-apiserver 早兩個小版本

例如:

如果 kube-proxy 的版本是 1.19:

  • kubelet 版本必須相同,也是 1.19
  • kube-apiserver 版本必須在 1.19 到 1.21 之間(閉區間)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM