部署到 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 APIkind
,指示此物件的型別- 一些
metadata
,用於將名稱應用於您的物件 spec
,指定物件的全部引數和配置。
部署和檢查您的應用程式
在終端中,導航到建立
bb.yaml
的位置,並將您的應用程式部署到 Kubernetes$ kubectl apply -f bb.yaml
您應該看到類似於以下內容的輸出,表明您的 Kubernetes 物件已成功建立
deployment.apps/bb-demo created service/bb-entrypoint created
透過列出您的部署來確保一切正常
$ 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 上接受流量。開啟瀏覽器並訪問您的 Todo 應用程式,地址為
localhost:30001
。您應該看到您的 Todo 應用程式,與您在教程的 第 2 部分 中將其作為獨立容器執行時一樣。一旦滿意,請拆除您的應用程式
$ kubectl delete -f bb.yaml
結論
至此,您已成功使用 Docker Desktop 將應用程式部署到開發機器上的功能齊全的 Kubernetes 環境中。您現在可以向您的應用程式新增其他元件,並利用 Kubernetes 的全部功能和優勢,直接在自己的機器上進行操作。
除了部署到 Kubernetes 外,您還將應用程式描述為 Kubernetes YAML 檔案。這個簡單的文字檔案包含您在執行狀態下建立應用程式所需的一切。您可以將其簽入版本控制,並與同事共享。這樣一來,您可以將您的應用程式分發到其他叢集(例如測試和生產叢集,它們可能會在開發環境之後出現)。
Kubernetes 參考
本文中使用的所有新 Kubernetes 物件的進一步文件可在以下位置獲得