configure-pod-configmap やってみたメモ。
最初
configmap がなにもないことを確認
$ kubectl get configmap No resources found.
ディレクトリから configmap 作成
mkdir -> game.properties, ui.properties をディレクトリに取得 -> kubectl create configmap game-config でディレクトリ指定
mkdir -p configure-pod-container/configmap/kubectl/ wget https://k8s.io/docs/tasks/configure-pod-container/configmap/kubectl/game.properties -O configure-pod-container/configmap/kubectl/game.properties wget https://k8s.io/docs/tasks/configure-pod-container/configmap/kubectl/ui.properties -O configure-pod-container/configmap/kubectl/ui.properties kubectl create configmap game-config --from-file=configure-pod-container/configmap/kubectl/
wgetした game.properties を確認。UUDDLRLRBABAS ってww
enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten secret.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30
wgetした ui.properties を確認
color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNice
作成したconfigmapを確認。--from-file で指定したディレクトリ内の ui.properties と game.properties が、ファイル名がキー、ファイル内容が値で作成されている。
$ kubectl get configmap game-config NAME DATA AGE game-config 2 5m49s $ kubectl describe configmap game-config Name: game-config Namespace: default Labels: <none> Annotations: <none> Data ==== game.properties: ---- enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten secret.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30 ui.properties: ---- color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNice Events: <none>
yaml で確認したり、編集したり
$ kubectl get configmaps game-config -o yaml $ kubectl edit configmaps game-config
ファイルから configmap 作成
--from-file でファイルを指定して作成するやり方。ファイル1コとファイル2コの例
$ kubectl create configmap game-config-2 --from-file=configure-pod-container/configmap/kubectl/game.properties $ kubectl create configmap game-config-2 --from-file=configure-pod-container/configmap/kubectl/game.properties --from-file=configure-pod-container/configmap/kubectl/ui.properties
pod のボリュームにConfigMapデータをマウント
properties-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: properties-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: ["sleep", "3600"]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: game-config
restartPolicy: Never
pod 作成
$ kubectl apply -f properties-pod.yaml
podで ls してみると
$ kubectl exec properties-pod -- ls /etc/config/ -al total 40 drwxrwxrwx 3 root root 4096 Feb 28 11:34 . drwxr-xr-x 1 root root 4096 Feb 28 11:35 .. drwxr-xr-x 2 root root 4096 Feb 28 11:34 ..2019_02_28_11_34_59.905140496 lrwxrwxrwx 1 root root 31 Feb 28 11:34 ..data -> ..2019_02_28_11_34_59.905140496 lrwxrwxrwx 1 root root 31 Feb 28 11:34 game-env-file.properties -> ..data/game-env-file.properties lrwxrwxrwx 1 root root 22 Feb 28 11:34 game.properties -> ..data/game.properties lrwxrwxrwx 1 root root 20 Feb 28 11:34 ui.properties -> ..data/ui.properties
pod で game.properties を cat してみると
$ kubectl exec properties-pod cat /etc/config/game.properties enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten secret.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30
pod 起動したまま、configmap:game-config を編集してみると
$ kubectl edit configmap game-config
game.properties: |-
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
qwer=asdf
podにマウントされたファイルが反映された 反映はすぐ行われない。ラグがある。
$ kubectl exec properties-pod cat /etc/config/game.properties enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten secret.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30 $ kubectl exec properties-pod cat /etc/config/game.properties enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten secret.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30 qwer=asdf
シンボリックリンクが更新されている。
$ kubectl exec properties-pod -- ls /etc/config/ -al total 40 drwxrwxrwx 3 root root 4096 Feb 28 11:46 . drwxr-xr-x 1 root root 4096 Feb 28 11:35 .. drwxr-xr-x 2 root root 4096 Feb 28 11:46 ..2019_02_28_11_46_07.342696761 lrwxrwxrwx 1 root root 31 Feb 28 11:46 ..data -> ..2019_02_28_11_46_07.342696761 lrwxrwxrwx 1 root root 31 Feb 28 11:34 game-env-file.properties -> ..data/game-env-file.properties lrwxrwxrwx 1 root root 22 Feb 28 11:34 game.properties -> ..data/game.properties lrwxrwxrwx 1 root root 20 Feb 28 11:34 ui.properties -> ..data/ui.properties
env ファイルからconfigmap作成
google translate先生、env ファイルってなに?
環境ファイルには環境変数のリストが含まれています。 これらの構文規則が適用されます。 envファイルの各行はVAR = VAL形式でなければなりません。 #で始まる行(つまりコメント)は無視されます。 空白行は無視されます。 引用符の特別な処理はありません(それらはConfigMap値の一部になります)。
ファイル取得し内容確認
$ wget https://k8s.io/docs/tasks/configure-pod-container/configmap/kubectl/game-env-file.properties -O configure-pod-container/configmap/kubectl/game-env-file.properties $ cat configure-pod-container/configmap/kubectl/game-env-file.properties enemies=aliens lives=3 allowed="true" # This comment and the empty line above it are ignored
env ファイルからconfigmap作成し確認
$ kubectl create configmap game-config-env-file \
--from-env-file=configure-pod-container/configmap/kubectl/game-env-file.properties
configmap/game-config-env-file created
get で確認
$ kubectl get configmap game-config-env-file NAME DATA AGE game-config-env-file 3 29s
describe で確認。空行、コメントがなくなっている。
$ kubectl describe configmap game-config-env-file Name: game-config-env-file Namespace: default Labels: <none> Annotations: <none> Data ==== allowed: ---- "true" enemies: ---- aliens lives: ---- 3 Events: <none>
yaml で確認
$ kubectl get configmap game-config-env-file -o yaml apiVersion: v1 data: allowed: '"true"' enemies: aliens lives: "3" kind: ConfigMap metadata: creationTimestamp: "2019-02-28T11:06:54Z" name: game-config-env-file namespace: default resourceVersion: "1816425" selfLink: /api/v1/namespaces/default/configmaps/game-config-env-file uid: f4eb52db-3b48-11e9-b688-9ca3ba319985
configmap 削除するなら。
kubectl delete configmap game-config-env-file
pod の環境変数に envFrom でConfigMapデータを設定
envファイル:game-config-env-file の内容すべてを環境変数に設定。やらなかったけどprefixフィルタできるそうだ。
envfrom-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: envfrom-pod
spec:
containers:
- name: nginx
image: nginx
envFrom:
- configMapRef:
name: game-config-env-file
pod 作ったり、確認したり、削除したり。。。
kubectl apply -f envfrom-pod kubectl describe -f envfrom-pod.yaml kubectl delete -f envfrom-pod.yaml
環境変数を確認
$ kubectl exec envfrom-pod env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=envfrom-pod allowed="true" enemies=aliens lives=3 :
■ pod の環境変数に env でConfigMapデータを設定
env は環境変数を1コずつ指定するやり方。マニフェストに記述した値を環境変数に設定したり、configmap の値を環境変数に設定したり。
env-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: env-pod
spec:
containers:
- name: nginx
image: nginx
env:
# マニフェストに記述した値を環境変数に設定
- name: ENV_X
value: env_x_value
# configmap の値を環境変数に設定
- name: ENV_Y
valueFrom:
configMapKeyRef:
name: game-config-env-file
key: allowed
pod 作ったり、確認したり、削除したり。。。
kubectl apply -f env-pod.yaml kubectl describe -f env-pod.yaml kubectl delete -f env-pod.yaml
環境変数を確認
$ kubectl exec env-pod env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=env-pod ENV_X=env_x_value ENV_Y="true" :