kubernetes configmap类型卷

涉及文档

简介:
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到健值对中。使用时可以用作环境变量、命令行参数或者存储卷中的配置文件

一、查看帮助命令

 kubectl  create  cm -h

在这里插入图片描述

二、目录形式创建cm

1、创建目录

mkdir -p /root/kubernetes/configmap/dir

2、生成2个文件

cd   /root/kubernetes/configmap/dir
echo  "ConfigMap 是一种 API 对象,用来将非机密性的数据保存到健值对中。使用时可以用作环境变量、命令行参数或者存储卷中的配置文件。" > configmapdir1  
echo  "ConfigMap 将您的环境配置信息和 容器镜像 解耦,便于应用配置的修改。当您需要储存机密信息时可以使用 Secret 对象。">configmapdir2

3、以目录形式创建cm

kubectl create configmap dir-cm \
--from-file=/root/kubernetes/configmap/dir/

4、查看信息

  • 方式一
kubectl get cm  dir-cm -o yaml

在这里插入图片描述

  • 方法二:
kubectl  describe cm   dir-cm

在这里插入图片描述

三、以文件形式创建cm

1、创建目录并且复制之前的两个到当前文件中

mkdir -p /root/kubernetes/configmap/txt && cp  ../dir/*  ./

2、生成cm文件

kubectl create configmap txt-config \
--from-file=/root/kubernetes/configmap/txt/configmapdir1  \
--from-file=/root/kubernetes/configmap/txt/configmapdir2

3、查看信息

  • 方式一
kubectl get cm  txt-config -o yaml

在这里插入图片描述

  • 方法二:
kubectl  describe cm  txt-config

在这里插入图片描述

四、以字面形式创建cm

1、生成cm文件

kubectl create configmap  write-config \
--from-literal=yeal=2020/08/22  \
--from-literal=time=22:30:37

2、查看信息

  • 方式一
kubectl get cm  write-config -o yaml

在这里插入图片描述

  • 方法二:
kubectl  describe cm   write-config 

在这里插入图片描述

五、注入环境变量方式挂载cm

1、创建yaml文件

vim envcm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: log-info
  namespace: default
data:
  log_level: INFO
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cmenv
  name: cmenv
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cmenv
  template:
    metadata:
      labels:
        app: cmenv
    spec:
      containers:
      - image: nginx
        name: nginx
        #command: [ "/bin/sh", "-c", "env" ]
        env:	#注入环境变量
        - name: YEAR_KEY   #环境变量名称
          valueFrom:
            configMapKeyRef:
              name: write-config	#注入cm名为write-config
              key: yeal		#cm名为write-config中key为yeal的值
        - name: TIME_KEY
          valueFrom:
            configMapKeyRef:
              name: write-config	#注入cm名为write-config
              key: time		#cm名为write-config中key为year的值
        envFrom:
        - configMapRef:
            name: log-info   #挂载cm名为log-info 

2、生成pod

 kubectl apply  -f  envcm.yaml

3、查看pod信息是否注入成功

格式:

  • 方式一(一个Pod存在多镜像情况)
kubectl   exec  -it  pod名称   -c  containers名称  env    
  • 方式二(常用)
kubectl   exec  -it  cmenv-644ccf94fc-cbvx7   -c  nginx env

在这里插入图片描述

  • 方式三:
 kubectl   exec  -it  cmenv-644ccf94fc-cbvx7   --   env

在这里插入图片描述

六、volumes挂载形式将cm挂载

1、生成volume格式的yaml文件

vim volumescm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cmvolume
  name: cmvolume
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cmvolume
  template:
    metadata:
      labels:
        app: cmvolume
    spec:
      containers:
      - image: nginx
        name: cmvolume
        #command: ["/bin/sh","-c","cat /etc/config/"]
        volumeMounts:
        - name: config-volume
          mountPath: /etc/config    #如果目录不存在则创建
          readOnly: true
      volumes:
      - name: config-volume
        configMap:
          name:  log-info

2、生成volume形式挂载pod

kubectl apply  -f volumescm.yaml

在这里插入图片描述

3、查看信息

kubectl exec -it  cmvolume-56bc686988-b8h7k --  ls /etc/config
 kubectl exec  cmvolume-56bc686988-b8h7k    --  cat /etc/config/log_level

在这里插入图片描述
注意: 上面值获取到日志级别为INFO,后期实验有用

七、将 ConfigMap 数据添加到数据卷中的特定路径

使用 path 字段为特定的 ConfigMap 项目指定预期的文件路径,path 必须是相对路径

kubectl  explain   Deployment.spec.template.spec.volumes.configMap.items.path

1、新建Pod资源的yaml文件

vim volumescm2.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: log-info
data:
  nginx.conf: |
    user  nginx;
    worker_processes  4;
    worker_rlimit_nofile 48127;
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    events {
        multi_accept        on;
        worker_connections  16384;
        use                 epoll;
    }
    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;
        server {
          listen       80;
          server_name  localhost;
          location / {
              root   /usr/share/nginx/html;
              index  index.html index.htm;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
          location /nginx_status {
              #allow 127.0.0.1;
              #deny all;
              access_log off;
              stub_status on;
          }
        }
    }
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cmvolume
  name: cmvolume
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cmvolume
  template:
    metadata:
      labels:
        app: cmvolume
    spec:
      containers:
      - image: nginx
        name: cmvolume
        #command: ["/bin/sh","-c","cat /etc/config/"]
        volumeMounts:
        - name: config-volume
          mountPath: /etc/nginx
      volumes:
      - name: config-volume
        configMap:
          name:  log-info
          items:
          - key: nginx.conf
            path: /etc/nginx/nginx.conf

2、资源生成Pod

kubectl  apply -f volumescm2.yaml

在这里插入图片描述

3、更新Pod资源的yaml文件

vim volumescm2.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: log-info
data:
  nginx.conf: |
    user  nginx;
    worker_processes  4;
    worker_rlimit_nofile 48127;
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    events {
        multi_accept        on;
        worker_connections  16384;
        use                 epoll;
    }
    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;
        server {
          listen       80;
          server_name  localhost;
          location / {
              root   /usr/share/nginx/html;
              index  index.html index.htm;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
          location /nginx_status {
              #allow 127.0.0.1;
              #deny all;
              access_log off;
              stub_status on;
          }
        }
    }
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cmvolume
  name: cmvolume
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cmvolume
  template:
    metadata:
      labels:
        app: cmvolume
    spec:
      containers:
      - image: nginx
        name: cmvolume
        #command: ["/bin/sh","-c","cat /etc/config/"]
        volumeMounts:
        - name: config-volume
          mountPath: /etc/nginx
      volumes:
      - name: config-volume
        configMap:
          name:  log-info
          items:
          - key: nginx.conf
            path: etc/nginx/nginx.conf
  • 再次更新Yaml文件
kubectl  apply -f volumescm2.yaml

在这里插入图片描述

4、再次更新Pod资源的yaml文件

vim volumescm2.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: log-info
data:
  nginx.conf: |
    user  nginx;
    worker_processes  4;
    worker_rlimit_nofile 48127;
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    events {
        multi_accept        on;
        worker_connections  16384;
        use                 epoll;
    }
    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;
        server {
          listen       80;
          server_name  localhost;
          location / {
              root   /usr/share/nginx/html;
              index  index.html index.htm;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
          location /nginx_status {
              #allow 127.0.0.1;
              #deny all;
              access_log off;
              stub_status on;
          }
        }
    }
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cmvolume
  name: cmvolume
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cmvolume
  template:
    metadata:
      labels:
        app: cmvolume
    spec:
      containers:
      - image: nginx
        name: cmvolume
        #command: ["/bin/sh","-c","cat /etc/config/"]
        volumeMounts:
        - name: config-volume
          mountPath: /etc/nginx
      volumes:
      - name: config-volume
        configMap:
          name:  log-info
          items:
          - key: nginx.conf
            path: nginx.conf

5、再次更新Pod资源

kubectl  apply -f volumescm2.yaml

在这里插入图片描述
对此接下来实验会使用到subPath 挂载参数解决这个现象(把文件挂载在已存在的目录下,不覆盖原目录),但是使用subPath 无法进行configmap热更新。

八、configmap热更新

涉及实验, 1、configmap热更新 2、subPath 作为configmap 的数据卷,nginx配置更新

  • 实验一:

1、cmvolume pod 热更新

 kubectl edit   cm  log-info

原数据:
在这里插入图片描述

2、更新数据:

在这里插入图片描述
修改成功:
在这里插入图片描述

3、 再次查看信息:

 kubectl exec  cmvolume-56bc686988-b8h7k    --  cat /etc/config/log_level

在这里插入图片描述

  • 实验二:
    使用 ConfigMap 作为 subPath 的数据卷将不会收到 ConfigMap 更新

1、更新Pod资源的yaml文件

vim volumescm2.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: log-info
data:
  nginx.conf: |
    user  nginx;
    worker_processes  4;
    worker_rlimit_nofile 48127;
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    events {
        multi_accept        on;
        worker_connections  16384;
        use                 epoll;
    }
    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;
        server {
          listen       80;
          server_name  localhost;
          location / {
              root   /usr/share/nginx/html;
              index  index.html index.htm;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
          location /nginx_status {
              #allow 127.0.0.1;
              #deny all;
              access_log off;
              stub_status on;
          }
        }
    }
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cmvolume
  name: cmvolume
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cmvolume
  template:
    metadata:
      labels:
        app: cmvolume
    spec:
      containers:
      - image: nginx
        name: cmvolume
        #command: ["/bin/sh","-c","cat /etc/config/"]
        volumeMounts:
        - name: config-volume
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
      volumes:
      - name: config-volume
        configMap:
          name:  log-info
          items:
          - key: nginx.conf
            path: nginx.conf

2、再次更新Pod资源

kubectl  apply -f volumescm2.yaml

在这里插入图片描述

3、再更新Pod资源的yaml文件( 查看ConfigMap是否受到subPath 影响热更新)

cat volumescm2.yaml  -n |head -n 50

在这里插入图片描述

4、重新再次更新Pod资源

kubectl apply  -f volumescm2.yaml

在这里插入图片描述

5、查看Pod是否热更新

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值