協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
升級叢集的混合節點
升級混合節點的指引類似於在 Amazon EC2 中執行的自我管理的 Amazon EKS 節點。我們建議您在目標 Kubernetes 版本上建立新的混合節點、將現有的應用程式從容移轉至新 Kubernetes 版本上的混合節點,接著從叢集移除舊 Kubernetes 版本上的混合節點。開始升級之前,請務必檢閱 Amazon EKS 最佳實務,以了解升級的相關資訊。Amazon EKS 混合節點對包含雲端節點的 Amazon EKS 叢集具有相同的 Kubernetes 版本支援,包括標準支援和延長支援。
Amazon EKS 混合節點遵循與上游 Kubernetes 相同的節點版本差異政策
如果您沒有備用容量,可在目標 Kubernetes 版本上建立新的混合節點以進行切換移轉升級策略,則您也可以使用 Amazon EKS 混合節點 CLI (nodeadm) 來就地升級混合節點的 Kubernetes 版本。
重要
如果您要使用 nodeadm 就地升級混合節點,則在關閉舊版 Kubernetes 元件以及安裝和啟動新的 Kubernetes 版本元件的過程中,節點可能會出現停機時間。
先決條件
升級之前,請確認您已完成下列先決條件。
-
混合節點升級的目標 Kubernetes 版本必須等於或小於 Amazon EKS 控制平面版本。
-
如果您遵循切換移轉升級策略,則在目標 Kubernetes 版本上安裝的新混合節點必須符合 混合節點的先決條件設定 要求。這包括您在 Amazon EKS 叢集建立期間傳遞的遠端節點網路 CIDR 內的 IP 位址。
-
對於切換移轉和就地升級,混合節點必須能夠存取必要網域,以提取混合節點相依性的新版本。
-
您必須在用來與 Amazon EKS Kubernetes API 端點互動的本機電腦或執行個體上安裝 kubectl。
-
您的 CNI 版本必須支援您要升級到的 Kubernetes 版本。如果不能,則請在先升級 CNI 版本,然後再升級您的混合節點。如需詳細資訊,請參閱「設定混合節點的 CNI」。
切換移轉 (藍綠) 升級
切換移轉升級是指使用目標 Kubernetes 版本在新主機上建立新的混合節點、將現有的應用程式從容移轉至目標 Kubernetes 版本上的新混合節點,以及從叢集移除舊 Kubernetes 版本上的混合節點的過程。此策略也稱為藍綠移轉。
-
請遵循 連接混合節點 步驟,將您的新主機連接為混合節點。執行
nodeadm install命令時,請使用您的目標 Kubernetes 版本。 -
啟用目標 Kubernetes 版本上的新混合節點與舊 Kubernetes 版本上的混合節點之間的通訊。此組態可讓您在將工作負載移轉至目標 Kubernetes 版本上的混合節點時,Pod 之間能夠彼此進行通訊。
-
確認目標 Kubernetes 版本上的混合節點已成功加入叢集,且狀態為就緒。
-
使用下列命令,將每個您想要移除的節點標記為不可排程。這樣就不會在您要取代的節點上排程或重新排程新的 Pod。如需詳細資訊,請參閱 Kubernetes 文件中的 kubectl cordon
。使用舊 Kubernetes 版本上的混合節點的名稱取代 NODE_NAME。kubectl cordonNODE_NAME您可以使用下列程式碼片段來識別及包圍隔離特定 Kubernetes 版本 (在此情況下為
1.28) 的所有節點。K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Cordoning $node" kubectl cordon $node done -
如果您目前的部署在混合節點上執行的 CoreDNS 複本少於兩個,請將部署擴增為至少兩個複本。我們建議您在混合節點上執行至少兩個 CoreDNS 複本,以在正常操作期間實現彈性。
kubectl scale deployments/coredns --replicas=2 -n kube-system -
使用下列命令,耗盡清空您想要從叢集移除的舊 Kubernetes 版本上的每個混合節點。如需耗盡節點的詳細資訊,請參閱 Kubernetes 文件中的安全地耗盡節點
。使用舊 Kubernetes 版本上的混合節點的名稱取代 NODE_NAME。kubectl drainNODE_NAME--ignore-daemonsets --delete-emptydir-data您可以使用下列程式碼片段來識別及耗盡特定 Kubernetes 版本 (在此情況下為
1.28) 的所有節點。K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Draining $node" kubectl drain $node --ignore-daemonsets --delete-emptydir-data done -
您可以使用
nodeadm從主機停止和移除混合節點成品。您必須與擁有 root/sudo 權限的使用者一同執行nodeadm。根據預設,如果節點上還有剩餘的 Pod,則nodeadm uninstall不會繼續。如需更多資訊,請參閱混合節點 nodeadm 參考。nodeadm uninstall -
若停止並解除安裝混合節點成品,則請從您的叢集中移除節點資源。
kubectl delete nodenode-name您可以使用下列程式碼片段來識別及刪除特定 Kubernetes 版本 (在此情況下為
1.28) 的所有節點。K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Deleting $node" kubectl delete node $node done -
視您選擇的 CNI 而定,在執行上述步驟後,您的混合節點上可能會有成品剩餘。如需詳細資訊,請參閱「設定混合節點的 CNI」。
就地升級
就地升級程序是指使用 nodeadm upgrade 來升級混合節點的 Kubernetes 版本,而無需使用新的實體或虛擬主機和切換移轉策略。nodeadm upgrade 程序會關閉在混合節點上執行的現有的較舊 Kubernetes 元件、解除安裝現有的較舊 Kubernetes 元件、安裝新的目標 Kubernetes 元件,以及啟動新的目標 Kubernetes 元件。強烈建議您一次升級一個節點,以最大限度地降低對混合節點上執行的應用程式的影響。此程序的持續時間取決於您的網路頻寬和延遲。
-
使用下列命令,將您要升級的節點標記為不可排程。這樣就不會在您要升級的節點上排程或重新排程新的 Pod。如需詳細資訊,請參閱 Kubernetes 文件中的 kubectl cordon
。使用您要升級的混合節點的名稱取代 NODE_NAMEkubectl cordon NODE_NAME -
使用下列命令,耗盡您要升級的節點。如需耗盡節點的詳細資訊,請參閱 Kubernetes 文件中的安全地耗盡節點
。使用您要升級的混合節點的名稱取代 NODE_NAME。kubectl drain NODE_NAME --ignore-daemonsets --delete-emptydir-data -
在您要升級的混合節點上執行
nodeadm upgrade。您必須與擁有 root/sudo 權限的使用者一同執行nodeadm。節點的名稱會透過 AWS SSM 和 IAM Roles Anywhere AWS 憑證提供者的升級加以保留。您無法在升級程序期間變更憑證提供者。如需nodeConfig.yaml的組態值,請參閱 混合節點 nodeadm 參考。使用您要升級的目標 Kubernetes 版本取代K8S_VERSION。nodeadm upgrade K8S_VERSION -c file://nodeConfig.yaml -
若要允許於升級之後在節點上排程 Pod,請輸入下列內容。使用節點的名稱取代
NODE_NAME。kubectl uncordon NODE_NAME -
觀察混合節點的狀態,等待節點關閉,然後以就緒狀態重新啟動新的 Kubernetes 版本。
kubectl get nodes -o wide -w