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