1、阿里云ack集群:test-k8s,有許多異常pod。

image.png
查看dashboard發(fā)現(xiàn)很多pod狀態(tài)是Evicted狀態(tài),需要批量刪除這些失敗了的pod。
方案:
kubectl get pods | grep Evicted | awk '{print$1}'| xargs kubectl delete pods
kubectl get pods -n kube-system | grep Evicted | awk '{print$1}'| xargs kubectl delete -n kube-system pods
第一條命令用于刪除default namespace下的失敗pod,第二條用戶刪除指定namespace下的失敗pod(此處是以kube-system為例)。
解析:
- 獲取所有的pods及其狀態(tài)。
kubectl get pods
- 通過 “|” pipe上一步出參當(dāng)作下一個操作的入?yún)ⅲ?/li>
grep Evicted
- 執(zhí)行g(shù)rep,選出帶有Evicted字段的pod
awk '{print$1}'
- 通過awk,獲取第一列信息,也就是NAME,這一步返回的是一個失敗pod名稱的列表。
xargs kubectl delete pods
- 使用xargs指令,循環(huán)刪除失敗pod。
somecommand |xargs command
- xargs說明
-a file 從文件中讀入作為sdtin
-e flag ,注意有的時候可能會是-E,flag必須是一個以空格分隔的標(biāo)志,當(dāng)xargs分析到含有flag這個標(biāo)志的時候就停止。
-p 當(dāng)每次執(zhí)行一個argument的時候詢問一次用戶。
-n num 后面加次數(shù),表示命令在執(zhí)行的時候一次用的argument的個數(shù),默認(rèn)是用所有的。
-t 表示先打印命令,然后再執(zhí)行。
-i 或者是-I,這得看linux支持了,將xargs的每項名稱,一般是一行一行賦值給 {},可以用 {} 代替。
-r no-run-if-empty 當(dāng)xargs的輸入為空的時候則停止xargs,不用再去執(zhí)行了。
-s num 命令行的最大字符數(shù),指的是 xargs 后面那個命令的最大命令行字符數(shù)。
-L num 從標(biāo)準(zhǔn)輸入一次讀取 num 行送給 command 命令。
-l 同 -L。
-d delim 分隔符,默認(rèn)的xargs分隔符是回車,argument的分隔符是空格,這里修改的是xargs的分隔符。
-x exit的意思,主要是配合-s使用。。
-P 修改最大的進(jìn)程數(shù),默認(rèn)是1,為0時候為as many as it can ,這個例子我沒有想到,應(yīng)該平時都用不到的吧。
- 實際命令案例:
kubectl get pods -n guoji | grep ContainerStatusUnknown | awk '{print$1}' | xargs kubectl delete pods -n guoji
