web-dev-qa-db-ja.com

Kubernetesのポッドログファイルはどこにありますか?

走ると

$ kubectl logs <container>

ポッドのログを取得します。

しかし、それらのログのfilesはどこにありますか?

いくつかの情報源は/var/log/containers/他の人は/var/lib/docker/containers/しかし、実際のアプリケーションまたはポッドのログが見つかりませんでした。

7
gcstr

ディスク上のファイル名は

docker inspect $pod_name_or_sha | jq -r '.[0].LogPath'

dockerデーモンの構成がデフォルトの{"log-driver": "json-file"}であると仮定すると、kubectl logsが正しく動作する場合はほぼ確実に真になります。

これも言うまでもありませんが、ポッドがdocker inspectにスケジュールされたNodeにいるか、ディスク上のログファイルの存在をスニッフィングしている必要があります。 kubectl describe pod $pod_nameはNodeの名前をレンダリングします。プログラムで取得したい場合は、kubectl get -o json pod $pod_nameにあると思われるかもしれません。

3
mdaniel

それらのディレクトリに何かありますか?

私のクラスターでは、各ポッドからのstdout/stderrログは/var/log/containersにありますが、いくつかのリンク/リダイレクトがあります。

/var/log/containers/<pod-name>_<namespace>_<container-name-container-id>.log -> /var/log/pods/<some-uuid>/<container-name>_0.log

そして、そのログは実際には/var/lib/dockerにリンクされています。

<container-name>_0.log -> /var/lib/docker/containers/<container-id>/<container-id>-json.log
4
erk

短い答え:

Dockerを使用している場合、各コンテナーのstdout/var/lib/docker/containersに格納されます。ただし、Kubernetesは、ポッドに基づいてログを検索するのに役立つディレクトリ構造も作成するため、/var/log/pods/<namespace>_<pod_name>_<pod_id>/<container_name>/のノードで実行されている各ポッドのコンテナログを検索できます。


長い回答:

Dockerは、各コンテナーからstdoutログをトラップし、ホストの/var/lib/docker/containersに保存します。 KubernetesがコンテナランタイムとしてDockerを使用する場合、DockerはコンテナログもKubernetesノードのその場所に保存します。ただし、コンテナをKubernetesで直接実行しない(ポッドを実行する)ため、Kubernetesは/var/log/pods/ディレクトリと/var/log/containersディレクトリも作成して、ポッドに基づいてログファイルをより適切に整理できるようにします。

/var/log/pods/内の各ディレクトリには、単一のポッドのログが格納され、それぞれに構造<namespace>_<pod_name>_<pod_id>を使用して名前が付けられます。

ポッドのIDは、kubectl get pod -n core gloo-76dffbd956-rmvdz -o jsonpath='{.metadata.uid}'を実行して取得できます。 yq の使用に慣れている場合は、kubectl get pod <pod_name> -o yaml | yq r - metadata.uidの実行がより簡単であることがわかります。

/var/log/pods/<namespace>_<pod_name>_<pod_id>/ディレクトリ内にはさらに多くのディレクトリがあり、それぞれがポッド内のコンテナを表します。これらのディレクトリの名前は、コンテナの名前と同じです。最後に、/var/log/pods/<namespace>_<pod_name>_<pod_id>/<container_name>/ディレクトリ内を見ると、Dockerによって/var/lib/docker/containers内に保存されているログファイルへのシンボリックリンクが見つかります。

同様に、/var/log/containers/ディレクトリ内には、/var/log/pods/<namespace>_<pod_name>_<pod_id>/<container_name>/ディレクトリへのシンボリックリンクがあります。これらのシンボリックリンクは、構造<pod_name>_<namespace>_<container_id>を使用して名前が付けられます。

3
d4nyll

ログは、各ノードのkubeletによって管理されます。 kubectl logs <pod>を実行すると、ポッドが実行されているノードのkubeletにリクエストが渡され、関連するログファイルが読み取られます。

あなたはアーキテクチャを見ることができます ここ