練習 - 將微服務容器部署到 Kubernetes

已完成

Kubernetes 會為您執行容器。 您會描述您希望 Kubernetes 透過 YAML 檔案執行的動作。 此練習會逐步引導您建立檔案,以便您可以在 Kubernetes 上部署和執行 後端 服務。

這很重要

在繼續之前,您必須確定您已安裝 Kubernetes 實作。 我們將使用在程式代碼空間中執行的 k3d 實作。 我們將安裝此實作來啟動實驗室。

安裝 Kubernetes 工具和實作

我們需要安裝 kubectl 工具和 k3d Kubernetes 實作:

  1. 在 codespace 中,切換至 [終端機 ] 索引卷標,然後執行下列命令以安裝必要條件:

    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    
  2. 接下來,若要下載 Kubernetes 套件存放庫的簽署金鑰,請執行下列命令:

    sudo mkdir /etc/apt/keyrings
    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    

    如果您收到目錄已存在的錯誤,請個別執行 curl 命令。

  3. 將 Kubernetes 存放庫新增至 您的 apt 組態:

    echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
    
  4. 現在,您可以安裝 kubectl 工具:

    sudo apt-get update
    sudo apt-get install -y kubectl
    
  5. 最後,安裝 Kubernetes 的 k3d 實作並建立叢集:

    curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
    k3d cluster create devcluster --config k3d.yml
    

建立後端服務的部署檔案

您可以使用 YAML 檔案,在 Kubernetes 中建立管理容器部署的檔案。 讓我們建立檔案來部署後端服務。

  1. 在名為 backend-deploy.ymlcodespace 的 donet-kubernetes 資料夾中建立新檔案。

  2. 將下列文字複製到檔案中,然後儲存它。

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
        name: productsbackend
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: productsbackend
        spec:
          containers:
          - name: productsbackend
            image: [YOUR DOCKER USER NAME]/productservice:latest
            ports:
            - containerPort: 80
            env:
            - name: ASPNETCORE_URLS
              value: http://*:80
      selector:
        matchLabels:
          app: productsbackend
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: productsbackend
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 80
        nodePort: 32001
      selector:
        app: productsbackend
    
  3. 使用你實際的 Docker 使用者名稱替換佔位符 [YOUR DOCKER USER NAME]

此檔案會執行一些動作。

第一個部分會定義要部署到 Kubernetes 之容器的部署規格。 它指定一個副本、容器映像的位置、指定在容器上開啟哪些端口,並設置一些環境變數。 第一個部分也會定義可用來參考容器和規格的標籤和名稱。

第二個部分接著會定義容器以 Kubernetes NodePort 服務的形式執行。 針對本課程模組,您不需要瞭解 NodePorts 的所有細節。 不過,您應該知道這種類型的服務會公開外部IP位址,讓您可以從叢集外部測試服務。

部署和執行後端微服務

接下來,讓我們部署並執行微服務。

  1. 在 [ 終端機] 索引標籤中,執行下列命令:

    kubectl apply -f backend-deploy.yml
    

    此命令會告知 Kubernetes 執行我們建立的檔案。 它會從 Docker Hub 下載映像並建立容器。

  2. kubectl apply命令會快速傳回。 但是容器建立可能需要一些時間。 若要檢視進度,請使用下列程序代碼。

    kubectl get pods
    

    在產生的輸出中,您會看到一行包含 productsbackend,緊接著是在 NAME 欄下方的一串隨機字元。 當一切就緒時,READY 欄下會有 1/1STATUS 欄下會顯示 執行

  3. 若要測試服務,請切換至 索引標籤,靠近 後端 本機位址,選取地球圖示。 瀏覽器會在該地址開啟新的索引標籤。

  4. 若要查詢某些產品,請使用 /api/product 附加位址,然後按 Enter。 您應該會看到 JSON 格式列出的一些產品資訊。

    [
        {
            "id": 1,
            "name": "Solar Powered Flashlight",
            "description": "A fantastic product for outdoor enthusiasts",
            "price": 19.99,
            "imageUrl": "product1.png"
        },
        {
            "id": 2,
            "name": "Hiking Poles",
            "description": "Ideal for camping and hiking trips",
            "price": 24.99,
            "imageUrl": "product2.png"
        },
        {
            "id": 3,
            "name": "Outdoor Rain Jacket",
            "description": "This product will keep you warm and dry in all weathers",
            "price": 49.99,
            "imageUrl": "product3.png"
        },
        ...
    

建立部署檔案並執行前端服務

就像後端服務一樣,我們也需要前端的部署檔案。

  1. 名為 frontend-deploy.yml 的 donet-kubernetes 資料夾中建立新檔案

  2. 將下列程式碼貼到檔案中:

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: storefrontend
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: storefrontend
        spec:
          containers:
          - name: storefrontend
            image: [YOUR DOCKER USER NAME]/storeimage:latest
            ports:
            - containerPort: 80
            env:
            - name: ASPNETCORE_URLS
              value: http://*:80
            - name: ProductEndpoint
              value: http://productsbackend
      selector:
        matchLabels:
          app: storefrontend
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: storefrontend
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 80
        nodePort: 32000
      selector:
        app: storefrontend
    
  3. 使用你實際的 Docker 使用者名稱替換佔位符 [YOUR DOCKER USERNAME]

    請注意,此檔案類似於我們為後端微服務建立的檔案。 有兩個差異:

    • 我們會指定一個不同的容器,以在部署中的 spec.template.spec.containers.image 值下運行。
    • 區段下 spec.template.spec.containers.env 有新的環境變數。 前端商店應用程式中的程式碼會呼叫後端,但因為我們未指定完整合格的域名(FQDN),所以我們不知道後端微服務的IP位址。我們會使用在metadata.name節點底下Deployment中指定的名稱。 Kubernetes 會負責其餘部分。
  4. 使用下列命令將容器部署至 Kubernetes:

    kubectl apply -f frontend-deploy.yml
    

    同樣地,您可以使用 kubectl get pods 來查看部署的狀態。 只要 storefrontend 資料列在 [狀態] 資料行下顯示正在執行,即表示一切都已準備就緒。

  5. 若要測試前端服務,請切換至 [連接埠] 索引標籤,然後到 [前端] 連接埠的本機位址右側,選取地球圖示。 瀏覽器會顯示首頁。

  6. 選取產品。 目錄會顯示 Contoso 的商品。

    eSHopLite 產品頁面的螢幕快照。

在此練習中,您已建立一個部署檔案,其描述您希望容器在 Kubernetes 中執行的方式。 然後,Kubernetes 會從 Docker Hub 下載映射並啟動容器。