指定の文字列を含む Kubernetes Pod を一括 Delete する

kubectl delete pod コマンドで、複数の Pod を一括削除したい場合、

$ kubectl get pod myapp-xxxxxx myapp-yyyyyy

…のように記述する。ココで -xxxxxx-yyyyyy 部分はランダムな文字列になっていて、Pod が再生成される度に変化する。

こうした Pod 群を一括削除したい時に、ランダムな文字列部分を都度指定するのは面倒だ。そこで、次のようなコマンドで、myapp を含む Pod を一括削除してみる。

$ kubectl delete pod $(kubectl get pod --no-headers -o custom-columns=":metadata.name" | grep myapp | tr -s '\n' ' ')

↑ 先に結論。コレで myapp を含む Pod を一括削除できる。

コマンド置換の中を一つずつ見ていく。

$ kubectl get pod --no-headers -o custom-columns=":metadata.name"

コレで、Pod 名のみの一覧を表示する。

次に grep myapp 部分で、myapp 部分を含む Pod 名のみに絞り込む。コレだけ実行すると次のような出力になる。

$ kubectl get pod --no-headers -o custom-columns=":metadata.name" | grep myapp
myapp-xxxxxx
myapp-yyyyyy

最後に tr -s '\n' ' ' で、改行をスペースに変換する。

$ kubectl get pod --no-headers -o custom-columns=":metadata.name" | grep myapp | tr -s '\n' ' '
myapp-xxxxxx myapp-yyyyyy

ココまで出来たら、コマンド置換で kubectl delete pod の後ろにコイツをくっつけてやるだけ。おしまい。