k8s(8)—— k8s存储之ConfigMap

目录

一、ConfigMap简介

  • 1、ConfigMap的概念 

二、Cofigmap配置管理

创建Cofigmap的方式有4种

  •   1、使用字面值创建
  •   2、使用文件进行创建
  •   3、使用目录进行创建
  •   4、编写cofigmap的yaml文件年创建

三、使用configmap设置环境变量

(一)、方法一:

  • 1、创建yaml文件
  • 2、查看更新的情况

(二)、方法二:

  • 1、修改yaml文件的配置内容
  • 2、测试

(三)、直接指定答应的key对应的值

  • 1、修改yaml文件
  • 2、测试

(四)通过数据卷使用configmap

  • 1、查看官网信息
  • 2、创建yaml文件

四、configmap热更新

(一)、热更新的验证

1、创建yaml文件

2、修改文件cm4-config文件的内容查看更新

(二)、configmap热更新后,并不会触发相关的pod的滚动更新,需要手动触发:

1、创建nginx.conf文件  nginx端口服务的文件

2、以nginx.config 来创建configmap

3、要使yaml文件生效改变 pod的更新需要手动更新

一、ConfigMap简介

  • 1、ConfigMap的概念 

ConfigMap 资源提供了向 Pod 注入配置数据的方法。 ConfigMap 对象中存储的数据可以被 configMap 类型的卷引用,然后被应用到 Pod 中运行的容器化应用。

当引用 configMap 对象时,你可以简单的在 Volume 中通过它名称来引用。 还可以自定义 ConfigMap 中特定条目所要使用的路径。 例如,要将名为 log-config 的 ConfigMap 挂载到名为 configmap-pod 的 Pod 中

 cofigmap 配置管理
Cofigmap由于保存配置数据,以键值对形式存储
Cofigmap资源提供了向Pod注入配置数据的方式
旨在让镜像和配置年文件解析藕,以便实现景象的可移植性和可复制性
典型的使用场所:
   填充环境变量的值
   设置容器内的命令行的参数
   填充卷的配置文件

官网信息:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/

 

一、Cofigmap配置管理

创建Cofigmap的方式有4种

  •   1、使用字面值创建
  •   2、使用文件进行创建
  •   3、使用目录进行创建
  •   4、编写cofigmap的yaml文件年创建

1、使用字面创建

[kubeadm@server1 ~]$ mkdir configmap     ##创建目录(创建的目录是为了区分其他的实验)
[kubeadm@server1 ~]$
[kubeadm@server1 ~]$ cd configmap/
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl create configmap cm1-config --from-literal=key1=config1 --from-literal=key2=config2                             ##创建configmap
configmap/cm1-config created
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl get cm           ##查看是否创建成功
NAME         DATA   AGE
cm1-config   2      12s

1.2、查看是生成的configmap文件信息 


[kubeadm@server1 configmap]$ kubectl describe cm cm1-config        ##查看创建的日志

Name:         cm1-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
key1:               ##键值 
----  
config1              ##键值对应的值
key2:
----
config2
Events:  <none>
[kubeadm@server1 configmap]$



2、使用文件创建

kubeadm@server1 configmap]$ kubectl create configmap my-config-2 --from-file=/etc/resolv.conf   ##使用/etc/resolv.conf 文件进行创建
configmap/my-config-2 created
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl describe cm my-config-2             ##查看创建的结果的
Name:         my-config-2
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
resolv.conf:                                                             ##键值
----

nameserver 114.114.114.114                                               ##对应的内容

Events:  <none>
[kubeadm@server1 configmap]$


3、使用目录创建

目录中文件名为key,文件的内容为value

[kubeadm@server1 configmap]$ cp /etc/passwd .            ##将文件拷贝到当前目录下
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ ls
passwd  resolv.conf
[kubeadm@server1 configmap]$ cp /etc/fstab .             ##拷贝fstab到当前的目录下
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ ls
fstab  passwd  resolv.conf
[kubeadm@server1 configmap]$ kubectl create configmap cm3-config --from-file=.     ##以当前的目录中的文件创建configmap
configmap/cm3-config created
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl describe cm cm3-config                        ##查看cm3的创建信息
Name:         cm3-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
fstab:
----

#
# /etc/fstab
# Created by anaconda on Tue Dec 17 20:27:01 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=66383b38-e7f8-4146-9002-9f37c9251ffd /boot                   xfs     defaults        0 0
#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0

passwd:
----
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

----

nameserver 114.114.114.114

Events:  <none>

4、编写cofigmap的yaml文件年创建

4.1、配置ConfigMap的yaml文件

[kubeadm@server1 configmap]$ vim cm1.yaml
[kubeadm@server1 configmap]$ vim cm1.yaml
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl create -f cm1.yaml        ##创建ConfigMap文件
^[[3~configmap/cm4-config created
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl get cm                    ##查看创建的cm
NAME         DATA   AGE
cm1-config   2      <invalid>
cm2-config   1      41m
cm3-config   3      38m
cm4-config   2      14s
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl describe cm cm4-config   ##查看创建的日信息
Name:         cm4-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
db_host:
----
172.25.6.250                                                 ##创建对应的键值
db_port:
----
3306                                                         ##创建对应的value值
Events:  <none>
[kubeadm@server1 configmap]$

4.2、测试


三、使用configmap设置环境变量

(一)、方法一:

  • 1、创建yaml文件
  • 2、查看更新的情况

(二)、方法二:

  • 1、修改yaml文件的配置内容
  • 2、测试

(三)、直接指定答应的key对应的值

  • 1、修改yaml文件
  • 2、测试

(四)通过数据卷使用configmap

  • 1、查看官网信息
  • 2、创建yaml文件

(一)、方法一一一导入环境变量

(二)、批量导入环境变量

(三)、直接导入指定的环境变量

  通过环境变量的方式直接转递给pod
  通过在pod的命令行下运行的方式
  作为volume的方式挂载到pod内
 


(一)、方法一:

  • 1、创建yaml文件
  • 2、查看更新的情况

1、创建yaml文件

指导入yaml文件中指定的key值

kubeadm@server1 configmap]$ vim cm2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
    - name: pod1
      image: busybox
      command: [ "/bin/sh", "-c", "env" ]           ##运行完后直接打印变量
      env:                                          ##环境变量
        - name: key1                                ##key1等于cmc4-confing中取的db_host对应的值
          valueFrom:
            configMapKeyRef:                        ##从configMapKeyRef中去取值
              name: cm4-config                      ##取值的服务对象
              key: db_host                          ##在cmc4-confing中取的值对应的key值
        - name: key2
          valueFrom:
            configMapKeyRef:
              name: cm4-config
              key: db_port
  restartPolicy: Never                              ##不用去重启pod

                                       
 

1.2、测试:

[kubeadm@server1 configmap]$ kubectl create -f cm2.yaml
pod/pod1 created
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl get pod
NAME   READY   STATUS              RESTARTS   AGE
pod1   0/1     ContainerCreating   0          5s


[kubeadm@server1 configmap]$ kubectl get pod
NAME   READY   STATUS      RESTARTS   AGE
pod1   0/1     Completed   0          21s


[kubeadm@server1 configmap]$ kubectl describe cm cm4-config     
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data                                          ##cm-configmap上的内容
====
db_host:
----
172.25.6.250
db_port:
----
3306
Events:  <none>

1.3、查看pod1的日志

[kubeadm@server1 configmap]$ kubectl logs pod1
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=pod1
SHLVL=1
HOME=/root
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
key1=172.25.6.250                                         ##对应文件中的内容
KUBERNETES_PORT_443_TCP_PROTO=tcp
key2=3306                                                 ##对应的是文件中cm4-config中的值已经被注入po1容器内
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/


 

2、查看更新的情况

修改cm4-config中都内容


[kubeadm@server1 configmap]$ kubectl edit cm cm4-config        ##编辑cm4-config

加入:db_name: westos



2.2、查看更新的情况

[kubeadm@server1 configmap]$ kubectl describe cm cm4-config
Name:         cm4-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
db_host:
----
172.25.6.250
db_name:
----
westos                                 ##修改后的内容
db_port:
----
3306
Events:  <none>

(更新成功!!!)

(二)、方法二:

  • 1、修改yaml文件的配置内容
  • 2、测试

批量导入configmap文件中的多有参数:

将cm4-config文件中所有的值导出来

1、修改yaml文件的配置内容

[kubeadm@server1 configmap]$ vim env2-config.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
    - name: pod2
      image: busybox
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:                                    ##导入环境变量
        - configMapRef:
              name: cm4-config                    ##从cm4-config中导入环境变量
  restartPolicy: Never


[kubeadm@server1 configmap]$ kubectl get pod
NAME   READY   STATUS      RESTARTS   AGE
pod1   0/1     Completed   0          5h7m
pod2   0/1     Completed   0          90s         ##查看是否生效
[kubeadm@server1 configmap]$

2、测试:
在cm4-config中的所有值已经被导入到pod2中

[kubeadm@server1 configmap]$ kubectl logs pod2
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=pod2
SHLVL=1
db_port=3306
HOME=/root
db_name=westos
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
db_host=172.25.6.250
[kubeadm@server1 configmap]$

 

 

(三)、直接指定答应的key对应的值

  • 1、修改yaml文件
  • 2、测试

1、修改yaml文件

[kubeadm@server1 configmap]$ vim commad-config.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod3
spec:
  containers:
    - name: pod3
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(db_host) $(db_port)" ]   ##运行取db_host、db_port
      envFrom:                                                      ##导入环境变量
        - configMapRef:
              name: cm4-config                                      ##从cm4-config中导入环境变量
  restartPolicy: Never
~                                                                                                     


[kubeadm@server1 configmap]$ kubectl create -f commad-config.yaml
pod/pod3 created         ##创建

[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl get pod           ,         ##查看pod是否运行成功
NAME   READY   STATUS              RESTARTS   AGE
pod1   0/1     Completed           0          5h31m
pod2   0/1     Completed           0          25m
pod3   0/1     ContainerCreating   0          4s


2、测试:

(之间打印文件中对应的configmap中的所有值)

[kubeadm@server1 configmap]$ kubectl logs pod3          ##直接输入从cm4-config中提取的db_host、db_port的值的结果
172.25.6.250 3306


 

(四)通过数据卷使用configmap

  • 1、查看官网信息
  • 2、创建yaml文件

查看官网信息:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/

2、创建yaml文件

[kubeadm@server1 configmap]$ vim volume.config.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod4
spec:
  containers:
    - name: pod4
      image: busybox
      command: [ "/bin/sh", "-c", "cat /config/db_host" ]         ##在命令行中执行cat /config/db_host的命令
      volumeMounts:
      - name: config-volume
        mountPath: /config                                        ##挂接cm4-config到/config
  volumes:
    - name: config-volume
      configMap:                                                  ##要挂载的config-volume卷来自于special-config
        name: cm4-config
  restartPolicy: Never                                            ##不用重启


数据提取的过程直接把cm4-config 挂载到 /config下 然后提取db_host

2.2、创建configmap、查看是否创建成功

[kubeadm@server1 configmap]$ kubectl create -f volume.config.yaml       ##创建 
pod/pod4 created
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl get pod                            ##查看pod是否成功运行
NAME   READY   STATUS              RESTARTS   AGE
pod1   0/1     Completed           0          5h54m
pod2   0/1     Completed           0          48m
pod3   0/1     Completed           0          22m
pod4   0/1     ContainerCreating   0          9s
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl get pod
NAME   READY   STATUS      RESTARTS   AGE
pod1   0/1     Completed   0          5h54m
pod2   0/1     Completed   0          48m
pod3   0/1     Completed   0          23m
pod4   0/1     Completed   0          16s
[kubeadm@server1 configmap]$

2.3、测试:

[kubeadm@server1 configmap]$ kubectl logs pod4
172.25.6.250

四、configmap热更新

(一)、热更新的验证

  • 1、创建yaml文件
  • 2、修改文件cm4-config文件的内容查看更新

(二)、configmap热更新后,并不会触发相关的pod的滚动更新,需要手动触发:

  • 1、创建nginx.conf文件  nginx端口服务的文件
  • 2、以nginx.config 来创建configmap
  • 3、要使yaml文件生效改变 pod的更新需要手动更新

3、验证方法二:

[kubeadm@server1 configmap]$ kubectl delete -f volume.config.yaml
pod "pod4" deleted
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ vim volume.config.yaml

修改: command: [ "/bin/sh", "-c", "ls /config/" ]                 ##在命令行中执行列出/config下的目录

[kubeadm@server1 configmap]$ kubectl delete -f volume.config.yaml
pod "pod4" deleted
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ vim volume.config.yaml
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl create -f volume.config.yaml
pod/pod4 created
[kubeadm@server1 configmap]$ kubectl get pod
NAME   READY   STATUS      RESTARTS   AGE
pod1   0/1     Completed   0          6h1m
pod2   0/1     Completed   0          55m
pod3   0/1     Completed   0          29m
pod4   0/1     Completed   0          7s
[kubeadm@server1 configmap]$
​

[kubeadm@server1 configmap]$ kubectl logs pod4
db_host
db_name
db_port
[kubeadm@server1 configmap]$
​

3.2、测试:




4、验证方法三:

列出/config下所有目录的内容所有kry对应的值

[kubeadm@server1 configmap]$ vim volume.config.yaml
command: [ "/bin/sh", "-c", "cat /config/*" ]               ##在命令行中执行列出/config下所有目录的内容

4.2、测试:

[kubeadm@server1 configmap]$ kubectl logs pod4
172.25.6.250 westos 3306


 

四、configmap热更新

(一)、热更新的验证

1、创建yaml文件

2、修改文件cm4-config文件的内容查看更新

(二)、configmap热更新后,并不会触发相关的pod的滚动更新,需要手动触发:

1、创建nginx.conf文件  nginx端口服务的文件

2、以nginx.config 来创建configmap

3、要使yaml文件生效改变 pod的更新需要手动更新

一般都用在结点的热更新上

(一)、热更新的验证

1、创建yaml文件

[kubeadm@server1 configmap]$ vim hot-config.yaml
apiVersion: apps/v1                  ##控制器的版本
kind: Deployment                    ##控制器的类型
metadata:
  name: my-nginx            ##控制器的名称
spec:
  replicas: 1                ##副本数为1这些pod由集群自动取分配给哪个节点
  selector:
    matchLabels:
      app: nginx                     ##标签
  template:                          ##模板
    metadata:                        ##pod数据类型
      labels:
        app: nginx                   ##标签
    spec:
      containers:                    ##pod容器
      - name: nginx                  ##名称
        image: nginx             ##v2镜像(名称要和仓库里的镜像名称相同)
        ports:                       ##端口
        - containerPort: 80          ##监听的端口名称
        volumeMounts:
        - name: config-volume
          mountPath: /config                                        ##挂接cm4-config到/config
      volumes:
        - name: config-volume
          configMap:                                                  ##要挂载的config-volume卷来自于special-config
            name: cm4-config

 

1.2、创建并检查pod是否正常运行


[kubeadm@server1 configmap]$ kubectl create -f hot-config.yaml       ##创建
deployment.apps/my-nginx created


[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl get pod                         ##查看pod是否运行正常 
NAME                        READY   STATUS    RESTARTS   AGE
my-nginx-5ff649fc5b-c7zs9   1/1     Running   0          75s
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$

1.3、测试:

[kubeadm@server1 configmap]$ kubectl exec my-nginx-5ff649fc5b-c7zs9 ls /config    ##查看目录
db_host
db_name
db_port
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl exec my-nginx-5ff649fc5b-c7zs9 ls /config/db_port
/config/db_port
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl exec my-nginx-5ff649fc5b-c7zs9 cat  /config/db_port
3306            ##查看db_port的内容

2、修改文件cm4-config文件的内容查看更新

2.1、修改cm4-config中的内容

[kubeadm@server1 configmap]$ kubectl edit cm cm4-config
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  db_host: 172.25.6.250
  db_name: westos
  db_port: "8888"                                 ##把参数改为8888
kind: ConfigMap
metadata:
  creationTimestamp: "2020-03-05T03:14:23Z"
  name: cm4-config
  namespace: default
  resourceVersion: "1605475"
  selfLink: /api/v1/namespaces/default/configmaps/cm4-config
  uid: 17652f1d-d0d8-47e6-b28d-d94b65702505

2.2、测试:

查看更新的情况

(需要等待一些时间)

[kubeadm@server1 configmap]$ kubectl exec my-nginx-5ff649fc5b-c7zs9 cat  /config/db_port
8888                                                       ##参数已经改为8888


(二)、configmap热更新后,并不会触发相关的pod的滚动更新,需要手动触发:

1、创建nginx.conf文件  nginx端口服务的文件

2、以nginx.config 来创建configmap

3、要使yaml文件生效改变 pod的更新需要手动更新


热更新:
updata -> nginx.conf -> reload nginx (一般的更新过程)
文件更新
pod -> 运行command 中的命令 load nginx.conf -> memory(存放到我们的内存中)-> update nginx.conf -> trigger pod(触发文件更新) -> reload nginx

1、创建nginx.conf文件  nginx端口服务的文件


[kubeadm@server1 configmap]$ vim nginx.conf
server {
    listen      8000;                                ##修改nginx访问的配置文件 
    server_name _;

    location / {
        root /usr/share/nginx/html;
        index index.html index.html;
    }
}


 

1.2、拉取一个bash查看nginx的配置信息

~                                                                                                                      
[kubeadm@server1 configmap]$ kubectl exec my-nginx-5ff649fc5b-c7zs9 -it bash     ##进入配置文件的bash中
root@my-nginx-5ff649fc5b-c7zs9:/#
root@my-nginx-5ff649fc5b-c7zs9:/# cd /etc/nginx/
root@my-nginx-5ff649fc5b-c7zs9:/etc/nginx#
root@my-nginx-5ff649fc5b-c7zs9:/etc/nginx# ls
conf.d    fastcgi_params    koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params    uwsgi_params  win-utf
root@my-nginx-5ff649fc5b-c7zs9:/etc/nginx#
root@my-nginx-5ff649fc5b-c7zs9:/etc/nginx# cd conf.d/               ##端口文件存放的目录
root@my-nginx-5ff649fc5b-c7zs9:/etc/nginx/conf.d#
root@my-nginx-5ff649fc5b-c7zs9:/etc/nginx/conf.d# ls
default.conf
root@my-nginx-5ff649fc5b-c7zs9:/etc/nginx/conf.d# cat default.conf
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

root@my-nginx-5ff649fc5b-c7zs9:/etc/nginx/conf.d#

1.3、编辑yaml文件

[kubeadm@server1 configmap]$ vim hot-config.yaml
apiVersion: apps/v1                  ##控制器的版本确定
kind: Deployment                    ##控制器的类型
metadata:
  name: my-nginx            ##控制器的名称
spec:
  replicas: 1                ##副本数为1这些pod由集群自动取分配给哪个节点
  selector:
    matchLabels:
      app: nginx                     ##标签
  template:                          ##模板
    metadata:                        ##pod数据类型
      labels:
        app: nginx                   ##标签
    spec:
      containers:                    ##pod容器
      - name: nginx                  ##名称
        image: nginx             ##v2镜像(名称要和仓库里的镜像名称相同)
        volumeMounts:
        - name: config-volume
          mountPath: /etc/nginx/conf.d                                        ##nginx默认的端口存放的路径
      volumes:
        - name: config-volume
          configMap:                                                     ##要挂载的config-volume卷来自于special-config
            name: nginx-config                                   ##配置成功端口会成功的放在/etc/nginx/conf.d 之后


                                                                                                                                                                                                                                        

2、以nginx.config 来创建configmap

[kubeadm@server1 configmap]$ kubectl create configmap nginx.config --from-file=nginx.conf     ##通过文件的形式来创建configmap
configmap/nginx.conf created
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl get pod
No resources found in default namespace.
[kubeadm@server1 configmap]$
[kubeadm@server1 configmap]$ kubectl get cm
NAME         DATA   AGE
nginx.config   1      15s
[kubeadm@server1 configmap]$


2.2、查看创建的configmap的日志信息

[kubeadm@server1 configmap]$ kubectl describe cm nginx.config
Name:         nginx.conf
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
nginx.conf:                                   
----
server {
    listen      8000;
    server_name _;

    location / {
        root /usr/share/nginx/html;
        index index.html index.html;
    }
}

Events:  <none>
[kubeadm@server1 configmap]$

2.3、创建confgimap

[kubeadm@server1 configmap]$ kubectl create  -f hot-config.yaml
deployment.apps/my-nginx created
[kubeadm@server1 configmap]$



2.4、测试:

查看nginx.conf文件是否被放到 /etc/nginx/conf.d/路径下


[kubeadm@server1 configmap]$ kubectl exec my-nginx-7dc8d7b68d-cm24d cat /etc/nginx/conf.d/nginx.conf  ##查看nginx.conf 文件是否已经被存放到 /etc/nginx/conf.d/
server {
    listen      8000;
    server_name _;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
}

3、要使yaml文件生效改变 pod的更新需要手动更新

出现这种情况的原因是ongfigmap 热更新后 并不是触发相关的Pod滚动更新,需要手动触发

每次通过修改“version/config” 来触发Pod的滚动更新
使用configmap挂载环境变量是不会更新的

3.1、修改nginx-config配置文件中的端口为“8080”

[kubeadm@server1 configmap]$ kubectl edit cm nginx-config      ##修改配置文件


****


#apiVersion: v1
#data:
#  nginx.conf: |
#    server {
        listen      8080;        ##将端口改为8080
#        server_name _;

#        location / {
#            root /usr/share/nginx/html;
#            index index.html index.htm;
#        }
#    }


3.2、测试:

查看更新因为系统的原因所以会比较慢

3.3、访问8000端口(8000端口依然可以访问说明更新只是热更新,并没有触发pod的更新)

[kubeadm@server1 configmap]$ curl 10.244.2.77:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }

3.4、访问8080端口(访问失败)

[kubeadm@server1 configmap]$ curl 10.244.2.77:8080
curl: (7) Failed connect to 10.244.2.77:8080; Connection refused
[kubeadm@server1 configmap]$

3.5、如果需要触发pod更新,则需要

3.5.1、输入手动更新的命令:

[kubeadm@server1 configmap]$ kubectl patch deployments.apps my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20200223"}}}}}'         ##输入的命令其实就是在修改yaml文件中的内容 

3.5.2、会触发pod的更新

[kubeadm@server1 configmap]$ kubectl get pod
NAME                        READY   STATUS              RESTARTS   AGE
my-nginx-657cf55d9c-6nzdn   0/1     ContainerCreating   0          20s          ##新更新的pod
my-nginx-7dc8d7b68d-cm24d   1/1     Running             0          45m         ##原来运行的pod

3.6、测试:

[kubeadm@server1 configmap]$ kubectl get pod -o wide
NAME                        READY   STATUS    RESTARTS   AGE    IP            NODE      NOMINATED NODE   READINESS GATES
my-nginx-657cf55d9c-6nzdn   1/1     Running   0          4m1s   10.244.1.65   server4   <none>               <none>         ##pod更新相应的ip也更新
[kubeadm@server1 configmap]$


[kubeadm@server1 configmap]$ curl 10.244.1.65:8080           ##验证8080端口是否被成功的更新
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;

测试发现pod已经更新再次访问时可以访问到8080端口的后端

发布了93 篇原创文章 · 获赞 1 · 访问量 1918

猜你喜欢

转载自blog.csdn.net/dghfttgv/article/details/104686645
k8s