Pod (というかコンテナ)に ConfigMap の内容を渡す時に envFrom を使って環境変数として渡す手法がありますが、どのタイミングの内容が環境変数として渡されるでしょうか。

[umezawa@devubuntu:pts/0 ~]$ kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
  name: foo
data:
  key: aaa
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: foo
  template:
    metadata:
      labels:
        app: foo
    spec:
      containers:
        - name: main
          image: ubuntu:latest
          command: [ "timeout", "infinity", "sleep", "infinity" ]
          envFrom:
            - configMapRef:
                name: foo
^D
configmap/foo created
deployment.apps/foo created
[umezawa@devubuntu:pts/0 ~]$ kubectl get pod
NAME                   READY   STATUS    RESTARTS   AGE
foo-869df988fd-ppr5g   1/1     Running   0          6s
[umezawa@devubuntu:pts/0 ~]$ kubectl exec deploy/foo -it -- bash
root@foo-869df988fd-ppr5g:/# echo $key
aaa     # ConfigMap の内容が見えている
root@foo-869df988fd-ppr5g:/# exit
exit
[umezawa@devubuntu:pts/0 ~]$ kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
  name: foo
data:
  key: bbb
configmap/foo configured
[umezawa@devubuntu:pts/0 ~]$ kubectl exec deploy/foo -it -- bash
root@foo-869df988fd-ppr5g:/# echo $key
aaa     # ConfigMap を修正するだけでは反映されない
root@foo-869df988fd-ppr5g:/# exit
exit
[umezawa@devubuntu:pts/0 ~]$ kubectl rollout restart deploy/foo
deployment.apps/foo restarted
[umezawa@devubuntu:pts/0 ~]$ kubectl rollout status deploy/foo
deployment "foo" successfully rolled out
[umezawa@devubuntu:pts/0 ~]$ kubectl get pod
NAME                  READY   STATUS    RESTARTS   AGE
foo-d6974b576-dtf7s   1/1     Running   0          12s
[umezawa@devubuntu:pts/0 ~]$ kubectl exec deploy/foo -it -- bash
root@foo-d6974b576-dtf7s:/# echo $key
bbb     # Pod を再起動すると反映される
root@foo-d6974b576-dtf7s:/# exit
exit
[umezawa@devubuntu:pts/0 ~]$ kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
  name: foo
data:
  key: ccc
configmap/foo configured
[umezawa@devubuntu:pts/0 ~]$ kubectl exec deploy/foo -it -- bash
root@foo-d6974b576-dtf7s:/# echo $key
bbb
root@foo-d6974b576-dtf7s:/# kill 1    # PID 1 を kill してコンテナを再起動する
root@foo-d6974b576-dtf7s:/# command terminated with exit code 137
[umezawa@devubuntu:pts/0 ~]$ kubectl get pod
NAME                  READY   STATUS    RESTARTS     AGE
foo-d6974b576-dtf7s   1/1     Running   1 (6s ago)   57s    # Pod はそのままでコンテナだけ再起動している
[umezawa@devubuntu:pts/0 ~]$ kubectl exec deploy/foo -it -- bash
root@foo-d6974b576-dtf7s:/# echo $key
ccc     # コンテナを再起動しても反映される
root@foo-d6974b576-dtf7s:/# exit
exit
[umezawa@devubuntu:pts/0 ~]$

というわけで、コンテナの(再)起動時の内容が使われる、です。まあそれはそうよね。

Trackback

no comment untill now

Add your comment now