概要
k8sでprefixがついたpodをまとめて削除したい。そんなニーズ、ありませんか?
私はありました。kubernetesの仕様には、prefix指定で消す仕様はなかったと思います。(2020/03/14時点)
以下は、argo workflowをテストした結果作られたpodたちです。
$ kubectl get pod -n argo
NAME READY STATUS RESTARTS AGE
argo-ui-7996bddf44-sp8hf 1/1 Running 0 27h
dag-diamond-7wpjr-1361844291 0/2 Completed 0 26h
dag-diamond-7wpjr-1395399529 0/2 Completed 0 26h
dag-diamond-7wpjr-1428954767 0/2 Completed 0 26h
dag-diamond-7wpjr-258766428 0/2 Completed 0 26h
dag-diamond-7wpjr-309099285 0/2 Completed 0 26h
dag-diamond-7wpjr-510724903 0/2 Completed 0 26h
dag-diamond-7wpjr-527502522 0/2 Completed 0 26h
workflow-controller-646446bcf-jp6xq 1/1 Running 0 27h
argo workflowで作成されるpodは、生成の過程でprefixをつけることが出来ます。
dag-diamond-
が今回付けたprefixです。
もちろん1つずつ削除するのも良いんですが正直今後もやるとなるとキリがないです。
探してもなかったので、既存のコマンドを組み合わせました。
いざ、実食
$ kubectl get pod -n argo |awk '/dag-diamond-*/{print $1}' |xargs kubectl delete pod -n argo
pod "dag-diamond-7wpjr-1361844291" deleted
pod "dag-diamond-7wpjr-1395399529" deleted
pod "dag-diamond-7wpjr-1428954767" deleted
pod "dag-diamond-7wpjr-258766428" deleted
pod "dag-diamond-7wpjr-309099285" deleted
pod "dag-diamond-7wpjr-510724903" deleted
pod "dag-diamond-7wpjr-527502522" deleted
分解すると
# namespace名 argo内のpodの一覧取得
$ kubectl get pod -n argo
# dag-diamond- から始まるpodの一覧取得
$ awk '/dag-diamond-*/{print $1}'
# namespace名 argo内のpodを削除
$ xargs kubectl delete -n argo pod
結果を見てみましょう。
$ kubectl get pod -n argo
NAME READY STATUS RESTARTS AGE
argo-ui-7996bddf44-sp8hf 1/1 Running 0 27h
workflow-controller-646446bcf-jp6xq 1/1 Running 0 27h
yes!
最後に
ほとんどこの記事を参考にしました。