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

協助改善此頁面

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

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

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

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

於本教學課程中

使用下列 eksctl 叢集範本,您將使用受管節點群組建置 Amazon EKS叢集。它會設定下列元件:

VPC 組態

使用之後的 eksctl 叢集範本時,eksctl 會自動為叢集建立IPv4虛擬私有雲端 (VPC)。根據預設,除了建立公有和私有端點之外,eksctl 還會設定 VPC 來滿足所有聯網需求

執行個體類型

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

身分驗證

建立IRSA映射,以促進 Kubernetes Pod AWS 和服務之間的通訊。範本設定為設定 OpenID Connect (OIDC) 端點以進行身分驗證和授權。它還為 AWS Load Balancer 控制器 (LBC) 建立服務帳戶,該控制器負責公開應用程式和管理流量。

資料持久性

整合AWS EBSCSI驅動程式受管附加元件,以確保應用程式資料的持久性,即使在涉及 Pod 重新啟動或失敗的情況下也是如此。範本設定為安裝附加元件並建立服務帳戶

外部應用程式存取

使用 LBC 動態佈建 Application Load AWS Load Balancer (LBC),設定並與 Load Balancer Controller () 附加元件整合,以公開 2048 遊戲應用程式 ALB。 Application Load Balancer

必要條件

步驟 1:設定叢集

在本節中,您將使用包含兩個節點的 t3.medium 執行個體建立受管節點群組型叢集。此組態包含 AWS Load Balancer Controller (LBC) 附加元件的服務帳戶,以及安裝最新版本的 AWS Amazon EBSCSI驅動程式 。如需所有可用的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叢集並指定 cluster-config.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)

透過叢集運作,我們的下一步是讓其容器化應用程式可從外部存取。這可透過部署 Application Load Balancer (ALB) 來將叢集外的流量引導至我們的服務,換句話說,即我們的應用程式。建立叢集時,我們為 Load Balancer 控制器 IAM(IRSA) 建立了服務帳戶 () 的角色,並具有動態建立 所需的許可ALBs,有助於將外部流量路由至 Kubernetes 服務。 Load Balancer LBC 在本節中,我們會在叢集上設定 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 AWS Load Balancer 控制器 (LBC) 利用 Kubernetes 中的自訂資源定義 (CRDs) 來管理 AWS Elastic Load Balancer (ELBs)。這些CRDs定義自訂資源,例如負載平衡器和 TargetGroupBindings,啟用 Kubernetes 叢集來識別和管理它們。

  1. 使用 Helm 將 Amazon EKS Chart 儲存庫新增至 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使用 --save-config旗標呼叫的 Kubernetes 命名空間。

    kubectl create namespace game-2048 --save-config

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

    namespace/game-2048 created
  2. 部署 2048 Game Sample 應用程式

    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 遊戲

步驟 5:使用 Amazon EBS CSI Driver 節點的持久性資料

現在 2048 遊戲已在您的 Amazon EKS叢集上啟動並執行,是時候使用 Amazon EBS CSI Driver 受管附加元件來確保您的遊戲資料安全持久了。此附加元件已在建立過程中安裝在我們的叢集上。即使重新啟動或取代 Kubernetes Pod 或節點,這種整合對於保留遊戲進度和資料至關重要。

  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 EBSCSI驅動程式來保留資料。這可確保您的遊戲進度和資料即使在 Pod 或節點故障的情況下也是安全的。如果您喜歡此教學課程,請提供意見回饋,讓我們能夠為您提供更多使用案例特定的快速入門教學課程,例如此教學課程。

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

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

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

完成後,您應該會看到下列回應輸出:

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

後續步驟

下列複雜主題可協助您擴展叢集的功能:

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