はじめに
kubectlコマンドやocコマンドを使っていて、ワイルドカードを使いたいときのレシピを考えました。
レシピ1,2はpodを例として使っていますが、configmap, pvc, secretなど他のリソースでも応用できます。
レシピ1: シンプルにgrep
kubectl get pod | grep xxx
これは大量のpodが存在しているnamespace上で新しく複数のpodを立ち上げた時などは、kubectl get pod -w | grep xxx とすれば、ステータスが変わるごとに更新されて見やすいです。
出力結果の頭の"NAME READY STATUS RESTARTS AGE” が見えなくなるのですが、それより手軽さを考慮しこちらを採用しました。
ユースケース
- kubectl get podなどで特定の文字列を含むpodのみを参照したいとき。
- 本来使いたかったコマンド例
- kubectl get pod nginx-*
- kubectl get configMap *-config
レシピ2: 特定のリソースを参照してまとめて削除
kubectl get pod -o=name | grep xxx | tr '\n' ' ' | sed -e 's/pod\///g'
kubectl delete pod <前のコマンドの出力結果>
一気に削除するのが怖いので、一度出力させてそれをコピペで削除した方が安全と考えました。
grepで絞りたい文字列を入れて、trで改行を削除して、sedで不要な文字列を削除して、その出力結果を使って目的のリソースを削除します。
ユースケース
- kubectl delete podなどでpodをまとめて削除したいが、ワイルドカードが使えなくて困っ他とき。
- 使いたかったコマンド例
- kubectl delete po nginx-*
- kubectl delete cm *-config
レシピ3: 特定のリソースを参照してまとめて削除 その2
kubectl get pv | grep Released | cut -f 1 -d " " | tr '\n' ' '
kubectl delete pv <前のコマンドの出力結果>
レシピ2をpv向けに改良したレシピです。pvはpvcと一緒に紐づいているものを削除することがあり、pvcを削除後STATUSが"Released"となっているものだけ削除したい場合などこのレシピが有効と思いました。
Releasedなどでgrepをかけ、cutでpvのNAMEだけ抜き出し、trで改行を消して、その出力結果を使って目的のリソースを削除します。
ユースケース
- リソースのNAMEではなくSTATUSで絞り、対象のSTATUSのリソースを削除したいとき。
以上です。
今後も思いつき次第、レシピを作って更新します。