重啟 Kubernetes Pod的方式


在使用 docker 的過程中,我們可以使用docker restart {container_id}來重啟容器,但是在 kubernetes 中並沒有重啟命令,有時候我們的 Pod 出現 Bug意外終止,導致我們需要重啟 Pod ,卻沒有一個很好的方式,特別是沒有 yaml 文件的情況下,所以我總結了以下幾種重啟 Pod 的方式。

方法 1

有最新的 yaml 文件。

在有 yaml 文件的情況下可以直接使用kubectl replace --force -f xxxx.yaml來強制替換Pod 的 API 對象,從而達到重啟的目的。

方法 2

沒有 yaml 文件,但是使用的是 Deployment 對象。

  1. kubectl scale deployment esb-admin --replicas=0 -n {namespace}
  2. kubectl scale deployment esb-admin --replicas=1 -n {namespace}

由於 Deployment 對象並不是直接操控的 Pod 對象,而是操控的 ReplicaSet 對象,而 ReplicaSet 對象就是由副本的數目的定義和Pod 模板組成的。所以這條命令分別是將ReplicaSet 的數量 scale 到 0,然后又 scale 到 1,那么 Pod 也就重啟了。

方法 3

同樣沒有 yaml 文件,但是使用的是 Deployment 對象。

使用命令kubectl delete pod {podname} -n {namespace}
這個方法就很簡單粗暴了,直接把 Pod 刪除,因為 Kubernetes 是聲明式 API,所以刪掉了之后,Pod API 對象就與預期的不一致了,所以會自動重新創建 Pod 保持與預期一致,但是如果ReplicaSet 管理的 Pod 對象很多的話,那么要一個個手動刪除,會很麻煩,所以可以使用kubectl delete replicaset {rs_name} -n {namespace}命令來刪除 ReplicaSet

方法 4

沒有 yaml 文件,直接使用的 Pod 對象。

使用命令kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -

在這種情況下,由於沒有 yaml 文件,且啟動的是 Pod 對象,那么是無法直接刪除或者 scale 到 0 的,但可以通過上面這條命令重啟。這條命令的意思是 get 當前運行的 pod 的 yaml聲明,並管道重定向輸出到 kubectl replace命令的標准輸入,從而達到重啟的目的。

總結

我們可以通過多種方式來重啟對象,總的來說,最推薦的方式是使用kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -這種方式,因為適用於多種對象。此外,重啟 Pod 並不會修復運行程序的 bug,想要解決程序的意外終止,最終還是得要修復 bug。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM