快速入門:部署 Web 應用程式並存放資料 - Amazon EKS

協助改進此頁面

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

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

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

快速入門:部署 Web 應用程式並存放資料

本快速入門教學課程會逐步引導您部署 2048 遊戲範例應用程式,並使用 eksctl 將其資料保留在 Amazon EKS Auto Mode 叢集上。

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

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

於本教學課程中

您將藉助隨附的 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)。

先決條件

開始之前,請確定您已執行下列任務:

設定叢集

在這個部分,您將藉助 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

針對 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 遊戲範例應用程式

在這個部分,我們將逐步引導您將熱門的「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
  2. 部署 2048 遊戲範例應用程式

    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
  3. 執行以下命令,獲取 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) 完成佈建。

  4. 開啟 Web 瀏覽器並輸入上一步的 ADDRESS,以存取 Web 應用程式。例如:

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

    您應在瀏覽器中看到 2048 遊戲。暢玩!

    玩 2048 遊戲

藉助 Amazon EKS 自動模式讓資料持續保留

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"
  2. 套用 StorageClass

    kubectl apply -f storage-class.yaml
  3. 建立持續性磁碟區宣告 (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
  4. 將 PVC 套用至您的叢集:

    kubectl apply -f ebs-pvc.yaml

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

    persistentvolumeclaim/game-data-pvc created
  5. 您現在需更新 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
  6. 套用更新的部署:

    kubectl apply -f ebs-deployment.yaml

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

    deployment.apps/deployment-2048 configured

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

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

清除

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

刪除 CloudFormation 堆疊:

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