協助改善此頁面
想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後在 上選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合所有人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將現有叢集更新至新的 Kubernetes 版本
當新的 Kubernetes 版本可在 Amazon 中使用EKS,您可以將 Amazon EKS叢集更新至最新版本。
重要
一旦升級叢集,您就無法降級至先前的版本。我們建議您在更新至新的 Kubernetes 版本,您可以檢閱 中的資訊了解 Kubernetes 上的版本生命週期 EKS,也可以檢閱本主題中的更新步驟。
新增 Kubernetes 版本有時會帶來重大變更。因此,我們建議您針對新的 Kubernetes 版本。您可以建立持續整合工作流程來測試應用程式行為,然後再移至新的 Kubernetes 版本。
更新程序包含 Amazon EKS啟動具有已更新 的新API伺服器節點 Kubernetes 版本取代現有的版本。Amazon EKS會針對這些新節點執行標準基礎設施和整備運作狀態檢查,以確認它們是否如預期般運作。然而,一旦開始叢集升級,您就無法暫停或停止升級。如果任何這些檢查失敗,Amazon 會EKS還原基礎設施部署,而您的叢集會保留在先前的 Kubernetes 版本。執行中的應用程式不會受到影響,您的叢集絕對不會處於非確定性或無法恢復狀態。Amazon EKS會定期備份所有受管叢集,並在必要時存在復原叢集的機制。我們不斷評估和改善我們的 Kubernetes 基礎設施管理程序。
若要更新叢集,Amazon 最多EKS需要五個可用 IP 地址,這些 IP 地址來自您在建立叢集時指定的子網路。Amazon 會在您指定的任何子網路中EKS建立新的叢集彈性網路介面 (網路介面)。網路介面可能會在與您現有網路介面所在的子網不同的子網中建立,因此請確認您的安全群組規則針對您建立叢集時指定的任何子網,允許所需的叢集通訊 如果您建立叢集時指定的任何子網皆不存在、沒有足夠的可用 IP 地址,或者沒有允許必要的叢集通訊的安全群組規則,則更新可能會失敗。
注意
為了確保叢集的API伺服器端點永遠可存取,Amazon EKS提供高可用性 Kubernetes 在更新操作期間控制平面並執行API伺服器執行個體的滾動更新。為了考慮變更支援您 的API伺服器執行個體的 IP 地址 Kubernetes API 伺服器端點,您必須確保API伺服器用戶端有效管理重新連線。kubectl
和 的最近版本 Kubernetes 正式支援的用戶端程式庫
更新 Kubernetes 適用於 Amazon EKS叢集的 版本
若要更新 Kubernetes 叢集的 版本
-
比較 Kubernetes 叢集控制平面到 的版本 Kubernetes 節點的版本。
-
取得 Kubernetes 叢集控制平面的版本。
kubectl version
-
取得 Kubernetes 節點的版本。此命令會傳回所有自我管理和受管 Amazon EC2和 Fargate 節點。每個 Fargate Pod 會列為自己的節點。
kubectl get nodes
將控制平面更新至新的 Kubernetes 版本,請確定 Kubernetes 叢集中受管節點和 Fargate 節點的次要版本與控制平面的版本相同。例如,如果您的控制平面正在執行版本 ,
1.30
且其中一個節點正在執行版本1.29
,則您必須先將節點更新至版本 ,1.30
才能將控制平面更新至 1.31。我們也推薦您在更新控制平面之前,先將自我管理的節點更新為與控制平面相同的版本。如需詳細資訊,請參閱 更新叢集的受管節點群組 和 更新叢集的自我管理節點。如果您有 Fargate 節點的次要版本低於控制平面版本,請先刪除 Pod 由節點表示。接著更新您的控制平面。任何剩餘的 Pods 在您重新部署新版本之後, 會更新為新版本。 -
-
如果 Kubernetes 您最初部署叢集的 版本是 Kubernetes
1.25
或更新版本,請略過此步驟。根據預設,Pod Amazon EKS叢集上已啟用安全政策許可控制器。更新叢集之前,請確定適當的 Pod 已制定安全政策。這是為了避免可能的安全問題。您可以使用
kubectl get psp eks.privileged
命令來檢查預設政策。kubectl get psp eks.privileged
如果您收到下列錯誤,請參閱Amazon EKS 預設 Pod 安全政策然後再繼續。
Error from server (NotFound): podsecuritypolicies.extensions "eks.privileged" not found
-
如果 Kubernetes 您最初部署叢集的 版本是 Kubernetes
1.18
或更新版本,請略過此步驟。您可能需要從 中移除已中止的詞彙 CoreDNS 資訊清單。
-
檢查您的 是否 CoreDNS 資訊清單的行只有文字
upstream
。kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream
如果沒有傳回任何輸出,意味著您的清單檔案沒有該行。如果是這種情況,請跳至下一個步驟。如果傳回文字
upstream
,請移除該行。 -
移除 Configmap 檔案中檔案頂部附近只有文字
upstream
的行。不要變更檔案中的任何其他內容。移除該行之後,儲存變更。kubectl edit configmap coredns -n kube-system -o yaml
-
-
使用
eksctl
、 AWS Management Console或 更新您的叢集 AWS CLI。重要
-
如果您要更新至 版本
1.23
並在叢集中使用 Amazon EBS磁碟區,則必須在叢集中安裝 Amazon EBSCSI驅動程式,才能將叢集更新至 版本1.23
,以避免工作負載中斷。如需詳細資訊,請參閱 Kubernetes1.23 和 存放 Kubernetes 使用 Amazon 的磁碟區 EBS。 -
Kubernetes
1.24
和更新版本使用containerd
作為預設容器執行期。如果您要切換至containerd
執行期,且已經有 Fluentd 為 設定 Container Insights,然後您必須遷移 Fluentd 至 Fluent Bit 再更新叢集。所以此 Fluentd 剖析器設定為僅剖析JSON格式的日誌訊息。與 不同dockerd
,containerd
容器執行期的日誌訊息不是 JSON 格式。如果您不遷移至 Fluent Bit,部分已設定的 Fluentd's 剖析器會在 內產生大量錯誤 Fluentd 容器。如需遷移的詳細資訊,請參閱設定 Fluent Bit 作為 DaemonSet ,將日誌傳送至 CloudWatch Logs 。 -
由於 Amazon EKS執行高可用性的控制平面,因此您一次只能更新一個次要版本。如需此要求的詳細資訊,請參閱 Kubernetes 版本 和版本偏移支援政策
。假設您目前的叢集版本是版本 1.29
,並且您想要將其更新為版本1.31
。您必須先將您的版本1.29
叢集更新為版本1.30
,再將版本1.30
叢集更新為版本1.31
。 -
檢閱 之間的版本偏移 Kubernetes
kube-apiserver
和節點kubelet
上的 。-
從 開始 Kubernetes 版本
1.28
,最多kubelet
可以有三個比 舊的次要版本kube-apiserver
。請參閱 Kubernetes upstream version skew policy一節。 -
如果受管節點和 Fargate 節點
kubelet
上的 已開啟 Kubernetes 或更新版本1.25
,您可以提前更新叢集最多三個版本,而無需更新kubelet
版本。例如,如果kubelet
位於版本 上1.25
,您可以將 Amazon EKS叢集版本從1.25
更新為1.26
、 更新為1.27
,並將 更新為 ,1.28
同時將kubelet
保留在版本 上1.25
。 -
如果受管節點和 Fargate 節點
kubelet
上的 已開啟 Kubernetes 版本1.24
或更舊版本,其最多只能比 舊兩個次要版本kube-apiserver
。換言之,如果kubelet
的版本是1.24
或更低版本,則您最多只能將叢集的版本更新到超前兩個版本。例如,如果kubelet
位於版本 上1.21
,您可以將 Amazon EKS叢集版本從 更新1.21
為1.22
,並將 更新為1.23
,但在kubelet
仍位於1.24
時,您將無法將叢集更新為1.21
。
-
-
作為開始更新前的最佳實務,請確定節點
kubelet
上的 相同 Kubernetes 版本作為您的控制平面。 -
如果您的叢集設定了 的版本 Amazon VPC CNI plugin for Kubernetes 早於 的版本
1.8.0
,建議您在更新叢集之前,先將外掛程式更新至最新版本。若要更新外掛程式,請參閱 IPs 指派給 Pods 使用 Amazon VPC CNI。 -
如果您要將叢集更新至版本
1.25
或更新版本,並擁有 AWS Load Balancer Controller 部署在您的叢集中,然後將控制器更新至版本2.4.7
或更新版本,然後再將叢集版本更新至1.25
。如需詳細資訊,請參閱 Kubernetes1.25 版本備註。
-
-
叢集更新完成後,請將節點更新為相同的節點 Kubernetes 次要版本作為更新後的叢集。如需詳細資訊,請參閱 更新叢集的自我管理節點 和 更新叢集的受管節點群組。任何新的 Pods 在 Fargate 上啟動的
kubelet
版本與您的叢集版本相符。現有的 Fargate Pods 不會變更。 -
(選用) 如果您部署了 Kubernetes 在更新叢集之前,先將 Cluster Autoscaler 更新至叢集,再將 Cluster Autoscaler 更新至與 相符的最新版本 Kubernetes 您更新至的主要和次要版本。
-
在 Web 瀏覽器中開啟 Cluster Autoscaler 版本
頁面,並尋找與您叢集的 相符的最新 Cluster Autoscaler 版本 Kubernetes 主要和次要版本。例如,如果您叢集的 Kubernetes 版本會 1.31
找到以 開頭的最新 Cluster Autoscaler 版本1.31
。記錄該版本的語意版本編號 (例如,1.31.n
),以在下一步中使用。 -
使用下列命令,將 Cluster Autoscaler 映像標籤設定為您在前一個步驟中記錄的版本。如有必要,請使用您自己的值取代
。1.31
.n
kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=registry.k8s.io/autoscaling/cluster-autoscaler:v
1.31
.n
-
-
(僅限具有GPU節點的叢集) 如果您的叢集具有GPU支援 的節點群組 (例如
p3.2xlarge
),您必須更新 NVIDIA 的裝置外掛程式 KubernetesDaemonSet 在您的叢集上。在執行下列命令之前,將 取代
為您想要的 NVIDIA/k8s-device-pluginvX.X.X
版本。 kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/
vX.X.X
/deployments/static/nvidia-device-plugin.yml -
更新 Amazon VPC CNI plugin for Kubernetes, CoreDNS、 和
kube-proxy
附加元件。建議您將附加元件更新為服務帳戶字符中列出的最低版本。-
如果您使用的是 Amazon EKS 附加元件,請在 Amazon EKS主控台中選取叢集,然後選取您在左側導覽窗格中更新的叢集名稱。通知會顯示在主控台。它們會通知您每個有可用更新的附加元件有新的可用版本。若要更新附加元件,請選擇 Add-ons (附加元件) 標籤。在具有可用更新之附加元件的其中一個方塊中,選取 Update now (立即更新),選取可用的版本,然後選取 Update (更新)。
-
或者,您可以使用 AWS CLI 或
eksctl
來更新附加元件。如需詳細資訊,請參閱更新 Amazon EKS 附加元件。
-
-
如有必要,請更新您的
kubectl
版本。您必須使用kubectl
在 Amazon EKS叢集控制平面一個次要版本差異內的版本。例如,1.30
kubectl
用戶端使用 Kubernetes1.29
、1.30
和1.31
叢集。您可以使用下列命令檢查目前安裝的版本。kubectl version --client
降級 Kubernetes Amazon EKS叢集的版本
您無法降級 Kubernetes Amazon EKS叢集的 。相反地,請在先前的 Amazon EKS版本上建立新的叢集,並遷移工作負載。