六種方法教你如何通過Kubectl 重啟Pod
點擊參加51CTO網(wǎng)站內(nèi)容調(diào)查問卷
大家可能都知道 kubectl 其實沒有 restart pod 這個命令,這個主要是由于在 k8s 中pod 的管理屬于rs 等控制器,并不需要運維手動維護,但有時候,我們修改了configmap 的配置文件后,希望重啟pod 加載配置,此時就需要 “重啟” Pod。這里說的“重啟”是加了引號的,準確地來說,是重建pod,給用戶的感覺是重啟。
下面介紹六種k8s 里面重啟pod的方式
方法一:kubectl rollout restart
這個命令是比較推薦的,通過
kubectl rollout restart deployment <deployment_name> -n <namespace>
便可以重建這個deployment下的 pod,和滾動升級類似,并不會一次性殺死Pod,比較平滑。
方法二:kubectl scale
這種方法相對來說,比較粗放,我們可以先將副本調(diào)成 0
kubectl scale deployment <deployment name> -n <namespace> --replicas=0
然后再改回目的副本數(shù)
kubectl scale deployment <deployment name> -n <namespace> --replicas=10
但這個會中斷服務(wù)。但兩條命令也能解決,下面介紹的就更直接了。
方法三: kubectl delete pod
這個我就不解釋了
kubectl delete pod <pod_name> -n <namespace>
還是多說一句,此時優(yōu)雅刪除的效果還是有的。再多說一句,直接刪 rs 效果也挺好。
方法四:kubectl replace
這種方法是通過更新Pod ,從觸發(fā)k8s pod 的更新
kubectl get pod <pod_name> -n <namespace> -o yaml | kubectl replace --force -f -
方法五:kubectl set env
通過 設(shè)置環(huán)境變量,其實也是更新pod spec 從而觸發(fā)滾動升級。
kubectl set env deployment <deployment name> -n <namespace> DEPLOY_DATE="$(date)"
只不過這里通過kubectl 命令行,當我們通過API 更新pod spec 后一樣會觸發(fā)滾動升級
方法六: kill 1
這種方法就是在容器里面 kill 1 號進程。
kubectl exec -it <pod_name> -c <container_name> --/bin/sh -c "kill 1"
但是但是但是,重要的話說三遍,它有個局限,必須要求你的 1 號進程要 捕獲 TERM 信號,否則在容器里面是殺不死自己的,這個在之前的文章已經(jīng)介紹過了。