在 Amazon EKS 上部署容器 Web 應用程式

入門指南

單元 3:建立您的部署

在本單元中,您將建立一個部署並啟動您的應用程式

簡介

在本單元中,您將使用 AWS CDK8s,為您的應用程式建立服務和部署組態。在 AWS CDK8s 中,Kubernetes API 物件是以建構函數表示。我們可以使用這些建構函數來定義服務和部署。CDK8s 所產生的輸出為 Kubernetes 組態檔。您將使用本單元的輸出,並將其與來自前一個單元的 AWS CDK 程式碼整合在一起,來部署您的應用程式。

您將學到的內容

  • 使用 CDK8s 建構函數來定義 Kubernetes API 物件
  • 使用 CDK8s 定義服務和部署
  • 使用 CDK8s 產生 Kubernetes 組態

 完成時間

5 分鐘

 單元先決條件

  • 有管理員等級存取權限的 AWS 帳戶**
  • 建議的瀏覽器:最新版的 Chrome 或 Firefox

[**]過去 24 小時內建立的帳戶可能尚未有權存取本教學課程所需的服務。

實作

定義應用程式

從這個步驟中,我們將要修改 main.py 來定義 CDK8s 應用程式。在初始化之後,它看起來應像這樣:

#!/usr/bin/env python
from constructs import Construct
from cdk8s import App, Chart

class MyChart(Chart):
    def __init__(self, scope: Construct, id: str):
        super().__init__(scope, id)

        # define resources here

app = App()
MyChart(app, "cdk8s")

app.synth()

若要部署您的應用程式,有 4 個要遵循的步驟:

  1. 匯入 k8s 程式庫,為 Yaml 組態檔產生字串。
  2. 定義標籤集以套用至要在服務查閱中使用的 Pod。
  3. 定義部署 - 這將啟動叢集上的容器,但不會將其設定為從負載平衡器接收流量。
  4. 定義服務以將部署公開給負載平衡器。

標籤是連接至 Kubernetes 物件的金鑰/值組。您會將 Pod 標示為部署的一部分以執行它們,而且 ReplicationController 將使用相同的標籤,以在建立服務將 Pod 公開給負載平衡器時選取這些 Pod。您將使用標籤 = {"app": "cdk8s"} 程式碼來執行此動作。

然後,將在部署中使用這些標籤。Kubernetes 中的部署是部署單位上的明確宣告和所需狀態。本指南將使用 Amazon ECR Public Gallery 上託管的範例應用程式。我們將要提取的容器映像 URL 為 public.ecr.aws/s9u7u6x1/sample app 001:no-db

若要建立部署和服務,請更新 main.py,方法是在其他匯入下的檔案頂端新增 from imports import k8s,然後在 # 底下貼入下列程式碼,以在這裡定義資源。您的檔案現在看起來應像這樣:

#!/usr/bin/env python
from constructs import Construct
from cdk8s import App, Chart
from imports import k8s

class MyChart(Chart):
    def __init__(self, scope: Construct, id: str):
        super().__init__(scope, f"{id}-deployment")

        # define resources here

        # Label used for tagging pods to link in the service
        label = {"app": "cdk8s"}

        # Creates the deployment to spin up pods with your container
        k8s.KubeDeployment(self, 'deployment',
            spec=k8s.DeploymentSpec(
                replicas=2,
                selector=k8s.LabelSelector(match_labels=label),
                template=k8s.PodTemplateSpec(
                metadata=k8s.ObjectMeta(labels=label),
                spec=k8s.PodSpec(containers=[
                    k8s.Container(
                    name='cdk8s',
                    image='public.ecr.aws/s9u7u6x1/sample_app_001:no-db',
                    ports=[k8s.ContainerPort(container_port=80)])]))))

        # Creates the service to expose the pods to traffic from the loadbalancer
        super().__init__(scope, f"{id}-service")
        k8s.KubeService(self, 'service',
            spec=k8s.ServiceSpec(
            type='LoadBalancer',
            ports=[k8s.ServicePort(port=80, target_port=k8s.IntOrString.from_number(80))],
            selector=label))

app = App()
MyChart(app, "cdk8s")

app.synth()

您將注意到,在此方法中會呼叫兩次 super() - 它會使用指定的名稱建立 Yaml 檔案,並附加在該點之後產生的任何組態,方法是呼叫此類別繼承自其中的上層類別建構函數。這將為服務組態產生一個檔案,並為部署產生第二個檔案。 

您現在可以執行 cdk8s synth 來產生組態檔。輸出看起來將像這樣:

cdk8s synth

dist/cdk8s-deployment.k8s.yaml
dist/cdk8s-service.k8s.yaml

結論

在本單元中,您已了解如何使用 CDK8s 產生 Kubernetes 組態檔。您的應用程式將分割成一個部署和一個服務,每個都有自己的組態檔。

您現在準備好更新 CDK 專案以參考這些檔案,並使用 kubectl 將它們部署至 EKS 叢集。

下一步:使用 CDK 進行部署

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

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