協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 EKS Fargate 移轉至 EKS 自動模式
本主題將引導您使用 kubectl 將工作負載從 EKS Fargate 移轉至 Amazon EKS 自動模式的程序。移轉可以逐步進行,讓您能夠按照自己的步調移動工作負載,同時在整個轉換期間保持叢集穩定性和應用程式可用性。
下面概述的逐步方法使您能夠在移轉期間同時執行 EKS Fargate 和 EKS 自動模式。這種雙重操作策略有助於確保平穩轉換,讓您可以在完全停用 EKS Fargate 之前,驗證工作負載在 EKS 自動模式上的行為。您可以單獨或分組移轉應用程式,提供靈活性以適應您的特定運營要求與風險承受能力。
比較 Amazon EKS Auto Mode 和 EKS 與 AWS Fargate
對於想要執行 EKS 的客戶而言,Amazon EKS 搭配 AWS Fargate 仍然是選項,但 Amazon EKS Auto Mode 是建議的方法。EKS 自動模式完全符合 Kubernetes 規範,支援所有上游 Kubernetes 基本元件與 Istio 等平台工具,而這些是 Fargate 無法支援的。EKS 自動模式還完全支援所有 EC2 執行時期購買選項,包括 GPU 和 Spot 執行個體,使客戶能夠利用協商後的 EC2 折扣和其他節省機制。這些功能在使用帶有 Fargate 的 EKS 時不可用。
此外,EKS 自動模式允許客戶實現與 Fargate 相同的隔離模型,使用標準的 Kubernetes 排程功能來確保每個 EC2 執行個體運行單個應用程式容器。透過採用 Amazon EKS Auto Mode,客戶可以釋放在 上執行 Kubernetes 的完整優點 AWS ,這是一個完全符合 Kubernetes 標準的平台,提供彈性以利用 EC2 和購買選項的完整廣度,同時保留 Fargate 提供的基礎設施管理的易用性和抽象性。
先決條件
開始移轉之前,請確保您已具備下列項目
-
使用 Fargate 設定叢集。如需詳細資訊,請參閱為您的叢集開始使用 AWS Fargate。
-
已安裝並將
kubectl連接到您的叢集。如需詳細資訊,請參閱設定以使用 Amazon EKS。
步驟 1:檢查 Fargate 叢集
-
檢查帶有 Fargate 的 EKS 叢集是否正在執行:
kubectl get nodeNAME STATUS ROLES AGE VERSION fargate-ip-192-168-92-52.ec2.internal Ready <none> 25m v1.30.8-eks-2d5f260 fargate-ip-192-168-98-196.ec2.internal Ready <none> 24m v1.30.8-eks-2d5f260
-
檢查執行中的 Pod:
kubectl get pod -ANAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-6659cb98f6-gxpjz 1/1 Running 0 26m kube-system coredns-6659cb98f6-gzzsx 1/1 Running 0 26m
-
在名為
deployment_fargate.yaml的檔案中建立部署:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: eks.amazonaws.com/compute-type: fargate spec: containers: - name: nginx image: nginx ports: - containerPort: 80 -
套用部署:
kubectl apply -f deployment_fargate.yamldeployment.apps/nginx-deployment created
-
檢查 Pod 與部署狀態:
kubectl get pod,deployNAME READY STATUS RESTARTS AGE pod/nginx-deployment-5c7479459b-6trtm 1/1 Running 0 61s pod/nginx-deployment-5c7479459b-g8ssb 1/1 Running 0 61s pod/nginx-deployment-5c7479459b-mq4mf 1/1 Running 0 61s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-deployment 3/3 3 3 61s
-
檢查節點:
kubectl get node -owideNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME fargate-ip-192-168-111-43.ec2.internal Ready <none> 31s v1.30.8-eks-2d5f260 192.168.111.43 <none> Amazon Linux 2 5.10.234-225.910.amzn2.x86_64 containerd://1.7.25 fargate-ip-192-168-117-130.ec2.internal Ready <none> 36s v1.30.8-eks-2d5f260 192.168.117.130 <none> Amazon Linux 2 5.10.234-225.910.amzn2.x86_64 containerd://1.7.25 fargate-ip-192-168-74-140.ec2.internal Ready <none> 36s v1.30.8-eks-2d5f260 192.168.74.140 <none> Amazon Linux 2 5.10.234-225.910.amzn2.x86_64 containerd://1.7.25
步驟 2:在叢集上啟用 EKS 自動模式
-
使用 CLI 或 管理主控台在現有叢集上啟用 AWS EKS 自動模式。如需詳細資訊,請參閱在現有叢集上啟用 EKS 自動模式。
-
檢查 nodepool:
kubectl get nodepoolNAME NODECLASS NODES READY AGE general-purpose default 1 True 6m58s system default 0 True 3d14h
步驟 3:更新工作負載以進行移轉
識別並更新您想要移轉至 EKS 自動模式的工作負載。
要將工作負載從 Fargate 移轉至 EKS 自動模式,請套用註釋 eks.amazonaws.com/compute-type: ec2。這能確保即使存在 Fargate 設定檔,該工作負載也不會由 Fargate 排程,而是由 EKS 自動模式 NodePool 接管。如需詳細資訊,請參閱為 EKS 自動模式建立節點集區。
-
修改您的部署 (例如
deployment_fargate.yaml檔案),將運算類型變更為ec2:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: eks.amazonaws.com/compute-type: ec2 spec: containers: - name: nginx image: nginx ports: - containerPort: 80 -
套用部署。此變更可讓工作負載排程至新的 EKS 自動模式節點:
kubectl apply -f deployment_fargate.yaml -
檢查部署是否在 EKS 自動模式叢集中執行:
kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-97967b68d-ffxxh 1/1 Running 0 3m31s 192.168.43.240 i-0845aafcb51630ffb <none> <none> nginx-deployment-97967b68d-mbcgj 1/1 Running 0 2m37s 192.168.43.241 i-0845aafcb51630ffb <none> <none> nginx-deployment-97967b68d-qpd8x 1/1 Running 0 2m35s 192.168.43.242 i-0845aafcb51630ffb <none> <none>
-
確認沒有 Fargate 節點在執行,且部署正在 EKS 自動模式受管節點上執行:
kubectl get node -owideNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME i-0845aafcb51630ffb Ready <none> 3m30s v1.30.8-eks-3c20087 192.168.41.125 3.81.118.95 Bottlerocket (EKS Auto) 2025.3.14 (aws-k8s-1.30) 6.1.129 containerd://1.7.25+bottlerocket
步驟 4:逐步移轉工作負載
針對要移轉的每個工作負載重複步驟 3。這使您可根據需求和風險承受能力,單獨或分組移動工作負載。
步驟 5:移除原始的 Fargate 設定檔
所有工作負載移轉完成後,即可移除原始的 fargate 設定檔。將 <fargate profile name> 取代為您的 Fargate 設定檔名稱:
aws eks delete-fargate-profile --cluster-name eks-fargate-demo-cluster --fargate-profile-name <fargate profile name>
步驟 6:縮減 CoreDNS 規模
由於 EKS 自動模式會處理 CoreDNS,您可將 coredns 部署縮減到 0:
kubectl scale deployment coredns -n kube-system —-replicas=0