從 EKS Fargate 移轉至 EKS 自動模式 - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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 提供的基礎設施管理的易用性和抽象性。

先決條件

開始移轉之前,請確保您已具備下列項目

步驟 1:檢查 Fargate 叢集

  1. 檢查帶有 Fargate 的 EKS 叢集是否正在執行:

    kubectl get node
    NAME 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
  2. 檢查執行中的 Pod:

    kubectl get pod -A
    NAMESPACE 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
  3. 在名為 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
  4. 套用部署:

    kubectl apply -f deployment_fargate.yaml
    deployment.apps/nginx-deployment created
  5. 檢查 Pod 與部署狀態:

    kubectl get pod,deploy
    NAME                                    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
  6. 檢查節點:

    kubectl get node -owide
    NAME                                    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 自動模式

  1. 使用 CLI 或 管理主控台在現有叢集上啟用 AWS EKS 自動模式。如需詳細資訊,請參閱在現有叢集上啟用 EKS 自動模式

  2. 檢查 nodepool:

    kubectl get nodepool
    NAME              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 自動模式建立節點集區

  1. 修改您的部署 (例如 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
  2. 套用部署。此變更可讓工作負載排程至新的 EKS 自動模式節點:

    kubectl apply -f deployment_fargate.yaml
  3. 檢查部署是否在 EKS 自動模式叢集中執行:

    kubectl get pod -o wide
    NAME                               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>
  4. 確認沒有 Fargate 節點在執行,且部署正在 EKS 自動模式受管節點上執行:

    kubectl get node -owide
    NAME                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