このセクションでは、ConfigMap リソースの情報を Pod 内コンテナーの ボリューム( Volume )としてマウントし渡す方法について紹介します。
まず、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 情報を一つずつVolume にマウントして渡す場合
サンプルのマニフェストファイルを新規作成し、以下コードを記述します。
[root@kube-master sample-configmap]# vi sample-configmap-single-volume.yaml
spec の containers の volumeMounts にコンテナー上のボリュームをマウントするパスを指定します。 spec の volumes に指定したパスにマウント情報を指定します。ここでは、ConfigMap( sample3-cofigmap )リソースにある nginx.conf 情報を /config/ ディレクトリに nginx-sample.conf として登録する指定をしています。
apiVersion: v1 kind: Pod metadata: name: sample-configmap-single-volume spec: containers: - name: configmap-container image: nginx:1.12 volumeMounts: - name: config-volume mountPath: /config volumes: - name: config-volume configMap: name: sample3-configmap items: - key: nginx.conf path: nginx-sample.conf
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。
[root@kube-master sample-configmap]# kubectl apply -f sample-configmap-single-volume.yaml pod/sample-configmap-single-volume created [root@kube-master sample-configmap]#
Master サーバーから Kubernetes クラスタ上の Pod リソースを確認します。
[root@kube-master sample-configmap]# kubectl get pod sample-configmap-single-volume NAME READY STATUS RESTARTS AGE sample-configmap-single-volume 1/1 Running 0 10s [root@kube-master sample-configmap]#
Master サーバーから Pod( sample-configmap-single-volume )内 の /config/nginx-sample.conf に登録されている情報を確認します。ここでは、ConfigMap リソースの nginx.conf に定義されている 情報が nginx-sample.conf に登録されていることが確認できます。
[root@kube-master sample-configmap]# kubectl exec -it sample-configmap-single-volume cat /config/nginx-sample.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]#
ConfigMap 情報を全て Volume にマウントして渡す場合
サンプルのマニフェストファイルを新規作成し、以下コードを記述します。
[root@kube-master sample-configmap]# vi sample-configmap-all-volume.yaml
spec の containers の volumeMounts にコンテナー上のボリュームをマウントするパスを指定します。 spec の volumes に指定したパスにマウント情報を指定します。ここでは、ConfigMap( sample3-configmap )リソースにある 全ての情報( connection.max、 connection.min、 nginx.conf、 sample.properties、thread )を /config/ ディレクトリに登録する指定をしています。
apiVersion: v1 kind: Pod metadata: name: sample-configmap-single-volume spec: containers: - name: configmap-container image: nginx:1.12 volumeMounts: - name: config-volume mountPath: /config volumes: - name: config-volume configMap: name: sample3-configmap
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。
[root@kube-master sample-configmap]# kubectl apply -f sample-configmap-all-volume.yaml pod/sample-configmap-all-volume created [root@kube-master sample-configmap]#
Master サーバーから Kubernetes クラスタ上の Pod リソースを確認します。
[root@kube-master sample-configmap]# kubectl get pod sample-configmap-all-volume NAME READY STATUS RESTARTS AGE sample-configmap-all-volume 1/1 Running 0 11s [root@kube-master sample-configmap]#
Master サーバーから Pod( sample-configmap-all-volume )内 の /config/ ディレクトリを参照します。ここでは、/config/ ディレクトリに connection.max、 connection.min、 nginx.conf、 sample.properties、thread ファイルが確認できます。
[root@kube-master sample-configmap]# kubectl exec -it sample-configmap-all-volume ls /configconnection.max connection.min nginx.conf sample.properties thread [root@kube-master sample-configmap]#
Master サーバーから Pod( sample-configmap-all-volume )内 の /config/ ディレクトリにあるファイルの確認します。ここでは、ConfigMap リソースの情報がそれぞれのファイルに登録されていることが確認できます。
[root@kube-master sample-configmap]# kubectl exec -it sample-configmap-all-volume cat /config/connection.max 100 [root@kube-master sample-configmap]# [root@kube-master sample-configmap]# kubectl exec -it sample-configmap-all-volume cat /config/connection.min 10 [root@kube-master sample-configmap]# [root@kube-master sample-configmap]# kubectl exec -it sample-configmap-all-volume cat /config/sample.properties property.1=value-1 property.2=value-2 property.3=value-3 [root@kube-master sample-configmap]#
Master サーバーから 作成したKubernetes クラスタ上の ConfigMap と Pod リソースを全て削除します。
[root@kube-master sample-configmap]# kubectl delete configmap sample3-configmap configmap "sample3-configmap" deleted [root@kube-master sample-configmap]# [root@kube-master sample-configmap]# kubectl delete pod sample-configmap-single-volume sample-configmap-all-volume pod "sample-configmap-single-volume" deleted pod "sample-configmap-all-volume" deleted [root@kube-master sample-configmap]#