このセクションでは、設定情報などのデータを保存しておく ConfigMap リソースの作成について紹介します。 機密情報が含まれるデータは Secret リソースを使用し、機密情報の含まれたないデータは ConfigMap リソースが使用されます。

ファイルから値を参照し作成する場合( – – from-file )

参照するファイルを準備します。ここでは、nginx.conf ファイルを準備し ています。

[root@kube-master sample-configmap]# ls -la
合計 12
drwxr-xr-x.  2 root root   47  2月  3 19:46 .
drwxr-xr-x. 18 root root 4096  2月  3 19:45 ..
-rw-r--r--.  1 root root  643  2月  3 19:39 nginx.conf
[root@kube-master sample-configmap]# 

Master サーバーから nginx.conf ファイルから値を参照した ConfigMap リソースを作成します。

[root@kube-master sample-configmap]# kubectl create configmap --save-config sample-configmap --from-file nginx.conf 
configmap/sample-configmap created
[root@kube-master sample-configmap]# 

Master サーバーから Kubernetes クラスタ上に作成した ConfigMap リソースを確認します。 sample-configmap リソースが作成されていることが確認できます。

[root@kube-master sample-configmap]# kubectl get configmap
NAME               DATA   AGE
sample-configmap   1      24s
[root@kube-master sample-configmap]# 

Master サーバーから Kubernetes クラスタ上で作成した ConfigMap リソースの情報を yaml 形式で出力します。nginx.conf ファイルに記載されている値が読み込まれていることが確認できます。

[root@kube-master sample-configmap]# kubectl get configmap sample-configmap -o yaml
apiVersion: v1
data:
  nginx.conf: |2

    user  nginx;
    worker_processes  1;

    error_log  /var/log/nginx/error.log warn;
    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;
    }
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"kind":"ConfigMap","apiVersion":"v1","metadata":{"name":"sample-configmap","creationTimestamp":null},"data":{"nginx.conf":"\nuser  nginx;\nworker_processes  1;\n\nerror_log  /var/log/nginx/error.log warn;\npid        /var/run/nginx.pid;\n\n\nevents {\n    worker_connections  1024;\n}\n\n\nhttp {\n    include       /etc/nginx/mime.types;\n    default_type  application/octet-stream;\n\n    log_format  main  '$remote_addr - $remote_user [$time_local] \"$request\" '\n                      '$status $body_bytes_sent \"$http_referer\" '\n                      '\"$http_user_agent\" \"$http_x_forwarded_for\"';\n\n    access_log  /var/log/nginx/access.log  main;\n\n    sendfile        on;\n    #tcp_nopush     on;\n\n    keepalive_timeout  65;\n\n    #gzip  on;\n\n    include /etc/nginx/conf.d/*.conf;\n}\n"}}
  creationTimestamp: "2019-02-03T11:45:03Z"
  name: sample-configmap
  namespace: default
  resourceVersion: "3561261"
  selfLink: /api/v1/namespaces/default/configmaps/sample-configmap
  uid: 252ba12e-27a9-11e9-94ad-525400bc2a02
[root@kube-master sample-configmap]# 

kubectl で直接値を渡す場合( – – from-literal )

ファイルを参照して値を読み込ませるのではなく、kubectl を使って直接渡すこともできます。 Master サーバーから kubectl を使って直接値を渡すには、以下のようなコマンドを実行します。

kubectl create configmap --save-config sample2-configmap \
  --from-literal=user=nagin \
  --from-literal=worker_processes=1 \
  --from-literal=error_log=/var/log/nginx/error.log
configmap/sample2-configmap created
[root@kube-master sample-configmap]# 

Master サーバーから Kubernetes クラスタ上に作成した ConfigMap リソースを確認します。 sample2-configmap リソースが作成されていることが確認できます。

[root@kube-master sample-configmap]# kubectl get configmap
NAME                DATA   AGE
sample-configmap    1      20m
sample2-configmap   3      44s
[root@kube-master sample-configmap]# 

Master サーバーから Kubernetes クラスタ上で作成した ConfigMap リソースの情報を yaml 形式で出力します。kubectl で直接渡した値が読み込まれていることが確認できます。

[root@kube-master sample-configmap]# kubectl get configmap sample2-configmap -o yamlapiVersion: v1
data:
  error_log: /var/log/nginx/error.log
  user: nagin
  worker_processes: "1"
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"kind":"ConfigMap","apiVersion":"v1","metadata":{"name":"sample2-configmap","creationTimestamp":null},"data":{"error_log":"/var/log/nginx/error.log","user":"nagin","worker_processes":"1"}}
  creationTimestamp: "2019-02-03T12:04:51Z"
  name: sample2-configmap
  namespace: default
  resourceVersion: "3562931"
  selfLink: /api/v1/namespaces/default/configmaps/sample2-configmap
  uid: e90fe466-27ab-11e9-94ad-525400bc2a02
[root@kube-master sample-configmap]# 

マニフェストから作成する場合

サンプルのマニフェストファイルを新規作成し、以下コードを記述します。

[root@kube-master sample-configmap]# vi sampled3-configmap.yaml

data に渡す値を記述します。Value が複数行に渡る場合は、YAML のブロックスタイルの文法に従って「 Key: | 」などのようにして次の行から定義します。また、数値に関してはダブルクォート(” “)で囲うようにします。

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;
    }

Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。

[root@kube-master sample-configmap]# kubectl apply -f sample3-configmap.yaml 
configmap/sample-configmap configured
[root@kube-master sample-configmap]# 

Master サーバーから Kubernetes クラスタ上に作成した ConfigMap リソースを確認します。 sample3-configmap リソースが作成されていることが確認できます。

[root@kube-master sample-configmap]# kubectl get configmap
NAME                DATA   AGE
sample-configmap    5      61m
sample2-configmap   3      41m
sample3-configmap   5      4s
[root@kube-master sample-configmap]#

Master サーバーから Kubernetes クラスタ上で作成した ConfigMap リソースの情報を yaml 形式で出力します。マニフェストから渡した値が読み込まれていることが確認できます。

[root@kube-master sample-configmap]# kubectl get configmap sample3-configmap -o yaml
apiVersion: v1
data:
  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"
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"connection.max":"100","connection.min":"10","nginx.conf":"user nginx;\nworker_processes auto;\nerror_log  /var/log/nginx/error.log;\npid        /var/run/nginx.pid;\nevents {\n    worker_connections  1024;\n}\n\nhttp {\n    include       /etc/nginx/mime.types;\n    default_type  application/octet-stream;\n\n    log_format  main  '$remote_addr - $remote_user [$time_local] \"$request\" '\n                      '$status $body_bytes_sent \"$http_referer\" '\n                      '\"$http_user_agent\" \"$http_x_forwarded_for\"';\n\n    access_log  /var/log/nginx/access.log  main;\n\n    sendfile        on;\n    #tcp_nopush     on;\n    keepalive_timeout  65;\n    #gzip  on;\n    include /etc/nginx/conf.d/*.conf;\n}\n","sample.properties":"property.1=value-1\nproperty.2=value-2\nproperty.3=value-3\n","thread":"16"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"sample3-configmap","namespace":"default"}}
  creationTimestamp: "2019-02-03T12:46:16Z"
  name: sample3-configmap
  namespace: default
  resourceVersion: "3566424"
  selfLink: /api/v1/namespaces/default/configmaps/sample3-configmap
  uid: b2424adf-27b1-11e9-94ad-525400bc2a02
[root@kube-master sample-configmap]# 

Master サーバーから Kubernetes クラスタ上に作成した ConfigMap リソースを削除します。

[root@kube-master sample-configmap]# kubectl delete configmap sample-configmap sample2-configmap sample3-configmap
configmap "sample-configmap" deleted
configmap "sample2-configmap" deleted
configmap "sample3-configmap" deleted
[root@kube-master sample-configmap]# 

Master サーバーから Kubernetes クラスタ上の ConfigMap リソースが削除されていることを確認します。

[root@kube-master sample-configmap]# kubectl get configmap sample-configmap sample2-configmap sample3-configmap
Error from server (NotFound): configmaps "sample-configmap" not found
Error from server (NotFound): configmaps "sample2-configmap" not found
Error from server (NotFound): configmaps "sample3-configmap" not found
[root@kube-master sample-configmap]#