當叢集升級失敗時,如何將 EKS Anywhere 叢集返回工作狀態?
我想要使用 eksctl 命令來升級 Amazon Elastic Kubernetes Service (Amazon EKS) Anywhere 管理叢集。不過,升級程序會失敗或在完成前中斷。
解決方法
升級 Amazon EKS Anywhere 管理叢集時,程序包括兩個階段:驗證階段和升級階段。升級失敗的復原步驟取決於升級中斷的哪個階段。
驗證階段
當您升級 EKS Anywhere 叢集時,eksctl 會執行一組預檢查,以確保叢集已就緒。這會發生在升級之前,eksctl 會修改叢集以符合更新的規格。
當 eksctl 執行這些檢查時,您會看到類似下列範例的訊息:
Performing setup and validations Connected to server Authenticated to vSphere Datacenter validated Network validated Creating template. This might take a while. Datastore validated Folder validated Resource pool validated Datastore validated Folder validated Resource pool validated Datastore validated Folder validated Resource pool validated Machine config tags validated Control plane and Workload templates validated Vsphere provider validation Validate certificate for registry mirror Control plane ready Worker nodes ready Nodes ready Cluster CRDs ready Cluster object present on workload cluster Upgrade cluster kubernetes version increment Validate authentication for git provider Validate immutable fields Upgrade preflight validations pass
接下來,eksctl 會繼續驗證在管理叢集中執行的 CAPI 控制器。如果這些控制器中的任何一個需要升級,則 eksctl 也會升級它們。在此程序期間,eksctl 也會建立 KinD 啟動程序叢集來升級管理叢集。您會看到反映此程序的訊息:
Ensuring etcd CAPI providers exist on management cluster before Pausing EKS-A cluster controller reconcile Pausing GitOps cluster resources reconcile Upgrading core components Creating bootstrap cluster Provider specific pre-capi-install-setup on bootstrap cluster Provider specific post-setup Installing cluster-api providers on bootstrap cluster
如果這些檢查或動作中的任何一項失敗,則升級會停止,而您的管理叢集會保持原始版本相同。
如需有關失敗之特定檢查的詳細資訊,請檢查 eksctl 記錄。
驗證階段發生的問題
若要從此階段的失敗復原,請完成下列步驟:
1. 疑難排解並修正導致驗證失敗的問題。
2. 再次執行 eksctl anywhere 叢集升級命令。使用 -v9 旗標是最佳作法。
升級階段
在升級階段,eksctl 會執行下列主要動作:
- 將您的管理叢集 CAPI 物件 (例如機器、KubeadmControlPlane 和 EtcdadmCluster) 移至啟動程序叢集
- 升級 etcd 和控制平面元件
- 升級工作者節點元件
在此階段中,您會看到類似下列範例的訊息:
Moving cluster management from bootstrap to workload cluster Applying new EKS-A cluster resource Resuming EKS-A controller reconcile Updating Git Repo with new EKS-A cluster spec GitOps field not specified, update git repo skipped Forcing reconcile Git repo with latest commit GitOps not configured, force reconcile flux git repo skipped Resuming GitOps cluster resources kustomization Writing cluster config file Cluster upgraded!
eksctl 使用滾動程序來就地執行升級,類似於 Kubernetes 部署。它也會透過此升級建立新的虛擬機器 (VM),然後移除舊的虛擬機器。此程序會套用至每個元件,一次套用一個元件,直到升級所有控制平面元件為止。
如果虛擬機器無法執行,則升級會失敗,並在設定的逾時間隔後停止。滾動處理程序會讓舊的虛擬機器保持執行,以確保叢集保持就緒狀態。
升級階段期間的問題
若要在此階段從失敗中復原,請完成下列步驟:
1. 疑難排解並修正導致升級失敗的問題。如需失敗的詳細資訊,請檢查 eksctl 記錄檔。
2. 為了促進復原過程,請設置一個環境變量:
- **CLUSTER_NAME:**叢集的名稱
- CLITOOLS_CONT:在升級中斷後,執行環境中留下的image cli-tools 的容器名稱
- **KINDKUBE:**您用來存取 KinD 啟動程序叢集的 Kubeconfig 檔案
- **MGMTKUBE:**您用來存取管理叢集的 Kubeconfig 檔案
- EKSA_VSPHERE_USERNAME 和 **EKSA_VSPHERE_PASSWORD:**存取 vCenter 的憑證
請參閱下列這些變數範例:
CLUSTER_NAME=cluster3 CLITOOLS_CONT=eksa_1681572481616591501 KINDKUBE=$CLUSTER_NAME/generated/${CLUSTER_NAME}.kind.kubeconfig MGMTKUBE=$CLUSTER_NAME/$CLUSTER_NAME-eks-a-cluster.kubeconfig EKSA_VSPHERE_USERNAME=xxxxx EKSA_VSPHERE_PASSWORD=yyyyy
3. 確定您的管理叢集 CAPI 元件 (例如機器和叢集) 處於就緒狀態。此外,請確定管理叢集中的 kubeApi-server 具有回應能力。若要這麼做,請執行下列命令:
kubectl --kubeconfig $KINDKUBE -n eksa-system get machines docker exec -i $CLITOOLS_CONT clusterctl describe cluster cluster3 --kubeconfig $KINDKUBE -n eksa-system kubectl --kubeconfig $MGMTKUBE -n kube-system get node
您會收到類似下列範例的輸出:
NAME CLUSTER NODENAME PROVIDERID PHASE AGE VERSION cluster3-2snw8 cluster3 cluster3-2snw8 vsphere://4230efe1-e1f5-c8e5-9bff-12eca320f5db Running 3m13s v1.23.17-eks-1-23-19 cluster3-etcd-chkc5 cluster3 vsphere://4230826c-b25d-937a-4728-3e607e6af579 Running 4m14s cluster3-md-0-854976576-tw6hr cluster3 cluster3-md-0-854976576-tw6hr vsphere://4230f2e5-0a4b-374c-f06b-41ac1f80e41f Running 4m30s v1.22.17-eks-1-22-24 $ docker exec -i $CLITOOLS_CONT clusterctl describe cluster cluster3 --kubeconfig $KINDKUBE -n eksa-system NAME READY SEVERITY REASON SINCE MESSAGE Cluster/cluster3 True 49s ├─ClusterInfrastructure - VSphereCluster/cluster3 True 4m53s ├─ControlPlane - KubeadmControlPlane/cluster3 True 49s │ └─Machine/cluster3-2snw8 True 2m51s └─Workers ├─MachineDeployment/cluster3-md-0 True 4m53s │ └─Machine/cluster3-md-0-854976576-tw6hr True 4m53s └─Other └─Machine/cluster3-etcd-chkc5 True 3m55s $ kubectl --kubeconfig $MGMTKUBE -n kube-system get node NAME STATUS ROLES AGE VERSION cluster3-md-0-854976576-tw6hr Ready [none] 18m v1.22.17-eks-a51510b cluster3-2snw8 Ready control-plane,master 19m v1.23.17-eks-a51510b
4. 備份您的管理叢集 CAPI 元件:
mkdir ${CLUSTER_NAME}-backup docker exec -i $CLITOOLS_CONT clusterctl move --to-directory ${CLUSTER_NAME}-backup --kubeconfig $KINDKUBE -n eksa-system
5. 將管理叢集 CAPI 元件移回管理叢集:
$ docker exec -i $CLITOOLS_CONT clusterctl move --to-kubeconfig $MGMTKUBE --kubeconfig $KINDKUBE -n eksa-system Performing move... Discovering Cluster API objects Moving Cluster API objects Clusters=1 Moving Cluster API objects ClusterClasses=0 Creating objects in the target cluster Deleting objects from the source cluster
您會收到類似下列範例的輸出:
$ docker exec -i $CLITOOLS_CONT clusterctl move --to-kubeconfig $MGMTKUBE --kubeconfig $KINDKUBE -n eksa-system Performing move... Discovering Cluster API objects Moving Cluster API objects Clusters=1 Moving Cluster API objects ClusterClasses=0 Creating objects in the target cluster Deleting objects from the source cluster
6. 確定管理叢集 CAPI 元件 (例如機器和叢集) 不再位於 KinD 啟動程序叢集中。確認它們顯示在管理叢集中。若要執行此操作,請執行下列命令:
kubectl --kubeconfig $KINDKUBE -n eksa-system get cluster -n eksa-system kubectl --kubeconfig $MGMTKUBE get machines -n eksa-system
您會收到類似下列範例的輸出:
$ kubectl --kubeconfig $KINDKUBE -n eksa-system get cluster -n eksa-system No resources found in eksa-system namespace. $ kubectl --kubeconfig $MGMTKUBE get machines -n eksa-system NAME CLUSTER NODENAME PROVIDERID PHASE AGE VERSION cluster2-4n7qd cluster2 cluster2-4n7qd vsphere://4230fb07-2823-3474-c41f-b7223dec3089 Running 2m27s v1.23.17-eks-1-23-19 cluster2-etcd-h4tpl cluster2 vsphere://42303b36-1991-67a9-e942-dd9959760649 Running 2m27s cluster2-md-0-fd6c558b-6cfvq cluster2 cluster2-md-0-fd6c558b-6cfvq vsphere://423019a3-ad3f-1743-e7a8-ec8772d3edc2 Running 2m26s v1.22.17-eks-1-22-24
7. 再次執行升級。使用標誌 --force-cleanup -v9 標誌:
eksctl anywhere upgrade cluster -f cluster3/cluster3-eks-a-cluster.yaml --force-cleanup -v9
相關資訊
升級 vSphere、CloudStack、Nutanix 或 Snow 叢集
叢集 API 手冊 (位於 Kubernetes 網站上)
相關內容
- 已提問 1 年前lg...
- 已提問 2 年前lg...
- 已提問 1 年前lg...
- 已提問 8 個月前lg...
- AWS 官方已更新 5 個月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前