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

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。

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

快速入門:部署 Web 應用程式和儲存資料

本快速入門教學課程說明部署 2048 年遊戲範例應用程 infrastructure-as-code 式,並使用 eksctl 將其資料保存在 Amazon EKS 叢集上的步驟。eksctl 是一項利用公用程式 AWS CloudFormation,可讓您設定功能齊全的叢集,並包含所有必要元件。這些元件包括 Amazon VPC 和為我們定義的 AWS 服務提供許可而量身打造的IAM角色。隨著我們的進展,我們將逐步引導您完成叢集設定程序,並整合 Amazon EKS Amazon EKS 插件 來為您的叢集提供操作功能。最後,您將部署範例工作負載,其中包含與 AWS 服務完全整合所需的自訂註釋。

於本教學課程中

使用下列的 eksctl 叢集範本,您將建立具有受管節點群組的 Amazon EKS 叢集。它配置以下組件:

VPC配置

使用後續的 eksctl 叢集範本時,eksctl 會自動為叢集建立IPv4虛擬私有雲 (VPC)。依預設,eksctl 除了建立公用端點和私VPC有端點之外,還會設定一個解決所有網路需求

執行個體類型

使用 t3.medium 執行個體類型。這種執行個體類型提供運算、記憶體和網路資源的完美平衡組合,非常適合CPU使用量適中的應用程式,可能偶爾會遇到需求激增。

身分驗證

建立對IRSA應以促進 Kubernetes 網繭與服務之間的通訊。 AWS 該模板配置為設置 OpenID Connect(OIDC)端點進行身份驗證和授權。它也會建立 AWS Load Balancer 控制器 (LBC) 的服務帳戶,負責公開應用程式和管理流量的控制器。

資料持久性

整合AWS EBSCSI驅動程式管理的附加元件,以確保應用程式資料的持續性,即使在涉及網繭重新啟動或失敗的情況 範本設定為安裝附加元件並建立服務帳戶

外部應用訪問

設定並與 AWS Load Balancer 控制器 (LBC) 附加元件整合,以公開 2048 遊戲應用程式,並使用動態佈建應用程式負載平衡器 (ALB)。LBC

必要條件

步驟 1:配置叢集

在本節中,您將使用包含兩個節點的 t3.medium 執行個體來建立受控節點群組型叢集。該組態包括 AWS Load Balancer 控制器 (LBC) 附加元件的服務帳戶,以及安裝最新版本的 AWS Amazon EBS CSI 驅動程式。如需所有可用的eksctl附加元件,請參閱探索eksctl文件中的附加元

  • 創建一個cluster-config.yaml文件並將以下內容粘貼到其中。以有效的區域取代區域碼,例如 us-east-1

    範例輸出如下:

    apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: web-quickstart region: region-code managedNodeGroups: - name: eks-mng instanceType: t3.medium desiredCapacity: 2 iam: withOIDC: true serviceAccounts: - metadata: name: aws-load-balancer-controller namespace: kube-system wellKnownPolicies: awsLoadBalancerController: true addons: - name: aws-ebs-csi-driver wellKnownPolicies: # Adds an IAM service account ebsCSIController: true cloudWatch: clusterLogging: enableTypes: ["*"] logRetentionInDays: 30

步驟 2:建立叢集

現在,我們已經準備好建立我們的 Amazon EKS 叢集。這個過程需要幾分鐘的時間來完成。如果您想要監控狀態,請參閱主AWS CloudFormation控台。

  • 建立 Amazon EKS 叢集並指定叢集配置 .yaml。

    eksctl create cluster -f cluster-config.yaml
    注意

    如果您在回應Error: checking STS access中收到,請確定您在目前的 shell 工作階段中使用正確的使用者身分。您可能還需要指定具名的設定檔 (例如,--profile clusteradmin) 或取得 AWS CLI.

    完成後,您應該看到以下響應輸出:

    2024-07-04 21:47:53 [✔] EKS cluster "web-quickstart" in "region-code" region is ready

步驟 3:使用 AWS Load Balancer Controller (LBC) 設定對應用程式的外部存取

隨著叢集的運作,我們的下一步是讓容器化應用程式從外部存取。這是透過部署應用程式負載平衡器 (ALB) 來將叢集外部的流量引導至我們的服務,換句話說,就是我們的應用程式。建立叢集時,我們為 Load Balancer 控制器 (IRSA) 建立了服務帳戶IAM角色 (LBC),並具有動態建立所需的權限ALBs,以便將外部流量路由至 Kubernetes 服務。在本節中,我們將在叢集 AWS LBC上設定。

若要設定環境變數

  1. 為您的 Amazon EKS 叢集設定CLUSTER_REGION環境變數。取代 region-code 的範例值。

    export CLUSTER_REGION=region-code
  2. 為您的 Amazon EKS 叢集設定CLUSTER_VPC環境變數。

    export CLUSTER_VPC=$(aws eks describe-cluster --name web-quickstart --region $CLUSTER_REGION --query "cluster.resourcesVpcConfig.vpcId" --output text)

安裝 AWS Load Balancer 控制器 (LBC)

Load Bal AWS ancer 控制器 (LBC) 利用 Kubernetes 中的自訂資源定義 (CRDs) 來管理 AWS 彈性負載平衡器 ()。ELBs這些CRDs定義自訂資源 (例如負載平衡器) TargetGroupBindings,並可讓Kubernetes叢集辨識和管理這些資源。

  1. 使用頭盔將 Amazon EKS 圖表存儲庫添加到 Helm。

    helm repo add eks https://aws.github.io/eks-charts
  2. 更新存放庫以確保 Helm 知道圖表的最新版本:

    helm repo update eks
  3. 執行下列 Helm 命令以同時安裝 AWS Load Balancer 控制器的自訂資源定義 (CRDs) 和主控制器 (AWS LBC)。若要略過CRD安裝,請傳遞--skip-crds旗標,如果已經安裝、需要特定版本相容性,或在具有嚴格存取控制和自訂需求的環境中,這可能會很有用。CRDs

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ --namespace kube-system \ --set clusterName=web-quickstart \ --set serviceAccount.create=false \ --set region=${CLUSTER_REGION} \ --set vpcId=${CLUSTER_VPC} \ --set serviceAccount.name=aws-load-balancer-controller

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

    NAME: aws-load-balancer-controller LAST DEPLOYED: Wed July 3 19:43:12 2024 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: AWS Load Balancer controller installed!

步驟 4:部署 2048 遊戲範例應用程式

現在已設定負載平衡器,是時候為叢集中的容器化應用程式啟用外部存取。在本節中,我們將引導您完成將流行的「2048 遊戲」部署為叢集中的範例應用程式的步驟。提供的資訊清單包括 Application Load Balancer (ALB) 的自訂註解,特別是 「配置」註釋和 「目標類型」 註釋。這些註解與 AWS Load Balancer 控制器 (LBC) 整合並指示將傳入HTTP流量視為「網際網路對向」處理,並使用目標類型「ip」將其路由至「Game 2048」命名空間中的適當服務。如需更多註解,請參閱 AWS LBC文件中的註釋

  1. 建立game-2048使用旗標呼叫的 Kubernetes 命名空間。--save-config

    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的服務,以及一個名為的 Ingress 資源80ingress-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名空間的 Ingress 資源。

    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

    您需要等待幾分鐘,才能佈建應用程式負載平衡器 (ALB),然後才能開始執行下列步驟。

  4. 開啟網頁瀏覽器,然後ADDRESS輸入上一個步驟以存取 Web 應用程式。例如:k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com。您應該在瀏覽器中看到 2048 遊戲。玩!

    進行戰鬥遊戲

步驟 5:使用 Amazon EBS CSI 驅動程式節點保留資料

現在 2048 遊戲已在您的 Amazon EKS 叢集上啟動並執行,現在是時候使用 Amazon EBS CSI 驅動程式受管附加元件安全地保存您的遊戲資料了。此附加元件已在建立過程中安裝在我們的叢集上。此整合對於保留遊戲進度和資料至關重要,即使 Kubernetes 網繭或節點已重新啟動或更換也是如此。

  1. 為EBSCSI驅動程式建立儲存類別

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/examples/kubernetes/dynamic-provisioning/manifests/storageclass.yaml
  2. 建立持續性磁碟區宣告 (PVC) 以要求儲存您的遊戲資料。創建一個名為的文件,ebs-pvc.yaml並將以下內容添加到其中:

    apiVersion: v1 kind: PersistentVolumeClaim metadata: name: game-data-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ebs-sc
  3. 套用PVC至您的叢集:

    kubectl apply -f ebs-pvc.yaml

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

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

    kubectl apply -f ebs-deployment.yaml

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

    deployment.apps/deployment-2048 configured

通過這些步驟,您在 Amazon 上的 2048 遊戲現在EKS已設置為使用 Amazon EBS CSI 驅動程序保留數據。這可確保即使在網繭或節點故障的情況下,您的遊戲進度和資料也是安全的。如果您喜歡本教程,請通過提供反饋來告訴我們,以便我們能夠為您提供更多特定於使用案例的快速入門教程,例如這個教程。

步驟 6:刪除您的叢集和節點

在完成為本教學建立的叢集和節點後,您應該使用以下命令刪除叢集和節點來完成清理。如果您想在清理之前對此叢集執行更多操作,請參閱後續步驟。

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

完成後,您應該看到以下響應輸出:

2024-07-05 17:26:44 [✔] all cluster resources were deleted

後續步驟

下列文件主題可協助您擴充叢集的功能:

探索建立不同叢集類型的方法: