「kubectl get」の内容をjqで絞り込んだpodに対して「kubectl logs」でログ出力したい

次のコマンドを使用して、kubectl getコマンドの出力をjqで絞り込み、その結果をkubectl logsコマンドにパイプしてログを出力することができます。

kubectl get <resource> -o json | jq -r '.items[] | select(<filter condition>) | .metadata.name' | xargs -I {} kubectl logs {}

上記のコマンドをカスタマイズするには、以下の手順に従ってください。

  1. <resource>を、ログを出力したいKubernetesリソース(例: poddeploymentなど)に置き換えます。

  2. <filter condition>を、結果を絞り込むためのjqのフィルタ条件に置き換えます。この条件を使用して、特定のPodを絞り込むことができます。例えば、.metadata.labels.app == "my-app"のような条件を指定すると、appラベルがmy-appと一致するPodのログを出力します。

  3. コマンドを実行すると、絞り込まれたPodの名前が抽出され、kubectl logsコマンドに渡されます。ログはそれぞれのPodに対して個別に出力されます。

注意: 上記のコマンドは、結果を1つのPodに絞り込むことを前提としています。複数のPodに対してログを出力する場合は、適切なjqフィルタ条件を指定する必要があります。

このコマンドを使用すると、kubectl getの結果をjqで絞り込み、結果のPodに対してkubectl logsでログを出力することができます。