使用 kubectl 建立 Deployment

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

目標

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

Kubernetes Deployment

一旦您擁有執行中的 Kubernetes 叢集,您就可以在其上部署容器化的應用程式。若要這麼做,您可以建立 Kubernetes Deployment。Deployment 會指示 Kubernetes 如何建立和更新應用程式的執行個體。一旦您建立 Deployment,Kubernetes 控制平面會排程該 Deployment 中包含的應用程式執行個體,以在叢集中的個別節點上執行。

一旦應用程式執行個體建立完成,Kubernetes Deployment 控制器會持續監控這些執行個體。如果託管執行個體的節點關閉或遭到刪除,Deployment 控制器會將該執行個體替換為叢集中另一個節點上的執行個體。這提供了一種自我修復機制,以解決機器故障或維護問題。

在前協調編排的世界中,安裝腳本通常用於啟動應用程式,但它們不允許從機器故障中恢復。透過建立您的應用程式執行個體並使其跨節點執行,Kubernetes Deployment 提供了一種與應用程式管理截然不同的方法。

摘要

  • Deployment
  • Kubectl

Deployment 負責建立和更新應用程式的執行個體


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


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

當您建立 Deployment 時,您需要指定應用程式的容器映像檔以及您想要執行的副本數。您可以稍後透過更新 Deployment 來變更該資訊;訓練營的模組 5模組 6 討論了您如何擴展和更新 Deployment。

應用程式需要封裝成其中一種支援的容器格式,才能部署在 Kubernetes 上

對於您的第一個 Deployment,您將使用封裝在 Docker 容器中的 hello-node 應用程式,該容器使用 NGINX 來回應所有請求。(如果您尚未嘗試建立 hello-node 應用程式並使用容器部署它,您可以先依照Hello Minikube 教學課程中的指示進行操作)。

您也需要安裝 kubectl。如果您需要安裝它,請造訪安裝工具

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


kubectl 基礎知識

kubectl 指令的常見格式為:kubectl 動作 資源

這會在指定的資源上執行指定的動作(例如建立, 描述刪除)在指定的資源上(例如節點deployment)。您可以在子指令後使用 --help 來取得關於可能參數的額外資訊(例如:kubectl get nodes --help)。

執行 kubectl version 指令,檢查 kubectl 是否已設定為與您的叢集通訊。

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

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

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

部署應用程式

讓我們使用 kubectl create deployment 指令在 Kubernetes 上部署第一個應用程式。我們需要提供 Deployment 名稱和應用程式映像檔位置(包含託管在 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

我們看到有一個 Deployment 正在執行應用程式的單一執行個體。該執行個體正在節點上的容器內執行。

檢視應用程式

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

我們稍後將在模組 4 中涵蓋關於如何將您的應用程式公開到 Kubernetes 叢集外部的其他選項。此外,作為一個基礎教學課程,我們在此處不會詳細解釋 Pod 是什麼,這將在後續主題中涵蓋。

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

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

kubectl proxy

我們現在建立了主機 (終端機) 和 Kubernetes 叢集之間的連線。此代理伺服器能夠讓終端機直接存取 API。

您可以透過代理伺服器端點看到所有託管的 API。例如,我們可以透過 API 使用 curl 指令直接查詢版本。

curl https://127.0.0.1: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 Pod 名稱:$POD_NAME

您可以透過代理伺服器 API 存取 Pod,方法是執行:

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

為了讓新的 Deployment 在不使用代理伺服器的情況下也能存取,需要一個 Service,這將在模組 4 中說明。

準備就緒後,請繼續前往檢視 Pod 和節點

上次修改時間:2024 年 3 月 21 日下午 8:32 PST:在 deploy-intro 中顯示正確的代理伺服器 URL。(f69cbbde73)