在 Amazon EKS 上部署容器 Web 应用程序

入门指南

模块 4:使用 AWS CDK 部署

在此模块中,您将使用 CDK 创建一个部署并启动您的应用程序

简介

在本模块中,您将使用 CDK8s 在上一个模块中生成的配置文件将应用程序部署到新创建的 EKS 集群中。这些配置文件将被 CDK 用于部署应用程序。

您将学到的内容

  • 将 AWS CDK8S 集成到 AWS CDK 中
  • 使用 AWS CDK 部署
  • 使用 Kubectl 操作集群

 完成时间

10 分钟

 模块先决条件

  • 具有管理员级访问权限的 AWS 账户**
  • 推荐的浏览器:最新版 Chrome 或 Firefox

[**] 过去 24 小时内创建的账户可能尚不具有访问此教程所需服务的权限。

实施

定义应用程序

Kubernetes 配置文件以 Yaml 格式存储,因此,您需要导入 yaml 库才能解析它们。在 eks/cluster/cluster/cluster_stack 顶部的其他导入下添加 import yaml。 

然后,您将添加 2 个代码块,以将 2 个 Yaml 文件读取为变量,从而传递到集群中:

# Read the deployment config
with open("../cdk8s/dist/cdk8s-deployment.k8s.yaml", 'r') as stream:
      deployment_yaml = yaml.load(stream, Loader=yaml.FullLoader)

# Read the service config
with open("../cdk8s/dist/cdk8s-service.k8s.yaml", 'r') as stream:
      service_yaml = yaml.load(stream, Loader=yaml.FullLoader)

再然后,您使用 add_manifest 方法将此 Yaml 传递到 EKS 集群中,每个文件一次:

eks_cluster.add_manifest(f"{construct_id}-app-deployment", yaml_app_deployment)

eks_cluster.add_manifest(f"{construct_id}-app-service", yaml_app_service)

您 cluster_stack.py 文件现在应如下所示:

from aws_cdk import core as cdk
from aws_cdk import aws_iam as iam
from aws_cdk import aws_eks as eks
from aws_cdk import aws_ec2 as ec2
import yaml

class ClusterStack(cdk.Stack):

    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # Look up the default VPC
        vpc = ec2.Vpc.from_lookup(self, id="VPC", is_default=True)

        # Create master role for EKS Cluster
        iam_role = iam.Role(self, id=f"{construct_id}-iam",
                            role_name=f"{construct_id}-iam", assumed_by=iam.AccountRootPrincipal())

        # Creating Cluster with EKS
        eks_cluster = eks.Cluster(
            self, id=f"{construct_id}-cluster", 
            cluster_name=f"{construct_id}-cluster", 
            vpc=vpc, 
            vpc_subnets=vpc.public_subnets, 
            masters_role=iam_role, 
            default_capacity_instance=ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO), 
            version=eks.KubernetesVersion.V1_20,
        )

# Read the deployment config
with open("../cdk8s/dist/cdk8s-deployment.k8s.yaml", 'r') as stream:
      deployment_yaml = yaml.load(stream, Loader=yaml.FullLoader)

# Read the service config
with open("../cdk8s/dist/cdk8s-service.k8s.yaml", 'r') as stream:
      service_yaml = yaml.load(stream, Loader=yaml.FullLoader)

eks_cluster.add_manifest(f"{construct_id}-app-deployment", deployment_yaml)

eks_cluster.add_manifest(f"{construct_id}-app-service", service_yaml)

要部署应用程序,您需要切换回 eks/cluster 目录。如果您目前在 eks/cdk8s 目录中,请运行以下内容(否则更改为 eks/cluster):

cd ../cluster
cdk deploy

当 AWS CDK 部署好应用程序堆栈后,我们即可以使用 kubectl 检查 Pod 状态。使用 kubectl 之前,确保您在通过 kubectl config current-context 使用正确的上下文。

要查看 Pod 中的应用程序的状态,我们可以使用 kubectl get all 命令,并将看到以下结果:

$ kubectl get all
NAME                                             READY   STATUS    RESTARTS   AGE
pod/cdk8s-deployment-c8087a1b-659fb88f56-6qj52   1/1     Running   0          3m22s
pod/cdk8s-deployment-c8087a1b-659fb88f56-s82ft   1/1     Running   0          3m22s

NAME                             TYPE           CLUSTER-IP      EXTERNAL-IP                                                                    PORT(S)        AGE
service/cdk8s-service-c844e1e1   LoadBalancer   xxx.xxx.xxx.xxx   xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com   80:30132/TCP   3m22s
service/kubernetes               ClusterIP      xxx.xxx.xxx.xxx      <none>                                                                         443/TCP        4h17m

NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cdk8s-deployment-c8087a1b   2/2     2            2           3m22s

NAME                                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/cdk8s-deployment-c8087a1b-659fb88f56   2         2         2       3m22s

要测试应用程序,您可以从上面的 LoadBalancer 值中复制 EXTERNAL-IP,并在您的浏览器中打开它 - 它类似于 xxxxxxxxxxxxxx.eu-west-1.elb.amazonaws.com。 

加载后,您应看到此页面:

您已使用 CDK 成功地将应用程序部署到 Kubernetes 集群中,以预置集群并部署 CDK8s 生成的清单文件。

结论

在本指南中,您学习了如何使用 CDK8s 生成的 Kubernetes 配置文件以及如何使用 CDK 将它们部署到 EKS 集群中。在下一个模块中,您将清理本指南中创建的所有资源。

下一模块:清理资源

请就我们的表现提供反馈。