快速入门:部署 Web 应用程序并存储数据 - Amazon EKS

帮助改进此页面

想为本用户指南做出贡献? 选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

快速入门:部署 Web 应用程序并存储数据

部署游戏应用程序并将其数据持久保存在 Amazon EKS 上

本快速入门教程演示了使用 eksctl 在 Amazon EKS 自动模式集群上部署 2048 游戏示例应用程序,并将其数据持久保存的步骤。Amazon EKS 自动模式可自动执行集群块存储、联网、负载均衡和计算自动扩缩等例行任务。

在此过程中,我们将演示集群设置过程。Amazon EKS 自动模式将自动执行使用 EC2 托管式实例创建节点、创建应用程序负载均衡器和创建 EBS 卷等任务。

整体而言,我们将部署一个示例工作负载,其中包含与 AWS 服务完全集成所需的自定义注释。

在本教程中:

使用之后的 eksctl 集群模板,您将构建一个启用了 EKS 自动模式的集群,以实现自动节点预置。

VPC 配置:使用下面的 eksctl 集群模板时,eksctl 会自动为该集群创建一个 IPv4 虚拟私有云(VPC)。默认情况下,除创建公有和私有端点外,eksctl 还会配置一个满足所有联网要求的 VPC。

实例管理:EKS 自动模式会根据 Kubernetes 应用程序的需求动态添加或移除 EKS 集群中的节点。

数据持久性:使用 EKS 自动模式的块存储功能来确保应用程序数据的持久性,即使在涉及容器组重启或故障等场景时也不例外。

外部应用程序访问:使用 EKS 自动模式的负载均衡功能来动态预置应用程序负载均衡器(ALB)。

先决条件

在开始之前,请确保您已满足以下有关使用 Amazon EKS 的先决条件设置:

  • 设置 AWS CLI 并配置好凭证

  • 安装 eksctl

  • 安装 kubectl

有关更多信息,请参阅 进行设置以使用 Amazon EKS

配置集群

在本节中,您将使用 EKS 自动模式创建一个集群,以进行动态节点预置。

创建一个 cluster-config.yaml 文件,并将以下内容粘贴到该文件中。将 region-code 替换为有效的区域,例如 us-east-1

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: web-quickstart region: <region-code> autoModeConfig: enabled: true

现在,我们可以随时创建集群。

创建 Amazon EKS 集群:

eksctl create cluster -f cluster-config.yaml
重要

如果您不使用 eksctl 创建集群,则需要手动标记 VPC 子网。

创建 IngressClass

为 EKS 自动模式创建一个 Kubernetes 。IngressClassIngressClass 定义 EKS 自动模式将如何处理 Ingress 资源。此步骤会配置 EKS 自动模式的负载均衡功能。为应用程序创建 Ingress 资源时,EKS 自动模式使用此 IngressClass 自动预置和管理负载均衡器,从而将您的 Kubernetes 应用程序与 AWS 负载均衡服务集成。

将以下 yaml 文件另存为 ingressclass.yaml

apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb annotations: ingressclass.kubernetes.io/is-default-class: "true" spec: controller: eks.amazonaws.com/alb

将 IngressClass 应用到集群:

kubectl apply -f ingressclass.yaml

部署 2048 游戏示例应用程序

在这一部分中,我们将演示在集群中部署流行的“2048 游戏”这款示例应用程序的步骤。提供的清单包括自定义的应用程序负载均衡器(ALB)注释。这些注释与 EKS 集成并指示后者将传入的 HTTP 流量作为“面向互联网”的流量处理,并使用目标类型“ip”将其路由到“game-2048”命名空间中的相应服务。

  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 的服务,用于在端口 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
  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

    在开始以下步骤之前,您需要等待几分钟,以便应用程序负载均衡器(ALB)完成预置。

  4. 打开 Web 浏览器,并输入上一步中的 ADDRESS 以访问该 Web 应用程序。例如:

    k8s-game2048-ingress2-eb379a0f83-378466616.region-code.elb.amazonaws.com

    您应该会在浏览器中看到 2048 游戏。开始玩吧!

    玩 2048 游戏。

使用 Amazon EKS 自动模式持久保存数据

现在 2048 游戏已在 Amazon EKS 集群上启动并运行,可以使用 Amazon EKS 自动模式的块存储功能来确保安全地持久保存游戏数据。

  1. 创建一个名为 storage-class.yaml 的文件:

    apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"
  2. 应用 StorageClass:

    kubectl apply -f storage-class.yaml
  3. 创建持久卷注册声明(PVC)以请求存储游戏数据。创建一个名为 ebs-pvc.yaml 的文件,并将以下内容添加到该文件:

    apiVersion: v1 kind: PersistentVolumeClaim metadata: name: game-data-pvc namespace: game-2048 spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: auto-ebs-sc
  4. 将该 PVC 应用到集群:

    kubectl apply -f ebs-pvc.yaml

    您应看到以下响应输出:

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

    kubectl apply -f ebs-deployment.yaml

    您应看到以下响应输出:

    deployment.apps/deployment-2048 configured

完成这些步骤后,集群上的 2048 游戏现已设置为使用 Amazon EKS 自动模式的块存储功能持久保存数据。这样可以确保即使在容器组或节点出现故障,游戏进度和数据也同样安全。

如果您喜欢本教程,请给我们反馈,以便我们可以为您提供更多与此类似的应用场景专用快速入门教程。

删除集群和节点

在使用完成针对本教程而创建的集群后,应使用下面的命令删除集群,从而将其清除。如果要在清除该集群前对其执行更多操作,请参阅后续步骤。

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

删除集群后,EKS 将自动清理其预置的所有节点。