常見(jiàn)重啟 Pod 的五種方法
1. 直接刪除 Pod
原理:刪除 Pod 后,控制器(如 Deployment、StatefulSet)會(huì)自動(dòng)創(chuàng)建新 Pod。
kubectl delete pod <pod-name> -n <namespace>
kubectl deploy pod nginx-f49c8d898-2jt8t -n prod
注意:可能導(dǎo)致短暫服務(wù)中斷(若單副本,多副本不影響)。
2. 滾動(dòng)重啟
原理:通過(guò)更新策略逐步替換舊 Pod,確保服務(wù)可用性。
kubectl rollout restart deployment/<deployment-name> -n <namespace>
注意:不適用于 DaemonSet(需其他方法)。
3. 調(diào)整副本數(shù)觸發(fā)重建
原理:通過(guò)縮容到 0 再擴(kuò)容,強(qiáng)制重建 Pod。
kubectl scale deployment/<deployment-name> --replicas=0 -n <namespace> \
&& kubectl scale deployment/<deployment-name> --replicas=2 -n <namespace>
注意:服務(wù)會(huì)中斷,生產(chǎn)環(huán)境慎用。
4. 編輯配置并應(yīng)用
原理:修改 Pod 模板(如環(huán)境變量),觸發(fā)更新。
kubectl edit deployment/<deployment-name> -n <namespace>
修改后保存退出,K8s 自動(dòng)應(yīng)用
注意:任何模板字段變更都會(huì)觸發(fā)滾動(dòng)重啟。
5. 容器內(nèi)執(zhí)行重啟命令
原理:進(jìn)入容器執(zhí)行進(jìn)程重啟(需權(quán)限)。 命令:
kubectl exec <pod-name> -n <namespace> -- /bin/sh -c "kill 1"
注意:依賴(lài)容器內(nèi) PID 1 進(jìn)程處理信號(hào),可能不生效。
6. 五種方法對(duì)比
方法 | 適用控制器 | 服務(wù)中斷風(fēng)險(xiǎn) | 推薦場(chǎng)景 |
直接刪除 Pod | 所有 | 高(單副本) | 測(cè)試、調(diào)試 |
滾動(dòng)重啟 | Deployment, StatefulSet | 低 | 生產(chǎn)環(huán)境 |
調(diào)整副本數(shù) | 所有 | 高 | 緊急情況 |
修改配置 | 支持更新的控制器 | 低 | 配置變更觸發(fā)重啟 |
容器內(nèi)重啟 | 單個(gè) Pod | 不定 | 調(diào)試 |
根據(jù)業(yè)務(wù)需求選擇合適方法,生產(chǎn)環(huán)境優(yōu)先使用滾動(dòng)重啟或配置更新以保證可用性。