在使用 docker 的過程當中,咱們可使用docker restart {container_id}
來重啓容器,可是在 kubernetes 中並無重啓命令(沒有 kubectl restart {podname}
),有時候咱們的 Pod 出現 Bug意外終止,致使咱們須要重啓 Pod ,卻沒有一個很好的方式,特別是沒有 yaml 文件的狀況下,因此我總結了如下幾種重啓 Pod 的方式。docker
有最新的 yaml 文件。spa
在有 yaml 文件的狀況下能夠直接使用kubectl replace --force -f xxxx.yaml
來強制替換Pod 的 API 對象,從而達到重啓的目的。以下圖:rest
沒有 yaml 文件,可是使用的是 Deployment 對象。code
kubectl scale deployment esb-admin --replicas=0 -n {namespace}
kubectl scale deployment esb-admin --replicas=1 -n {namespace}
因爲 Deployment 對象並非直接操控的 Pod 對象,而是操控的 ReplicaSet 對象,而 ReplicaSet 對象就是由副本的數目的定義和Pod 模板組成的。因此這條命令分別是將ReplicaSet 的數量 scale 到 0,而後又 scale 到 1,那麼 Pod 也就重啓了。對象
一樣沒有 yaml 文件,可是使用的是 Deployment 對象。blog
使用命令kubectl delete pod {podname} -n {namespace}
這個方法就很簡單粗暴了,直接把 Pod 刪除,由於 Kubernetes 是聲明式 API,因此刪掉了以後,Pod API 對象就與預期的不一致了,因此會自動從新建立 Pod 保持與預期一致,可是若是ReplicaSet 管理的 Pod 對象不少的話,那麼要一個個手動刪除,會很麻煩,因此可使用kubectl delete replicaset {rs_name} -n {namespace}
命令來刪除 ReplicaSetget
沒有 yaml 文件,直接使用的 Pod 對象。kubernetes
使用命令kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -
it
在這種狀況下,因爲沒有 yaml 文件,且啓動的是 Pod 對象,那麼是沒法直接刪除或者 scale 到 0 的,但能夠經過上面這條命令重啓。這條命令的意思是 get 當前運行的 pod 的 yaml聲明,並管道重定向輸出到 kubectl replace
命令的標準輸入,從而達到重啓的目的。模板
咱們能夠經過多種方式來重啓對象,總的來講,最推薦的方式是使用kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -
這種方式,由於適用於多種對象。此外,重啓 Pod 並不會修復運行程序的 bug,想要解決程序的意外終止,最終仍是得要修復 bug。