在 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。
一旦載入,您應該就會看到此頁面:

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