KubernetesでPod名やNode名を環境変数として取得する方法(Downward API)

kubenetesロゴ

Kubernetesでは、Podのメタデータ(Pod名・Node名など)を
コンテナの環境変数として取得することができます。

これは Downward API と呼ばれる機能で、
アプリケーションが自身の情報を取得する際に利用されます。
例えば以下のような用途があります。

  • Pod名をログに出力する
  • Node名をアプリケーションで利用する
  • Namespace情報を取得する

今回は Node名を環境変数として取得するPod を作成します。

Podマニフェストの作成

まずマニフェストファイルを作成します。

vi env-pod.yaml

以下の内容を記述します。

apiVersion: v1
kind: Pod
metadata:
  name: env-pod
spec:
  containers:
  - name: env-pod-container
    image: nginx
    env:
      - name: MY_NODE_NAME
        valueFrom:
          fieldRef:
            fieldPath: spec.nodeName

この設定により、Podがスケジュールされた Node名 が
環境変数 MY_NODE_NAME に設定されます。

Podをデプロイ

作成したマニフェストを適用します。

kubectl apply -f env-pod.yaml

環境変数の確認

環境変数の確認

kubectl exec env-pod -- printenv MY_NODE_NAME

Node名が表示されれば成功です。

※参考Pod名を取得する場合

Pod名を取得する場合は metadata.name を指定します。

env:
- name: MY_POD_NAME
  valueFrom:
    fieldRef:
      fieldPath: metadata.name

まとめ

Kubernetesでは **Downward API を利用することで、
Podの情報をコンテナの環境変数として取得できます。

よく使用される情報は以下です。

取得できる情報fieldPath
Pod名metadata.name
Namespacemetadata.namespace
Node名spec.nodeName
Pod IPstatus.podIP

アプリケーションが自身の実行環境を把握する際に便利な機能です。

https://kubernetes.io/docs/concepts/workloads/pods/downward-api/

kubenetes公式ドキュメント