如何在 Kubernetes 中停止/暫停 Pod
1. 概述
在本教程中,我們將深入研究在 Kubernetes 叢集中停止或暫停 pod 的各種方法和策略。這有助於我們控制流量和服務的整體可用性。
2. 停止 Pod
Kubernetes 中的 Pod 是解決特定目的的單一隔離單元。我們可以在一個 Pod 中包含一個或一組相關的容器。停止 Pod 是有意終止 Pod 執行和 Pod 內運作的所有容器的操作。
一般來說,Pod 終止有兩種類型,優雅終止和強制終止。讓我們藉助範例來討論這兩種方法。
2.1.使用kubectl delete
命令
使用kubectl delete
指令,我們可以刪除各種 Kubernetes 資源,包括 pod。它允許我們從叢集中優雅地終止和刪除 Kubernetes 資源。
假設我們有一個 Kubernetes 集群,其中有一個名為my-pod
的 pod。為了刪除這個 pod,我們可以使用下面的kubectl delete
指令:
$ kubectl delete pod my-pod
pod "my-pod" deleted
當我們執行上述指令時,Kubernetes 將啟動my-pod
pod 的終止程序。它向 pod 內運行的主進程發送終止訊號,允許進程在終止 pod 之前根據需要執行清理任務。
2.2.強制終止
預設情況下,Kubernetes 將等待 pod 正常終止。如果 pod 由於某些原因未能終止,我們可以使用–force
標誌強制刪除 pod:
$ kubectl delete pod my-pod --force
pod "my-pod" deleted (force)
請注意,我們可以使用具有不同資源類型(例如Deployments
、 Services
、 ConfigMaps
)的kubectl delete
指令來刪除叢集中的其他 Kubernetes 資源。這裡我們用它來刪除 Pod。
2.3.縮小部署規模
當 Pod 不屬於任何部署時,使用kubectl delete
指令刪除 Pod 會很有幫助。一般來說,Pod 由 Kubernetes 中的部署啟動和管理。此外,與生產環境中的部署相關的 Pod 數量非常大。因此,使用kubectl delete
指令一一刪除 Pod 並不是一個好的選擇。
我們可以使用kubectl scale
指令將部署縮減到零副本,從而有效地停止 Pod:
$ kubectl scale deployment my-deployment --replicas=0
deployment.apps/my-deployment scaled
輸出訊息表示名為 my-deployment 的部署已成功縮減至零副本。
使用kubectl get
pods 指令,我們可以驗證部署中不再有任何正在執行的 pod:
$ kubectl get pods
當我們需要暫停或暫時停止特定應用程式或服務的流量時,這非常有用。我們稍後可以在需要時擴展部署以恢復其運行。
3. 暫停 Pod
我們可以使用docker pause
指令暫停 Docker 容器。這將透過發送SIGSTOP 訊號來暫停該 Docker 容器內的所有進程。
在 Kubernetes 中,事情的運作方式有所不同。沒有「暫停」Pod 以暫時停止其執行,然後在其停止的地方恢復它的原生概念。 Pod 是獨立的單元,設計為運作或終止。
然而,我們可以透過在 Kubernetes 中使用各種策略來實現類似的暫停效果。現在我們來討論一下它們。
3.1.使用自訂應用程式邏輯
透過在應用程式程式碼中新增自訂邏輯,我們可以輕鬆實現暫停行為。此外,此方法還提供對 Pod 行為的細微控制。
為了說明這一點,我們可以引入一個配置標誌,例如PROCESSING_ENABLED
,它可以打開和關閉。當PROCESSING_ENABLED
設定為true
時,應用程式執行其處理任務。當它設定為false
時,應用程式的自訂邏輯將正常掛起後台進程。這樣,我們就可以控制資料處理的時間。
3.2.更新服務中的 Pod 選擇器
理想情況下,我們將標籤附加到 Pod 上,並在服務中使用相同的標籤。當流量到達服務時,服務將尋找與標籤相符的所有 Pod,並將流量路由到其中一個 Pod。為了暫停此流程,我們可以更新 Kubernetes 服務中的 pod 選擇器標籤。
讓我們透過一個例子來理解這一點。假設我們有一個包含多個 Pod 的微服務應用程式。這些 Pod 負責處理不同的任務,例如資料處理、報告和使用者管理。現在,假設我們想要在維護時段期間暫時暫停資料處理 Pod,以確保資料完整性。
我們可以簡單地將服務中的 pod 選擇器更新為與叢集中任何 pod 標籤都不匹配的任意隨機值。這樣,流量就不會被重新導向到資料處理 Pod。維護完成後,我們可以將 pod 選擇器更新為適當的值,從而恢復流量。
這種方法的優點是無需在應用程式程式碼中維護任何自訂邏輯。
4。結論
在本文中,我們學習了使用kubectl delete
指令停止 Kubernetes 中的 pod。此外,我們學會了透過縮小部署規模來停止所有部署 Pod。最後,我們討論了在 Kubernetes 中暫停 Pod 流量的各種策略。