執行應用程式的多個例項

目標

  • 使用 kubectl 手動擴充套件現有應用程式。

擴充套件應用程式

之前我們建立了一個 Deployment,然後透過 Service 將其公開。該 Deployment 只為執行我們的應用程式建立了一個 Pod。當流量增加時,我們需要擴充套件應用程式以滿足使用者需求。

如果您還沒有完成前面的部分,請從使用 minikube 建立叢集開始。

透過更改 Deployment 中副本的數量來實現**擴縮**。

擴縮概覽

擴充套件 Deployment 將確保建立新的 Pod 並將其排程到具有可用資源的節點上。擴充套件會將 Pod 數量增加到新的期望狀態。Kubernetes 還支援 Pod 的自動擴縮,但這超出了本教程的範圍。擴充套件到零也是可能的,它將終止指定 Deployment 的所有 Pod。

執行應用程式的多個例項將需要一種方法來將流量分發給所有這些例項。Service 具有整合的負載均衡器,可將網路流量分發給所有公開的 Deployment 的 Pod。Service 將使用端點持續監控正在執行的 Pod,以確保流量僅傳送到可用的 Pod。

一旦應用程式運行了多個例項,您就可以在不中斷服務的情況下執行滾動更新。我們將在教程的下一節中介紹這一點。現在,讓我們轉到終端並擴充套件我們的應用程式。

擴充套件 Deployment

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

kubectl get deployments

輸出應類似於

NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           11m

我們應該有一個 Pod。如果不是,請再次執行該命令。這表明

  • **NAME** 列出叢集中 Deployment 的名稱。
  • **READY** 顯示 CURRENT/DESIRED 副本的比例
  • **UP-TO-DATE** 顯示已更新以達到期望狀態的副本數量。
  • **AVAILABLE** 顯示有多少應用程式副本可供您的使用者使用。
  • **AGE** 顯示應用程式已執行的時間量。

要檢視 Deployment 建立的 ReplicaSet,請執行

kubectl get rs

請注意,ReplicaSet 的名稱始終格式化為[部署名稱]-[隨機字串]。隨機字串是隨機生成的,並使用 Pod 模板雜湊作為種子。

此輸出的兩個重要列是

  • **DESIRED** 顯示應用程式的期望副本數量,這是您建立 Deployment 時定義的。這是期望狀態。
  • **CURRENT** 顯示當前正在執行的副本數量。

接下來,讓我們將 Deployment 擴充套件到 4 個副本。我們將使用 `kubectl scale` 命令,後跟 Deployment 型別、名稱和所需的例項數量

kubectl scale deployments/kubernetes-bootcamp --replicas=4

要再次列出您的 Deployment,請使用 `get deployments`

kubectl get deployments

更改已應用,我們有 4 個應用程式例項可用。接下來,讓我們檢查 Pod 的數量是否已更改

kubectl get pods -o wide

現在有 4 個 Pod,IP 地址不同。該更改已記錄在 Deployment 事件日誌中。要檢查這一點,請使用 `describe` 子命令

kubectl describe deployments/kubernetes-bootcamp

您還可以在此命令的輸出中看到現在有 4 個副本。

負載均衡

讓我們檢查 Service 是否正在進行負載均衡。為了找出公開的 IP 和埠,我們可以像教程前面部分學到的那樣使用 `describe service`

kubectl describe services/kubernetes-bootcamp

建立一個名為 NODE_PORT 的環境變數,其值為 Node 埠

export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')"
echo NODE_PORT=$NODE_PORT

接下來,我們將對公開的 IP 地址和埠執行 `curl` 命令。多次執行該命令

curl http://"$(minikube ip):$NODE_PORT"

我們每次請求都會訪問一個不同的 Pod。這表明負載均衡正在工作。

輸出應類似於

Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-wp67j | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-hs9dj | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-4hjvf | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-wp67j | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-4hjvf | v=1

縮減

要將 Deployment 縮減到 2 個副本,請再次執行 `scale` 子命令

kubectl scale deployments/kubernetes-bootcamp --replicas=2

使用 `get deployments` 子命令列出 Deployment 以檢查更改是否已應用

kubectl get deployments

副本數量減少到 2。使用 `get pods` 列出 Pod 的數量

kubectl get pods -o wide

這確認有 2 個 Pod 被終止。

下一步

最後修改時間:2025 年 7 月 9 日太平洋標準時間下午 3:44:更新 scale-intro.md (dbd792183a)