部署到 Kubernetes

先決條件

  • 獲取 Docker 中所述,下載並安裝 Docker Desktop。
  • 完成 第 2 部分 中的應用程式容器化。
  • 確保 Docker Desktop 中啟用了 Kubernetes:如果 Kubernetes 未執行,請按照 編排 中的說明完成設定。

介紹

既然您已經證明應用程式的各個元件可以作為獨立容器執行,那麼現在該安排它們由 Kubernetes 之類的編排器進行管理了。Kubernetes 提供了許多工具來擴充套件、聯網、保護和維護您的容器化應用程式,這些工具遠遠超出了容器本身的功能。

為了驗證您的容器化應用程式在 Kubernetes 上執行良好,您將在開發機器上使用 Docker Desktop 的內建 Kubernetes 環境部署應用程式,然後再將其移交給生產環境中的完整 Kubernetes 叢集執行。Docker Desktop 建立的 Kubernetes 環境是功能齊全的,這意味著它具有您的應用程式在真實叢集上享受的所有 Kubernetes 功能,可以從開發機器的便利位置訪問。

使用 Kubernetes YAML 描述應用程式

Kubernetes 中的所有容器都作為 Pod 進行排程,Pod 是共享一些資源的同地容器組。此外,在實際應用程式中,您幾乎從未建立單獨的 Pod。相反,大多數工作負載都作為部署進行排程,部署是由 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. 開啟瀏覽器並訪問您的 Todo 應用程式,地址為 localhost:30001。您應該看到您的 Todo 應用程式,與您在教程的 第 2 部分 中將其作為獨立容器執行時一樣。

  4. 一旦滿意,請拆除您的應用程式

    $ kubectl delete -f bb.yaml
    

結論

至此,您已成功使用 Docker Desktop 將應用程式部署到開發機器上的功能齊全的 Kubernetes 環境中。您現在可以向您的應用程式新增其他元件,並利用 Kubernetes 的全部功能和優勢,直接在自己的機器上進行操作。

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

Kubernetes 參考

本文中使用的所有新 Kubernetes 物件的進一步文件可在以下位置獲得