kubernetes 学習 configmap
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" :