在 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 頂端將匯入 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。 

一旦載入,您應該就會看到此頁面:

gsg_build_eks_2

您已使用 CDK 成功地將應用程式部署至 Kubernetes 叢集,以佈建叢集和部署 CDK8s 所產生的資訊清單檔案。

結論

在本單元中,您已了解如何使用 CDK8s 所產生的 Kubernetes 組態檔,並使用 CDK 將它們部署至您的 EKS 叢集。在下一個單元中,您將清理本指南中建立的所有資源。

下一步:清理資源

讓我們知道我們表現如何。

感謝您的意見回饋
我們很高興此頁面對您有所幫助。您願意分享更多詳細資訊以協助我們繼續改進嗎?
關閉
感謝您的意見回饋
很抱歉此頁面沒有幫助到您。您願意分享更多詳細資訊以協助我們繼續改進嗎?
關閉