View a markdown version of this page

快速入門:部署 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