使用kubectl get pods, 發現很多pod的狀態為evicted。
k8s本來跑的好好的,突然發現上面的服務都停了,然后查看發現pod狀態變了,網上發現說是資源不足導致的,然后瘋狂查找。
1.查看內存情況,命令:free -g ,發現沒問題
2.查看內存情況,命令:top ,發現沒問題
3.查看硬盤情況,命令:df -lh,發現硬盤沒問題,但啟動的docker鏡像有問題!!!!!
繼續查找發現是由於啟動的docker占用的空間大於85%導致掛掉的。
原因
eviction,即驅趕的意思,意思是當節點出現異常時,kubernetes將有相應的機制驅趕該節點上的Pod。
多見於資源不足時導致的驅趕。
解決方案
排查資源和異常原因,防止新的驅趕產生。
然后查看docker ps -a,發現有很多已經停止的容器,就是這里!!!!!!
刪除掉這些不用的,命令:docker container prune
此時資源問題已經解決。
還需要把evicted的pod給刪掉,由於每個命名空間下都有,所有需要使用腳本循環操作,如下:
kubectl get pods | grep Evicted | awk ‘{print $1}’ | xargs kubectl delete pod
#!/bin/bash
for ns in `kubectl get ns | awk 'NR>1{print $1}'`
do
kubectl get pods -n ${ns} | grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n ${ns}
done