將範例負載平衡器工作負載部署至 EKS 自動模式 - Amazon EKS

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

將範例負載平衡器工作負載部署至 EKS 自動模式

本指南將引導您在 Amazon EKS 上部署容器化版本的 2048 遊戲,並包含負載平衡和網際網路可存取性。

先決條件

  • EKS 自動模式叢集

  • kubectl 已設定為與叢集互動

  • 建立 ALB 資源的適當 IAM 許可

步驟 1:建立命名空間

首先,為 2048 遊戲應用程式建立專用命名空間。

建立名為 01-namespace.yaml 的檔案:

apiVersion: v1 kind: Namespace metadata: name: game-2048

套用命名空間組態:

kubectl apply -f 01-namespace.yaml

步驟 2:部署應用程式

應用程式會執行多個 2048 遊戲容器的複本。

建立名為 02-deployment.yaml 的檔案:

apiVersion: apps/v1 kind: Deployment metadata: namespace: game-2048 name: deployment-2048 spec: selector: matchLabels: app.kubernetes.io/name: app-2048 replicas: 5 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always name: app-2048 ports: - containerPort: 80 resources: requests: cpu: "0.5"
注意

如果您在載入映像 public.ecr.aws/l6m2t8p7/docker-2048:latest 時遇到錯誤,請確認您的節點 IAM 角色具有從 ECR 提取映像的足夠許可。如需詳細資訊,請參閱 節點 IAM 角色。此外,範例中的 docker-2048 映像是 x86_64 映像,並且不會在其他架構執行。

關鍵元件:

  • 部署 5 個應用程式複本

  • 使用公有 ECR 映像

  • 每個 Pod 請求 0.5 個 CPU 核心

  • 公開 HTTP 流量的連接埠 80

套用部署:

kubectl apply -f 02-deployment.yaml

步驟 3:建立服務

服務會將部署公開至叢集網路。

建立名為 03-service.yaml 的檔案:

apiVersion: v1 kind: Service metadata: namespace: game-2048 name: service-2048 spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app.kubernetes.io/name: app-2048

關鍵元件:

  • 建立 NodePort 服務

  • 將連接埠 80 映射至容器的連接埠 80

  • 使用標籤選擇器來尋找 Pod

套用服務:

kubectl apply -f 03-service.yaml

步驟 4:設定負載平衡

您將設定傳入,以將應用程式公開至網際網路。

首先,建立 IngressClass。建立名為 04-ingressclass.yaml 的檔案:

apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: labels: app.kubernetes.io/name: LoadBalancerController name: alb spec: controller: eks.amazonaws.com/alb
注意

EKS 自動模式需要子網路標籤來識別公有和私有子網路。

若您使用 eksctl 建立叢集,則您已具備這些標籤。

了解如何 標記 EKS 自動模式的子網路

然後建立傳入資源。建立名為 05-ingress.yaml 的檔案:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: game-2048 name: ingress-2048 annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip spec: ingressClassName: alb rules: - http: paths: - path: / pathType: Prefix backend: service: name: service-2048 port: number: 80

關鍵元件:

  • 建立面向網際網路的 ALB

  • 使用 IP 目標類型來進行直接 Pod 路由

  • 將所有流量 (/) 路由到遊戲服務

套用傳入組態:

kubectl apply -f 04-ingressclass.yaml kubectl apply -f 05-ingress.yaml

步驟 5:確認部署

  1. 檢查所有 Pod 是否處於執行狀態:

    kubectl get pods -n game-2048
  2. 確認服務是否已建立:

    kubectl get svc -n game-2048
  3. 取得 ALB 端點:

    kubectl get ingress -n game-2048

傳入輸出中的 ADDRESS 欄位將顯示您的 ALB 端點。等待 2-3 分鐘,讓 ALB 完成佈建並註冊所有目標。

步驟 6:存取遊戲

開啟網頁瀏覽器,瀏覽至先前步驟中取得的 ALB 端點 URL。您應會看到 2048 遊戲介面。

步驟 7:清除

要移除在本教學課程中建立的全部資源:

kubectl delete namespace game-2048

這將刪除命名空間中的所有資源,包括部署、服務和傳入資源。

幕後情況

  1. 部署會建立 5 個執行 2048 遊戲的 Pod

  2. 服務為這些 Pod 提供穩定的網路存取

  3. EKS 自動模式:

    • 如何在 AWS 建立 Application Load Balancer

    • 為 Pod 設定目標群組

    • 設定路由規則,以將流量導向服務

故障診斷

如果遊戲無法載入:

  • 確保所有 Pod 均在執行:kubectl get pods -n game-2048

  • 檢查傳入狀態:kubectl describe ingress -n game-2048

  • 確認 ALB 運作狀態檢查:在 AWS 主控台中檢查目標群組的運作狀態