如何重啟pod對應的伺服器
① Pod生命周期和重啟策略
Pod的 重啟策略(RestartPolicy )應用於 Pod內!!! 的 所有容器 ,並且 僅在Pod所處的Node!!! 上由 kubelet 進行 判斷大伏和重啟 操作。
當 某個容器!!! 異常退裂仿並出或者健康檢查(詳見下節)失敗時,kubelet將根據 RestartPolicy的設置 來進行相應的操作。
Pod的重啟策略包括Always、OnFailure和Never,默認值為Always。
kubelet 重啟失效容器 的 時間間隔 以 sync-frequency 乘以 2n 來計算,例如1、2、4、8倍等, 最長延時5min ,並且在成功重啟後肆跡的10min後重置該時間。
Pod的重啟策略與控制方式息息相關,當前 可用於管理Pod的控制器 包括 ReplicationController 、 Job 、 DaemonSet 及 直接通過kubelet 管理( 靜態Pod )。
每種控制器 對Pod的 重啟策略要求!!! 如下。
② K8S強制重啟Pod並檢查pod是否正常運行
記錄兩個k8s操作場景:
一. 重啟pod (網上方法有很多種慶皮)
當沒有yaml文件時
二. 對於pod運行的健康檢查(一般都是寫在腳本中做健康檢查機譽尺差制)
第一種:
判斷是否為Running狀態
第二種:
判斷執行狀態
上面的困塵命令成功會輸出:deployment "health-cloud-yxtx" successfully rolled out
③ kubectl重啟某個pod或者強制停掉
由於項目起了多個節點,其中一個掛掉了,想要不用yaml。只重謹模啟掛祥汪緩掉的這個,可用命令:
kubectl get pod PODNAME -n NAMESPACE -o yaml | kubectl replace --force -f -
同樣的一個pod需要停掉執陵銷行命令
kubectl get deployment -n NAMESPACE
kubectl delete deployment DEPLOYNAME -n NAMESPACE
④ Pod 中容器重啟流程
測試的時候,通常需孫伍鍵要將 Pod 中的 container 頻繁地殺死,重啟。在這個過程中,Pod 的狀態經常會出現 CrashLoopBackOff ,而且 container 重啟的時間越來越長。
為了避免 container 頻繁地 restart,k8s 對 container restart 過程做了限制,使用 back-off 的方法,官方文檔中的說法是:
Failed containers that are restarted by Kubelet, are restarted with an exponential back-off delay, the delay is in multiples of sync-frequency 0, 1x, 2x, 4x, 8x … capped at 5 minutes and is reset after 10 minutes of successful execution.
這里先直接給出結論:
4 . 在步驟 3 中計算 backoff 的過程中,還會去檢查當前橘陵時間距離上一次 container 退出時的間隔,如果大於 2 * MaxContainerBackOff = 10 minutes ,那麼會將這個 container 對應的 backoff 重置為初始值 10s
通過源碼發現, kubernetes/pkg/kubelet/kubelet.go 文件中有兩個常量:
使用這兩個變數構造了一則巧個 BackOff 對象,這個是 kubelet 的屬性,對該 node 上所有 pod 都適用
BackOff 結構如下
然後在 SyncPod 方法中使用這個對象
SyncPod 具體做的事有:
同樣在這個文件中,有一個關鍵的函數
其中 backOff.Next 函數定義如下
⑤ kubernetes 重啟的幾種方法
kubernetes 重啟的幾種方法
方法1
kubectl scale deployment XXXX --replicas=0 -n {namespace}
kubectl scale deployment XXXX --replicas=1 -n {namespace}
方判伍法2
kubectl delete pod {podname} -n {namespace}
方法旁棚3
kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -
方法4
Kubernetes 1.15開始才有運沖則
kubectl rollout restart {your_deployment_name}
⑥ k8s啟動Pod遇到CrashLoopBackOff的解決方法
一賀游虛直正常運的k8s,集群節點沒問題,但啟動pod出現異常
等待中: CrashLoopBackOff
3.查看此pod日誌
錯誤原因在這里 經查elasticsearch運行要求:
vm.max_map_count內核參數必需大於262114,確認系統調過 $sysctl -w vm.max_map_count=262144
這里注意的問題是 上述屬於臨時性調整,主機重啟後又恢復到默認狀態
記久性修改 vi /etc/sysconfig 加入:
保存/etc/sysctl.conf,重新啟動伺服器以應用更改,或執行:sysctl -p以應用更改而不重新啟動.他們將在重新啟動時永久保持.
重啟pod 進入控制台 查詢狀態 恢復
4.總結 出現故障可能很多種 但要學查看日誌 排查具體原因及應禪燃用所在磨碼
⑦ 重啟pod的三種方法
1.Rolling Restart
kubectl rollout restart deployment [deployment_name]
2.Using Environment Variables
kubectl set env deployment [deployment_name] DEPLOY_DATE="$(date)"
3: Scaling the Number of Replicas
kubectl scale deployment [deployment_name] --replicas=0
kubectl scale deployment [deployment_name] --replicas=1
⑧ 搭建預發環境
1. 首先要有一個ZOC7
2.按下圖操作新建一個連接
host 內的配置如下
login內的配置如下,賬號:aiyong 密碼:yYbLgYB184
3. 點擊connect 連接到預發慧檔差地址
連接成功會出現下面這個界面
4. 在命令行輸入
ssh 172.17.0.76
然後輸入密碼
hMsJjJY76
跳轉到了一個新地址
5. 在命令行輸入
kubectl get pod -n prepublish
能看到運行在機器上的所有pod鏡像
我們的預發環境就是在對前皮應鏡像內
6. 進入鏡像
kubectl exec -it pod名字 bash -n prepublish
7. 例如我現在進入了 pre-aiyong-item-legacy-mitem-master-deployment-6db8d58847-4vrpp 這個鏡像,輸入命令ll可以看到該路徑下所有文件,進入www/app/controllers 即對應我們項蠢褲目下的 contollers,修改本地的文件然後用 rz -y 命令上傳該文件即可。
8.nginx配置路徑
9.日誌路徑
/var/log/nginx
10. 重啟pod
刪除pod即可重啟
kubectl delete pod pre-aiyong-item-legacy-mitem-master-deployment-6db8d58847-94p4p -nprepublish