

 **協助改進此頁面** 

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

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

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

# 將範例負載平衡器工作負載部署至 EKS 自動模式
<a name="auto-elb-example"></a>

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

## 先決條件
<a name="_prerequisites"></a>
+ EKS 自動模式叢集
+  `kubectl` 已設定為與叢集互動
+ 建立 ALB 資源的適當 IAM 許可

## 步驟 1：建立命名空間
<a name="_step_1_create_the_namespace"></a>

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

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

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

套用命名空間組態：

```
kubectl apply -f 01-namespace.yaml
```

## 步驟 2：部署應用程式
<a name="_step_2_deploy_the_application"></a>

應用程式會執行多個 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 角色](auto-learn-iam.md#auto-learn-node-iam-role)。此外，範例中的 `docker-2048` 映像是 `x86_64` 映像，並且不會在其他架構執行。

 **關鍵元件：**
+ 部署 5 個應用程式複本
+ 使用公有 ECR 映像
+ 每個 Pod 請求 0.5 個 CPU 核心
+ 公開 HTTP 流量的連接埠 80

套用部署：

```
kubectl apply -f 02-deployment.yaml
```

## 步驟 3：建立服務
<a name="_step_3_create_the_service"></a>

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

建立名為 `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：設定負載平衡
<a name="_step_4_configure_load_balancing"></a>

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

首先，建立 `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 自動模式的子網路](tag-subnets-auto.md)。

然後建立傳入資源。建立名為 `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：確認部署
<a name="_step_5_verify_the_deployment"></a>

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

   ```
   kubectl get pods -n game-2048
   ```

1. 確認服務是否已建立：

   ```
   kubectl get svc -n game-2048
   ```

1. 取得 ALB 端點：

   ```
   kubectl get ingress -n game-2048
   ```

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

## 步驟 6：存取遊戲
<a name="_step_6_access_the_game"></a>

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

## 步驟 7：清除
<a name="_step_7_cleanup"></a>

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

```
kubectl delete namespace game-2048
```

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

## 幕後情況
<a name="_whats_happening_behind_the_scenes"></a>

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

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

1. EKS 自動模式：
   + 在 中建立 Application Load Balancer AWS 
   + 為 Pod 設定目標群組
   + 設定路由規則，以將流量導向服務

## 疑難排解
<a name="auto-elb-troubleshooting"></a>

如果遊戲無法載入：
+ 確保所有 Pod 均在執行：`kubectl get pods -n game-2048`
+ 檢查傳入狀態：`kubectl describe ingress -n game-2048`
+ 驗證 ALB 運作狀態檢查：在 AWS 主控台中檢查目標群組運作狀態