使用 kubectl 建立部署

目標

  • 瞭解應用程式部署。
  • 使用 kubectl 在 Kubernetes 上部署您的第一個應用。

Kubernetes 部署

一旦您有一個正在執行的 Kubernetes 叢集,您就可以在其上部署容器化應用程式。為此,您需要建立一個 Kubernetes Deployment。Deployment 指示 Kubernetes 如何建立和更新應用程式例項。建立 Deployment 後,Kubernetes 控制平面會將該 Deployment 中包含的應用程式例項排程到叢集中的各個節點上執行。

應用程式例項建立後,Kubernetes Deployment 控制器會持續監控這些例項。如果託管例項的節點發生故障或被刪除,Deployment 控制器會用叢集中另一個節點上的例項替換該例項。這提供了一種自愈機制,以應對機器故障或維護。

在沒有編排工具的時代,通常使用安裝指令碼來啟動應用程式,但它們無法從機器故障中恢復。透過建立應用程式例項並使其在不同節點上持續執行,Kubernetes Deployment 提供了一種根本不同的應用程式管理方法。

在 Kubernetes 上部署您的第一個應用

您可以使用 Kubernetes 命令列介面 kubectl 來建立和管理 Deployment。`kubectl` 使用 Kubernetes API 與叢集互動。在本模組中,您將學習建立 Deployment 以在 Kubernetes 叢集上執行應用程式最常用的 `kubectl` 命令。

建立 Deployment 時,您需要指定應用程式的容器映象以及要執行的副本數量。您可以稍後透過更新 Deployment 來更改這些資訊;訓練營的模組 5模組 6 將討論如何擴充套件和更新您的 Deployment。

對於您的第一個 Deployment,您將使用一個打包在 Docker 容器中的 hello-node 應用程式,該應用程式使用 NGINX 回顯所有請求。(如果您尚未嘗試建立 hello-node 應用程式並使用容器進行部署,您可以先按照 Hello Minikube 教程中的說明進行操作。)

您還需要安裝 kubectl。如果需要安裝,請訪問安裝工具

現在您已經瞭解了 Deployment 是什麼,讓我們來部署我們的第一個應用程式吧!

kubectl 基礎

kubectl 命令的常見格式是:`kubectl action resource`。

這將對指定的*資源*(如 `node` 或 `deployment`)執行指定的*操作*(如 `create`、`describe` 或 `delete`)。您可以在子命令後使用 `--help` 獲取有關可能引數的更多資訊(例如:`kubectl get nodes --help`)。

透過執行 `kubectl version` 命令,檢查 kubectl 是否配置為與您的叢集通訊。

檢查 kubectl 是否已安裝,並且您可以看到客戶端和伺服器版本。

要檢視叢集中的節點,請執行 `kubectl get nodes` 命令。

您將看到可用的節點。稍後,Kubernetes 將根據節點的可用資源選擇部署應用程式的位置。

部署應用程式

讓我們使用 `kubectl create deployment` 命令在 Kubernetes 上部署我們的第一個應用程式。我們需要提供部署名稱和應用程式映象位置(對於託管在 Docker Hub 之外的映象,請包含完整的倉庫 URL)。

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

太棒了!您剛剛透過建立 Deployment 部署了您的第一個應用程式。這為您做了幾件事:

  • 搜尋適合執行應用程式例項的節點(我們只有 1 個可用節點)
  • 排程應用程式在該節點上執行
  • 配置叢集在需要時重新排程例項到新節點

要列出您的 Deployment,請使用 `kubectl get deployments` 命令。

kubectl get deployments

我們看到有 1 個 Deployment 正在執行您的應用程式的單個例項。該例項正在您的節點上的容器中執行。

檢視應用

在 Kubernetes 中執行的 Pod 執行在一個私有、隔離的網路中。預設情況下,它們在同一個 Kubernetes 叢集中的其他 Pod 和服務中是可見的,但在該網路之外則不可見。當我們使用 `kubectl` 時,我們透過 API 端點與我們的應用程式進行互動。

我們將在稍後的模組 4 中介紹如何將應用程式暴露到 Kubernetes 叢集之外的其他選項。此外,作為基本教程,我們在此不詳細解釋 `Pod` 是什麼,這將在後續主題中介紹。

`kubectl proxy` 命令可以建立一個代理,將通訊轉發到叢集範圍的私有網路。代理可以透過按 Control-C 終止,並且在執行時不會顯示任何輸出。

您需要開啟第二個終端視窗來執行代理。

kubectl proxy

我們現在在我們的主機(終端)和 Kubernetes 叢集之間建立了連線。代理允許從這些終端直接訪問 API。

您可以透過代理端點檢視所有這些 API。例如,我們可以使用 `curl` 命令直接透過 API 查詢版本。

curl https://:8001/version

API 伺服器將根據 Pod 名稱為每個 Pod 自動建立一個端點,該端點也可透過代理訪問。

首先我們需要獲取 Pod 名稱,並將其儲存在環境變數 `POD_NAME` 中。

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME

您可以透過執行以下命令,透過代理 API 訪問 Pod:

curl https://:8001/api/v1/namespaces/default/pods/$POD_NAME:8080/proxy/

為了使新的 Deployment 無需使用代理即可訪問,需要一個 Service,這將在模組 4 中解釋。

下一步

上次修改時間:2025 年 6 月 25 日太平洋標準時間下午 2:14:在 deploy-intro.md 中新增缺失的右括號 (#51302) (9a7ec41c24)