部署到 Kubernetes

先決條件

  • 請依照 Get Docker 中的說明下載並安裝 Docker Desktop。
  • 請完成 第 2 部分 中關於應用程式容器化的練習。
  • 請確保 Docker Desktop 中已啟用 Kubernetes:如果 Kubernetes 未執行,請遵循 編排 (Orchestration) 中的說明完成設定。

簡介

現在您已經證明應用程式的各個元件能以獨立容器執行,是時候安排它們由 Kubernetes 這類的編排器進行管理了。Kubernetes 提供了許多工具來擴展、聯網、保護並維護您的容器化應用程式,這些功能遠超容器本身的能力。

為了驗證您的容器化應用程式能在 Kubernetes 上良好運作,您將直接在開發機器上使用 Docker Desktop 內建的 Kubernetes 環境來部署應用程式,之後再將其交付到生產環境中的完整 Kubernetes 叢集執行。Docker Desktop 所建立的 Kubernetes 環境是「全功能」的,這意味著它具備您的應用程式在實際叢集中所能享有的所有 Kubernetes 功能,而且都能在您的開發機器上方便地存取。

使用 Kubernetes YAML 描述應用程式

Kubernetes 中的所有容器都以 Pod(Pod 是共享某些資源且位於同一位置的容器組)的形式進行排程。此外,在實際的應用程式中,您幾乎不會建立個別的 Pod。相反地,您的大多數工作負載都是以 Deployment(由 Kubernetes 自動維護的可擴展 Pod 組)進行排程的。最後,所有的 Kubernetes 物件都可以且應該在稱為 Kubernetes YAML 檔案的清單中描述。這些 YAML 檔案描述了您的 Kubernetes 應用程式的所有元件和配置,並可用於在任何 Kubernetes 環境中建立和銷毀您的應用程式。

您已經在本教學的「編排概述」部分編寫了一個基本的 Kubernetes YAML 檔案。現在,您可以編寫一個稍微複雜一點的 YAML 檔案來執行和管理您的 Todo 應用程式(即在快速入門教學 第 2 部分 中建立的 getting-started 容器映像檔)。請將以下內容放入名為 bb.yaml 的檔案中:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bb-demo
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      bb: web
  template:
    metadata:
      labels:
        bb: web
    spec:
      containers:
        - name: bb-site
          image: getting-started
          imagePullPolicy: Never
---
apiVersion: v1
kind: Service
metadata:
  name: bb-entrypoint
  namespace: default
spec:
  type: NodePort
  selector:
    bb: web
  ports:
    - port: 3000
      targetPort: 3000
      nodePort: 30001

在這個 Kubernetes YAML 檔案中,有兩個由 --- 分隔的物件:

  • 一個 Deployment,描述了一個可擴展的相同 Pod 組。在此例中,您將只獲得一個 replica(或您的 Pod 的副本),而該 Pod(在 template: 鍵下描述)僅包含一個基於本教學上一節中 getting-started 映像檔的容器。
  • 一個 NodePort 服務,它會將來自您主機 30001 連接埠的流量路由到它所導向的 Pod 內部的 3000 連接埠,讓您能從網路上存取您的 Todo 應用程式。

此外,請注意,雖然 Kubernetes YAML 起初看起來又長又複雜,但它幾乎總是遵循相同的模式:

  • apiVersion:指示解析此物件的 Kubernetes API。
  • kind:指示這是哪種類型的物件。
  • metadata:將物件名稱等資訊應用於您的物件。
  • spec:指定物件的所有參數和配置。

部署並檢查您的應用程式

  1. 在終端機中,導航至您建立 bb.yaml 的位置,並將您的應用程式部署到 Kubernetes:

    $ kubectl apply -f bb.yaml
    

    您應該會看到如下所示的輸出,表示您的 Kubernetes 物件已成功建立:

    deployment.apps/bb-demo created
    service/bb-entrypoint created
  2. 透過列出您的部署來確保一切運作正常:

    $ kubectl get deployments
    

    如果一切順利,您的部署應該會按如下方式列出:

    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    bb-demo   1/1     1            1           40s

    這表示您在 YAML 中要求的 Pod 已全數啟動並執行。對您的服務執行相同的檢查:

    $ kubectl get services
    
    NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    bb-entrypoint   NodePort    10.106.145.116   <none>        3000:30001/TCP   53s
    kubernetes      ClusterIP   10.96.0.1        <none>        443/TCP          138d
    

    除了預設的 kubernetes 服務外,我們還看到了我們的 bb-entrypoint 服務,它正在 30001/TCP 連接埠上接收流量。

  3. 開啟瀏覽器並造訪 localhost:30001 上的 Todo 應用程式。您應該會看到您的 Todo 應用程式,這與您在教學 第 2 部分 中將其作為獨立容器執行時的情況相同。

  4. 滿意後,請拆除您的應用程式:

    $ kubectl delete -f bb.yaml
    

結論

此時,您已成功使用 Docker Desktop 將應用程式部署到開發機器上功能齊全的 Kubernetes 環境中。您現在可以在自己的機器上,為您的應用程式新增其他元件,並利用 Kubernetes 的所有功能與效能。

除了部署至 Kubernetes 之外,您也將應用程式描述為 Kubernetes YAML 檔案。這個簡單的文字檔案包含建立應用程式執行狀態所需的一切。您可以將其簽入版本控制系統並與同事共享。這讓您能夠將應用程式分發到其他叢集(例如開發環境之後可能需要的測試和生產叢集)。

Kubernetes 參考資料

本文中使用到的所有新 Kubernetes 物件的進一步文件可在此處取得:

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.