協助改善此頁面
想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後在 上選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合所有人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
快速入門:部署 Web 應用程式和儲存資料
本快速入門教學課程示範了部署 2048 遊戲範例應用程式,並使用 eksctl
於本教學課程中
使用下列 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 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
若要設定環境變數
-
設定 Amazon EKS叢集
CLUSTER_REGION
的環境變數。取代region-code
的範例值。export CLUSTER_REGION=region-code
-
設定 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 叢集來識別和管理它們。
使用 Helm
將 Amazon EKS Chart 儲存庫新增至 Helm。 helm repo add eks https://aws.github.io/eks-charts
更新儲存庫,以確保 Helm 了解圖表的最新版本:
helm repo update eks
執行下列 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) 的自訂註釋,特別是「結構」註釋
建立
game-2048
使用--save-config
旗標呼叫的 Kubernetes 命名空間。kubectl create namespace game-2048 --save-config
您應該會看到下列回應輸出:
namespace/game-2048 created
-
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
執行下列命令以取得
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) 佈建,才能開始下列步驟。
開啟 Web 瀏覽器,然後從上
ADDRESS
一個步驟輸入 以存取 Web 應用程式。例如:k8s-game2048-ingress2-eb379a0f83-378466616.
region-code
.elb.amazonaws.com
。您應該會在瀏覽器中看到 2048 遊戲。播放!
步驟 5:使用 Amazon EBS CSI Driver 節點的持久性資料
現在 2048 遊戲已在您的 Amazon EKS叢集上啟動並執行,是時候使用 Amazon EBS CSI Driver 受管附加元件來確保您的遊戲資料安全持久了。此附加元件已在建立過程中安裝在我們的叢集上。即使重新啟動或取代 Kubernetes Pod 或節點,這種整合對於保留遊戲進度和資料至關重要。
-
為EBSCSI驅動程式建立儲存體類別
: kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/examples/kubernetes/dynamic-provisioning/manifests/storageclass.yaml
-
建立持久性磁碟區宣告 (PVC) 來請求遊戲資料的儲存。建立名為 的檔案,
ebs-pvc.yaml
並將下列內容新增至其中:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: game-data-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ebs-sc
將 PVC套用至叢集:
kubectl apply -f ebs-pvc.yaml
您應該會看到下列回應輸出:
persistentvolumeclaim/game-data-pvc created
現在,您需要更新 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
套用更新的部署:
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
後續步驟
下列複雜主題可協助您擴展叢集的功能:
建立叢集的IAM主體是唯一可以呼叫 的主體 Kubernetes API 具有
kubectl
或 的伺服器 AWS Management Console。如果您希望其他IAM主體能夠存取叢集,則需要新增它們。如需詳細資訊,請參閱 授與IAM使用者和角色對 Kubernetes 的存取權 APIs 和 所需的許可。部署叢集以供生產使用之前,建議您先熟悉叢集和節點的所有設定。建立叢集時,必須進行某些設定 (例如啟用 Amazon EC2節點的SSH存取)。
若要提高叢集的安全性,請將 Amazon VPC Container Networking Interface 外掛程式設定為使用服務帳戶 IAM的角色。
若要探索建立不同類型叢集的方法: