部署到 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`,指定物件的所有參數和配置。
部署和檢查您的應用程式
在終端機中,瀏覽到您建立 `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
服務,它在 TCP 的 30001 埠接收流量。開啟瀏覽器並在
localhost:30001
訪問您的 Todo 應用程式。您應該會看到您的 Todo 應用程式,與您在教學的第二部分中以獨立容器運行它時相同。確認無誤後,請卸載您的應用程式。
$ kubectl delete -f bb.yaml
結論
至此,您已成功使用 Docker Desktop 將您的應用程式部署到開發機器上功能齊全的 Kubernetes 環境。您現在可以將其他組件添加到您的應用程式中,並在您自己的機器上利用 Kubernetes 的所有功能和強大功能。
除了部署到 Kubernetes 之外,您還將您的應用程式描述為 Kubernetes YAML 檔案。這個簡單的文字檔包含了您在運行狀態下創建應用程式所需的一切。您可以將其簽入版本控制並與您的同事共享。這讓您可以將您的應用程式分發到其他叢集(例如可能在您的開發環境之後的測試和生產叢集)。
Kubernetes 參考資料
本文中使用的所有新的 Kubernetes 物件的更多說明文件可在此處找到。