1月
11
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 ~]$
というわけで、コンテナの(再)起動時の内容が使われる、です。まあそれはそうよね。
no comment untill now