協助改善此頁面
想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
快速入門:部署 Web 應用程式和儲存資料
本快速入門教學課程說明部署 2048 年遊戲範例應用程 infrastructure-as-code 式,並使用 eksctl 將其資料保存在 Amazon EKS 叢集上的步驟。eksctl
於本教學課程中
使用下列的 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 執行個體來建立受控節點群組型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)
若要設定環境變數
-
為您的 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 Bal AWS ancer 控制器 (LBC) 利用 Kubernetes 中的自訂資源定義 (CRDs) 來管理 AWS 彈性負載平衡器 ()。ELBs這些CRDs定義自訂資源 (例如負載平衡器) TargetGroupBindings,並可讓Kubernetes叢集辨識和管理這些資源。
使用頭盔
將 Amazon EKS 圖表存儲庫添加到 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
旗標,如果已經安裝、需要特定版本相容性,或在具有嚴格存取控制和自訂需求的環境中,這可能會很有用。CRDshelm 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
使用旗標呼叫的 Kubernetes 命名空間。--save-config
kubectl create namespace game-2048 --save-config
您應該會看到下列回應輸出:
namespace/game-2048 created
-
部署 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 資源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
名空間的 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),然後才能開始執行下列步驟。
開啟網頁瀏覽器,然後
ADDRESS
輸入上一個步驟以存取 Web 應用程式。例如:k8s-game2048-ingress2-eb379a0f83-378466616.
region-code
.elb.amazonaws.com
。您應該在瀏覽器中看到 2048 遊戲。玩!
步驟 5:使用 Amazon EBS CSI 驅動程式節點保留資料
現在 2048 遊戲已在您的 Amazon EKS 叢集上啟動並執行,現在是時候使用 Amazon EBS CSI 驅動程式受管附加元件安全地保存您的遊戲資料了。此附加元件已在建立過程中安裝在我們的叢集上。此整合對於保留遊戲進度和資料至關重要,即使 Kubernetes 網繭或節點已重新啟動或更換也是如此。
-
為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 EBS CSI 驅動程序保留數據。這可確保即使在網繭或節點故障的情況下,您的遊戲進度和資料也是安全的。如果您喜歡本教程,請通過提供反饋來告訴我們,以便我們能夠為您提供更多特定於使用案例的快速入門教程,例如這個教程。
步驟 6:刪除您的叢集和節點
在完成為本教學建立的叢集和節點後,您應該使用以下命令刪除叢集和節點來完成清理。如果您想在清理之前對此叢集執行更多操作,請參閱後續步驟。
eksctl delete cluster -f ./cluster-config.yaml
完成後,您應該看到以下響應輸出:
2024-07-05 17:26:44 [✔] all cluster resources were deleted
後續步驟
下列文件主題可協助您擴充叢集的功能:
建立叢集的IAM主體是唯一可以使用
kubectl
或呼叫KubernetesAPI伺服器的主體 AWS Management Console。如果您希望其他IAM主體能夠存取您的叢集,則需要新增它們。如需詳細資訊,請參閱 授與IAM使用者和角色對 Kubernetes 的存取權 APIs 和 所需的許可。部署叢集以供生產使用之前,建議您先熟悉叢集和節點的所有設定。建立叢集時,必須進行某些設定 (例如啟用 Amazon EC2 節點的SSH存取權)。
若要提高叢集的安全性,請設定 Amazon VPC 容器網路介面外掛程式以使用服務帳戶的IAM角色。
探索建立不同叢集類型的方法: