このセクションでは、Pod に環境変数を渡す方法について紹介します。Kubernetes では、環境変数やファイルが置かれた領域をマウントして渡すことで個別のコンテナに対する設定をすることが一般的であり、ここでは環境変数について触れます。

サンプルのマニフェストファイルを新規作成し、以下コードを記述します。

[root@kube-master sample-env]# vi sample-env.yaml

spec の containters の env に静的な値として環境変数を定義します。ここでは、TESTという名前の環境変数に “hoge” という値を渡す定義をしています。

apiVersion: v1
kind: Pod
metadata:
  name: sample-env
  labels:
    app: sample-app
spec:
  containers:
    - name: nginx-container
      image: nginx:1.12
      env:
        - name: TEST
          value: "hoge"

Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。

[root@kube-master sample-env]# kubectl apply -f sample-env.yaml 
pod/sample-env created
[root@kube-master sample-env]# 

Master サーバーから Kubernetes クラスタ上の Pod リソースを確認します。 Pod が起動していることが確認できます。

[root@kube-master sample-env]# kubectl get pods -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
sample-env   1/1     Running   0          3s    10.244.1.153   kube-work1   <none>           <none>
[root@kube-master sample-env]# 

Masterサーバーから Pod のコンテナ内の環境変数を確認します。ここでは、TESTという環境変数に “hoge”という値が登録されていることが確認できます。

[root@kube-master sample-env]# kubectl exec -it sample-env env | grep TEST
TEST=hoge
[root@kube-master sample-env]# 

Masterサーバーから Pod のコンテナのタイムゾーンを確認してみます。ここでは、タイムゾーンが UTC であることが確認できます。

[root@kube-master sample-env]# kubectl exec -it sample-env date
Fri Feb  1 17:58:12 UTC 2019
[root@kube-master sample-env]# 

今度は、コンテナのタイムゾーンを JST にしてみます。まず、作成した Pod リソースを削除します。

[root@kube-master sample-env]# kubectl delete pod sample-env
pod "sample-env" deleted
[root@kube-master sample-env]# 

サンプルのマニフェストファイルを編集し、以下コードに変更します。

[root@kube-master sample-env]# vi sample-env.yaml

spec の containters の env にある環境変数の定義を変更します。ここでは、TZ という名前の環境変数に “Asia/Tokyo” という値を渡す定義をしています。

apiVersion: v1
kind: Pod
metadata:
  name: sample-env
  labels:
    app: sample-app
spec:
  containers:
    - name: nginx-container
      image: nginx:1.12
      env:
        - name: TZ
          value: Asia/Tokyo

Master サーバーから 変更したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。

[root@kube-master sample-env]# kubectl apply -f sample-env.yaml 
pod/sample-env created
[root@kube-master sample-env]#

Master サーバーから Kubernetes クラスタ上の Pod リソースを確認します。 Pod が起動していることが確認できます。

[root@kube-master sample-env]# kubectl get pods -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
sample-env   1/1     Running   0          2s    10.244.1.155   kube-work1   <none>           <none>
[root@kube-master sample-env]# 

Masterサーバーから Pod のコンテナのタイムゾーンを確認してみます。ここでは、タイムゾーンが JST になっていることが確認できます。

[root@kube-master sample-env]# kubectl exec -it sample-env date
Sat Feb  2 03:03:57 JST 2019
[root@kube-master sample-env]#

Master サーバーから 作成した Pod リソースを削除します。

[root@kube-master sample-env]# kubectl delete pod sample-env
pod "sample-env" deleted
[root@kube-master sample-env]# 

Master サーバーから Kubernetes クラスタ上の Pod リソースを確認します。ここでは、リソースが削除されていることが確認できます。

[root@kube-master sample-env]# kubectl get pods -o wide
No resources found.
[root@kube-master sample-env]#