配置管理中心 configmap

 

 

 

 configmap 注入方式有两种:1.一种将 configMap 做为存储卷。2.一种是将 configMap 通过 env 中 configMapKeyRef 注入到容器中

 1.创建

1.1-命令行直接创建

[root@xksmaster1 02_Service]# kubectl create configmap tomcat-config --from-literal=tomcat_port=8080 --from-literal=server_name=myapp.tomcat.com
configmap/tomcat-config created
[root@xksmaster1 02_Service]# kubectl describe cm tomcat-config
Name:         tomcat-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
server_name:
----
myapp.tomcat.com
tomcat_port:
----
8080
Events:  <none>

1.2-通过文件创建 configmap

[root@xksmaster1 03_ConfigMap]# vim nginx.conf
[root@xksmaster1 03_ConfigMap]# kubectl create configmap www-nginx --from-file=www=./nginx.conf
configmap/www-nginx created
[root@xksmaster1 03_ConfigMap]# kubectl describe configmap www-nginx
Name:         www-nginx
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
www:
----
server {
 server_name www.nginx.com;
 listen 80;
 root /home/nginx/www/
}

Events:  <none>
You have new mail in /var/spool/mail/root

1.3-指定目录创建 configmap

[root@xksmaster1 03_ConfigMap]# mkdir configmap_dir
[root@xksmaster1 03_ConfigMap]# cd configmap_dir/
[root@xksmaster1 configmap_dir]# vim my-server.cnf
server-id=1 [root@xksmaster1 configmap_dir]# vim my
-slave.cnf
server-id=2 [root@xksmaster1 configmap_dir]#
pwd /root/K8S/03_ConfigMap/configmap_dir [root@xksmaster1 configmap_dir]# kubectl create configmap mysql-config --from-file=/root/K8S/03_ConfigMap/configmap_dir configmap/mysql-config created [root@xksmaster1 configmap_dir]# kubectl describe configmap mysql-config Name: mysql-config Namespace: default Labels: <none> Annotations: <none> Data ==== my-server.cnf: ---- server-id=1 my-slave.cnf: ---- server-id=2 Events: <none>

 

1.4-编写 configmap 资源清单 YAML 文件

[root@xksmaster1 configmap_dir]# vim mysql-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: mysql labels: app: mysql data: master.cnf:
| [mysqld] log-bin log_bin_trust_function_creators=1 lower_case_table_names=1 slave.cnf: | [mysqld] super-read-only log_bin_trust_function_creators=1

[root@xksmaster1 configmap_dir]# kubectl apply -f mysql-configmap.yaml
configmap/mysql created
[root@xksmaster1 configmap_dir]# kubectl describe configmap mysql
Name: mysql
Namespace: default
Labels: app=mysql
Annotations: <none>


Data
====
master.cnf:
----
[mysqld]
log-bin
log_bin_trust_function_creators=1
lower_case_table_names=1


slave.cnf:
----
[mysqld]
super-read-only
log_bin_trust_function_creators=1


Events: <none>

 

2.使用ConfigMap 

2.1 通过环境变量引入:使用 configMapKeyRef

[root@xksmaster1 03_ConfigMap]# kubectl apply -f mysql-configmap2.yaml
configmap/mysql unchanged
[root@xksmaster1 03_ConfigMap]# kubectl describe cm mysql
Name:         mysql
Namespace:    default
Labels:       app=mysql
Annotations:  <none>

Data
====
log:
----
1
lower:
----
1
Events:  <none>

[root@xksmaster1 03_ConfigMap]# vim mysql-pod.yaml

 

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
spec:
  containers:
  - name: mysql
    image: busybox
    command: [ "/bin/sh", "-c", "sleep 3600" ]
    env:
    - name: log_bin #定义环境变量 log_bin
      valueFrom:
        configMapKeyRef:
          name: mysql #指定 configmap 的名字
          key: log #指定 configmap 中的 key
    - name: lower #定义环境变量 lower
      valueFrom:
        configMapKeyRef:
          name: mysql
          key: lower
  restartPolicy: Never


[root@xksmaster1 03_ConfigMap]# kubectl apply -f mysql-pod.yaml
pod/mysql-pod created

[root@xksmaster1 03_ConfigMap]# kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
demo-pod                    2/2     Running   46         41h
dig                         1/1     Running   17         17h
my-nginx-69f769d56f-zfw92   1/1     Running   0          17h
my-nginx-69f769d56f-zjg5r   1/1     Running   0          17h
mysql-pod                   1/1     Running   0          78s

[root@xksmaster1 03_ConfigMap]# kubectl exec -it mysql-pod sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.

/ # printenv | grep log
log_bin=1
/ # printenv | grep lower
lower=1

2.2 通过环境变量引入:使用 envfrom

vim mysql-pod-envfrom.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod-envfrom
spec:
  containers:
  - name: mysql
    image: busybox
    imagePullPolicy: IfNotPresent
    command: [ "/bin/sh", "-c", "sleep 3600" ]
    envFrom:
    - configMapRef:
      name: mysql #指定 configmap 的名字
  restartPolicy: Never

[root@xksmaster1 03_ConfigMap]# kubectl apply -f mysql-pod-envfrom.yaml
pod/mysql-pod-envfrom created
[root@xksmaster1 03_ConfigMap]# kubectl exec -it mysql-pod-envfrom -- /bin/sh
/ # printenv | grep log
log=1
/ # printenv | grep lower
lower=1

 

2.3 把 configmap 做成 volume,挂载到 pod

[root@xksmaster1 03_ConfigMap]# vim mysql-configmap-volume.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config-volume
  labels:
    app: mysql
data:
  log: "1"
  lower: "1"
  my.cnf: |
    [mysqld]
    Welcome=xks


[root@xksmaster1 03_ConfigMap]# kubectl apply -f mysql-configmap-volume.yaml
configmap/mysql-config-volume created
[root@xksmaster1 03_ConfigMap]# vim mysql
-pod-volume.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod-volume
spec:
  containers:
  - name: mysql
    image: busybox
    command: [ "/bin/sh","-c","sleep 3600" ]
    volumeMounts:
    - name: mysql-config
      mountPath: /tmp/config
  volumes:
  - name: mysql-config
    configMap:
      name: mysql-config-volume
  restartPolicy: Never


[root@xksmaster1 03_ConfigMap]# kubectl apply -f mysql-pod-volume.yaml
pod/mysql-pod-volume created
[root@xksmaster1 03_ConfigMap]# kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
demo-pod                    2/2     Running   46         42h
dig                         1/1     Running   18         18h
my-nginx-69f769d56f-zfw92   1/1     Running   0          18h
my-nginx-69f769d56f-zjg5r   1/1     Running   0          18h
mysql-pod                   1/1     Running   0          58m
mysql-pod-envfrom           1/1     Running   0          11m
mysql-pod-volume            1/1     Running   0          50s

[root@xksmaster1 03_ConfigMap]# kubectl exec -it mysql-pod-volume -- /bin/sh
/ # cd /tmp/config/
/tmp/config # ls
log     lower   my.cnf
/tmp/config # cat my.cnf
[mysqld]
Welcome=xks
/tmp/config # cat log
/tmp/config # cat lower
1/tmp/config #

3. Configmap 热更新

kubectl edit configmap mysql

更新 ConfigMap 后:

使用该 ConfigMap 挂载的 env 、envFrom 不会同步更新。

使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概 10 秒)才能同 步更新。

posted @ 2023-03-10 11:03  しみずよしだ  阅读(45)  评论(0)    收藏  举报