このセクションでは、ConfigMap リソースを Pod 内のコンテナーに環境変数を使って渡す方法について紹介します。
まず、ConfigMap リソースのサンプルマニフェストを作成します。ここでは、以下のような マニフェストを作成しています。
[root@kube-master sample-configmap]# cat sample3-configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: sample3-configmap data: thread: "16" connection.max: "100" connection.min: "10" sample.properties: | property.1=value-1 property.2=value-2 property.3=value-3 nginx.conf: | user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; } [root@kube-master sample-configmap]#
Master サーバーから Kubernetes クラスタ上に ConfigMap リソースを作成します。
[root@kube-master sample-configmap]# kubectl apply -f sample3-configmap.yaml configmap/sample3-configmap created [root@kube-master sample-configmap]#
ConfigMap 情報を一つずつ環境変数に渡す場合
サンプルのマニフェストファイルを新規作成し、以下コードを記述します。
[root@kube-master sample-configmap]# vi sample-configmap-env.yaml
spec の containers の env に ConfigMap リソースからコンテナーに渡す環境変数を指定します。ここでは、sample3-configmap の ConfigMap リソースに登録されている connection.max をコンテナーの環境変数に登録するようにしています。
apiVersion: v1 kind: Pod metadata: name: sample-configmap-env spec: containers: - name: configmap-container image: nginx:1.12 env: - name: CONNECTION_MAX valueFrom: configMapKeyRef: name: sample3-configmap key: connection.max
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。
[root@kube-master sample-configmap]# kubectl apply -f sample-configmap-env.yaml pod/sample-configmap-env created [root@kube-master sample-configmap]#
Master サーバーから Kubernetes クラスタ上の Pod リソースを確認します。
[root@kube-master sample-configmap]# kubectl get pod sample-configmap-env NAME READY STATUS RESTARTS AGE sample-configmap-env 1/1 Running 0 4s [root@kube-master sample-configmap]#
Master サーバーから Pod( sample-configmap-env )内の CONNECTION_MAX 環境変数を確認します。ここでは、ConfigMap リソースの connection.max に定義されている 情報が環境変数として登録されていることが確認できます。
[root@kube-master sample-configmap]# kubectl exec -it sample-configmap-env env | grep CONNECTION_MAX CONNECTION_MAX=100 [root@kube-master sample-configmap]#
ConfigMap 情報を全て環境変数に渡す場合
サンプルのマニフェストファイルを新規作成し、以下コードを記述します。
[root@kube-master sample-configmap]# vi sample-configmap-multi-env.yaml
spec の containers の envFrom に ConfigMap リソースを指定します。ここでは、ConfigMap リソースに sample3-configmap を指定しています。
apiVersion: v1 kind: Pod metadata: name: sample-configmap-multi-env spec: containers: - name: configmap-container image: nginx:1.12 envFrom: - configMapRef: name: sample3-configmap
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。
[root@kube-master sample-configmap]# kubectl apply -f sample-configmap-multi-env.yaml pod/sample-configmap-multi-env created [root@kube-master sample-configmap]#
Master サーバーから Kubernetes クラスタ上の Pod リソースを確認します。
[root@kube-master sample-configmap]# kubectl get pod sample-configmap-multi-env NAME READY STATUS RESTARTS AGE sample-configmap-multi-env 1/1 Running 0 22s [root@kube-master sample-configmap]#
Master サーバーから Pod( sample-configmap-multi-env )内の 環境変数を確認します。ここでは、ConfigMap リソースの情報が環境変数として登録されていることが確認できます。
[root@kube-master sample-configmap]# kubectl exec -it sample-configmap-multi-env env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=sample-configmap-multi-env TERM=xterm connection.max=100 connection.min=10 nginx.conf=user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; } sample.properties=property.1=value-1 property.2=value-2 property.3=value-3 thread=16 KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 KUBERNETES_SERVICE_HOST=10.96.0.1 KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 KUBERNETES_PORT=tcp://10.96.0.1:443 KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_PORT_443_TCP_PORT=443 NGINX_VERSION=1.12.2-1~stretch NJS_VERSION=1.12.2.0.1.14-1~stretch HOME=/root [root@kube-master sample-configmap]#