帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
快速入门:部署 Web 应用程序并存储数据
本快速入门教程演示了使用 eksctl
在本教程中:
使用下面的 eksctl 集群模板,您将构建一个具有托管式节点组的 Amazon EKS 集群。该集群包括以下组件:
- VPC 配置
-
使用下面的 eksctl 集群模板时,eksctl 会自动为该集群创建一个 IPv4 虚拟私有云(VPC)。默认情况下,除创建公有和私有端点外,eksctl 还会配置一个满足所有联网要求的 VPC。
- 实例类型
-
使用 t3.medium 实例类型。该实例类型充分平衡了计算、内存和网络资源,非常适合 CPU 使用量中等,但偶尔会遇到峰值的应用程序。
- 身份验证
-
建立 IRSA 映射以促进 Kubernetes 容器组和 Amazon 服务之间的通信。该模板配置为设置用于身份验证和授权的 OpenID Connect (OIDC)端点。此外还会为 Amazon Load Balancer Controller(LBC)
建立一个服务帐户,后者是负责公开应用程序和管理流量的控制器。 - 数据持久性
-
集成 AmazonEBS CSI 驱动程序托管式插件来确保应用程序数据的持久性,即使在涉及容器组重启或故障的情况下也是如此。该模板配置为安装插件并建立服务账户
- 外部应用程序访问
-
设置并与 Amazon Load Balancer Controller(LBC)插件集成以公开 2048 游戏应用程序
,使用 LBC 动态预置应用程序负载均衡器(ALB)。
先决条件
第 1 步:配置集群
在这一部分中,您将使用包含两个节点的 t3.mediumeksctl
插件的信息,请参阅 eksctl
文档中的 Discovering addons
-
创建一个
cluster-config.yaml
文件,并将以下内容粘贴到该文件中。将 region-code 替换为有效的区域,例如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 集群。此过程需要几分钟时间才能完成。如果要监控状态,请访问 Amazon CloudFormation
-
创建 Amazon EKS 集群并指定 cluster-config.yaml。
eksctl create cluster -f cluster-config.yaml
注意
如果您在响应中收到
Error: checking STS access
,请确认为当前 Shell 会话使用的用户身份正确。您可能还需要指定命名的配置文件(例如--profile clusteradmin
)或获取 Amazon CLI 的新安全令牌。完成后,您应会看到以下响应输出:
2024-07-04 21:47:53 [✔] EKS cluster "web-quickstart" in "region-code" region is ready
第 3 步:使用 Amazon Load Balancer Controller(LBC)设置对应用程序的外部访问权限
集群开始运行后,下一步将是使其容器化应用程序可以从外部访问。要实现这一目标,您需要部署应用程序负载均衡器(ALB),以将集群外的流量指向我们的服务(即我们的应用程序)。创建集群时,我们为 Load Balancer Controller(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)
安装 Amazon Load Balancer Controller(LBC)
Amazon Load Balancer Controller(LBC)利用 Kubernetes 中的自定义资源定义(CRD)来管理 Amazon 弹性负载均衡器(ELB)。这些 CRD 定义了负载均衡器和 TargetGroupBindings 等自定义资源,从而使 Kubernetes 集群能够识别和管理这些资源。
使用 Helm
将 Amazon EKS 图表存储库添加到 Helm。 helm repo add eks https://aws.github.io/eks-charts
更新存储库以确保 Helm 能够感知图表的最新版本:
helm repo update eks
运行以下 Helm
命令以同时安装自定义资源定义(CRD)和 Amazon Load Balancer Controller(Amazon LBC)的主控制器。要跳过 CRD 安装,请传递 --skip-crds
标志;这在已经安装了 CRD、需要特定的版本兼容性或者在有严格访问控制和自定义需求的环境中时会非常实用。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: Amazon Load Balancer controller installed!
第 4 步:部署 2048 游戏示例应用程序
现在,负载均衡器已设置完毕,可以为集群中的容器化应用程序启用外部访问。在这一部分中,我们将演示在集群中部署流行的“2048 游戏”这款示例应用程序的步骤。提供的清单包括应用程序负载均衡器(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
的服务,用于在端口80
上公开该部署;以及一个名为ingress-2048
的入口资源,用于定义传入的 HTTP 流量的路由规则,以及面向互联网的应用程序负载均衡器(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
在开始以下步骤之前,您需要等待几分钟,以便应用程序负载均衡器(ALB)完成预置。
打开 Web 浏览器,并输入上一步中的
ADDRESS
以访问该 Web 应用程序。例如,k8s-game2048-ingress2-eb379a0f83-378466616.
region-code
.elb.amazonaws.com
。您应该会在浏览器中看到 2048 游戏。开始玩吧!
第 5 步:使用 Amazon EBS CSI 驱动程序节点持久保存数据
现在 2048 game 已在 Amazon EKS 集群上启动并运行,可以使用 Amazon EBS CSI 驱动程序托管式插件来确保安全地持久保存游戏数据。此插件是在创建过程中安装到集群上的。这种集成对于持久保存游戏进度和数据至关重要,即使重启或替换了 Kubernetes 容器组或节点也不例外。
-
为 EBS CSI 驱动程序创建一个存储类
: 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
现在,您需要更新 2,048 游戏部署才能使用此 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 EKS 上的 2048 游戏现已设置为使用 Amazon EBS CSI 驱动程序持久保存数据。这样可以确保即使在容器组或节点出现故障,游戏进度和数据也同样安全。如果您喜欢本教程,请给我们反馈,以便我们可以为您提供更多与此类似的应用场景专用快速入门教程。
第 6 步:删除集群和节点
在使用完成针对本教程而创建的集群和节点后,应使用下面的命令删除这些集群和节点,从而将它们清除。如果要在清除该集群前对其执行更多操作,请参阅“后续步骤”。
eksctl delete cluster -f ./cluster-config.yaml
完成后,您应会看到以下响应输出:
2024-07-05 17:26:44 [✔] all cluster resources were deleted
后续步骤
以下文档主题有祝您扩展集群的功能:
创建集群的 IAM 主体是唯一可以使用
kubectl
或 Amazon Web Services Management Console 调用 Kubernetes API 服务器的主体。如果您希望其他 IAM 主体拥有访问您的集群的权限,您需要添加它们。有关更多信息,请参阅向 IAM 用户和角色授予对 Kubernetes APIs 的访问权限 和所需的权限。我们建议您先熟悉集群和节点的所有设置,然后再部署集群用于生产环境。创建集群时必须进行一些设置(例如启用 SSH 访问 Amazon EC2 节点)。
为了提高集群的安全性,请配置 Amazon VPC 容器网络接口插件以将 IAM 角色用于服务账户。
要探索创建不同类型集群的方法,请参阅以下资源: