部署到 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。相反,您的大部分工作負載都作為部署進行排程,部署是可擴充套件的 pod 組,由 Kubernetes 自動維護。最後,所有 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 物件的進一步文件可在此處找到