

 **協助改進此頁面** 

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

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

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

# 快速入門：部署 Web 應用程式並存放資料
<a name="quickstart"></a>

本快速入門教學課程會逐步引導您部署 2048 遊戲範例應用程式，並使用 [eksctl](https://eksctl.io/) 將其資料保留在 Amazon EKS Auto Mode 叢集上。

 [Amazon EKS Auto Mode](automode.md) 透過自動化區塊儲存、聯網、負載平衡和運算自動擴展等例行任務，簡化叢集管理。在設定期間，它會處理使用 EC2 受管執行個體、應用程式負載平衡器和 EBS 磁碟區的建立節點。

總而言之，您將使用與服務無縫整合所需的自訂註釋來部署範例工作負載 AWS 。

## 於本教學課程中
<a name="_in_this_tutorial"></a>

您將藉助隨附的 `eksctl` 叢集範本，透過 EKS 自動模式來建置叢集，以便自動執行節點佈建。
+  **VPC 組態**：使用後續的 eksctl 叢集範本時，eksctl 會自動為叢集建立 IPv4 Virtual Private Cloud (VPC)。依預設，除了建立公有與私有端點，eksctl 還會設定可滿足所有聯網需求的 VPC。
+  **執行個體管理**：EKS Auto Mode 會根據 Kubernetes 應用程式的需求，動態新增或移除 EKS 叢集中的節點。
+  **資料持久性**：使用 EKS Auto Mode 的區塊儲存功能來確保應用程式資料的持久性，即使在涉及 Pod 重新啟動或故障的情況下也是如此。
+  **外部應用程式存取**：使用 EKS Auto Mode 的負載平衡功能動態佈建 Application Load Balancer (ALB)。

## 先決條件
<a name="_prerequisites"></a>

開始之前，請確定您已執行下列任務：
+  [為 Amazon EKS 設定您的環境](https://docs.aws.amazon.com/eks/latest/userguide/setting-up.html) 
+  [安裝 eksctl 的最新版本](https://eksctl.io/installation/) 

## 設定叢集
<a name="_configure_the_cluster"></a>

在這個部分，您將藉助 EKS 自動模式來建立叢集，以便動態佈建節點。

建立一個 `cluster-config.yaml` 檔案並將以下內容貼入其中。`region-code` 將 取代為有效的區域 （例如 `us-east-1`)。

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: web-quickstart
  region: <region-code>

autoModeConfig:
  enabled: true
```

現在，我們可隨時建立叢集。

使用 建立 EKS 叢集`cluster-config.yaml``：

```
eksctl create cluster -f cluster-config.yaml
```

**重要**  
若不使用 eksctl 建立叢集，您需手動標記 VPC 子網路。

## 建立 IngressClass
<a name="_create_ingressclass"></a>

針對 EKS 自動模式建立 `IngressClass` Kubernetes。IngressClass 定義 EKS 自動模式處理傳入資源的方式。此步驟設定 EKS 自動模式的負載平衡功能。當您為應用程式建立輸入資源時，EKS Auto Mode 會使用此 IngressClass 來自動佈建和管理負載平衡器，並將 Kubernetes 應用程式與 AWS 負載平衡服務整合。

以 `ingressclass.yaml` 儲存以下 yaml 檔案：

```
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: alb
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
spec:
  controller: eks.amazonaws.com/alb
```

套用 IngressClass 至您的叢集：

```
kubectl apply -f ingressclass.yaml
```

## 部署 2048 遊戲範例應用程式
<a name="_deploy_the_2048_game_sample_application"></a>

在這個部分，我們將逐步引導您將熱門的「2048 遊戲」作為叢集內的範例應用程式進行部署。提供的資訊清單包括 Application Load Balancer (ALB) 的自訂註解。這些註釋與 整合，並指示 EKS 將傳入的 HTTP 流量視為「面向網際網路」，並使用目標類型「ip」將其路由到`game-2048`命名空間中的適當服務。

**注意**  
範例中的 `docker-2048` 映像是 `x86_64` 容器映像，並且不會在其他架構執行。

1. 透過 `--save-config` 標誌建立名稱為 `game-2048` 的 Kubernetes 命名空間。

   ```
   kubectl create namespace game-2048 --save-config
   ```

   您應該會看到下列回應輸出：

   ```
   namespace/game-2048 created
   ```

1. 部署 [2048 遊戲範例應用程式](https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.8.0/docs/examples/2048/2048_full.yaml)。

   ```
   kubectl apply -n game-2048 -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.8.0/docs/examples/2048/2048_full.yaml
   ```

   此資訊清單針對 `game-2048` 命名空間，設定了 Kubernetes 部署、服務與傳入，從而建立必要的資源，以便在叢集內部署及公開 `game-2048` 應用程式。其包括建立一項名稱為 `service-2048` 的服務，該服務在連接埠 `80` 上公開部署；還會建立一個名稱為 `ingress-2048` 的傳入資源，該資源定義傳入 HTTP 流量的路由規則，以及面向網際網路的 Application Load Balancer (ALB) 的註解。您應該會看到下列回應輸出：

   ```
   namespace/game-2048 configured
   deployment.apps/deployment-2048 created
   service/service-2048 created
   ingress.networking.k8s.io/ingress-2048 created
   ```

1. 執行以下命令，獲取 `game-2048` 命名空間的傳入資源。

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

   您應該會看到下列回應輸出：

   ```
   NAME           CLASS   HOSTS   ADDRESS                                                                    PORTS   AGE
   ingress-2048   alb     *       k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com   80      31s
   ```

   開始以下步驟之前，您將需要等候數分鐘，以便 Application Load Balancer (ALB) 完成佈建。

1. 開啟 Web 瀏覽器並輸入上一步的 `ADDRESS`，以存取 Web 應用程式。例如：

   ```
   k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com
   ```

   您應在瀏覽器中看到 2048 遊戲。暢玩！  
![\[玩 2048 遊戲\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/images/quick2048.png)

## 藉助 Amazon EKS 自動模式讓資料持續保留
<a name="_persist_data_using_amazon_eks_auto_mode"></a>

2048 遊戲現在已在 Amazon EKS 叢集上啟動並執行，務必利用 Amazon EKS 自動模式的區塊儲存功能，讓遊戲資料安全、持續保留。

1. 建立名為 `storage-class.yaml` 的檔案：

   ```
   apiVersion: storage.k8s.io/v1
   kind: StorageClass
   metadata:
     name: auto-ebs-sc
     annotations:
       storageclass.kubernetes.io/is-default-class: "true"
   provisioner: ebs.csi.eks.amazonaws.com
   volumeBindingMode: WaitForFirstConsumer
   parameters:
     type: gp3
     encrypted: "true"
   ```

1. 套用 `StorageClass`：

   ```
   kubectl apply -f storage-class.yaml
   ```

1. 建立持續性磁碟區宣告 (PVC)，以請求儲存遊戲資料。建立名稱為 `ebs-pvc.yaml` 的檔案並為其新增以下內容：

   ```
   apiVersion: v1
   kind: PersistentVolumeClaim
   metadata:
     name: game-data-pvc
     namespace: game-2048
   spec:
     accessModes:
       - ReadWriteOnce
     resources:
       requests:
         storage: 10Gi
     storageClassName: auto-ebs-sc
   ```

1. 將 PVC 套用至您的叢集：

   ```
   kubectl apply -f ebs-pvc.yaml
   ```

   您應該會看到下列回應輸出：

   ```
   persistentvolumeclaim/game-data-pvc created
   ```

1. 您現在需更新 2048 遊戲部署，以使用此 PVC 來存放資料。設定以下部署，以使用 PVC 來存放遊戲資料。建立名稱為 `ebs-deployment.yaml` 的檔案並為其新增以下內容：

   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     namespace: game-2048
     name: deployment-2048
   spec:
     replicas: 3  # Adjust the number of replicas as needed
     selector:
       matchLabels:
         app.kubernetes.io/name: app-2048
     template:
       metadata:
         labels:
           app.kubernetes.io/name: app-2048
       spec:
         containers:
           - name: app-2048
             image: public.ecr.aws/l6m2t8p7/docker-2048:latest
             imagePullPolicy: Always
             ports:
               - containerPort: 80
             volumeMounts:
               - name: game-data
                 mountPath: /var/lib/2048
         volumes:
           - name: game-data
             persistentVolumeClaim:
               claimName: game-data-pvc
   ```

1. 套用更新的部署：

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

   您應該會看到下列回應輸出：

   ```
   deployment.apps/deployment-2048 configured
   ```

完成這些步驟後，現在即可設定叢集上的 2048 遊戲，以利用 Amazon EKS 自動模式的區塊儲存功能持續保留資料。這樣一來，即使 Pod 或節點發生故障，仍可確保遊戲進度及資料是安全的。

若您喜歡此教學課程，您可提供意見回饋告知我們，以便我們為您提供更多此類使用案例的特定快速入門教學課程。

## 清除
<a name="_clean_up"></a>

若要避免未來產生費用，您需要手動刪除相關聯的 CloudFormation 堆疊，進而刪除在本指南中建立的所有資源，包括 VPC 網路。

刪除 CloudFormation 堆疊：

```
eksctl delete cluster -f ./cluster-config.yaml
```