Kubernets配置文件管理 -- (ConfigMap)


ConfigMap介绍

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

ConfigMap 将你的环境配置信息和容器镜像解耦,便于应用配置的修改。

ConfigMap也是按Namespace隔离的,不同的Namespace之间ConfigMap的名称可以相同,但是不能跨Namespace进行访问。所以创建ConfigMap,可以使用-n指定资源所在的Namespace(命名空间),默认创建在default命名空间下。

注意:ConfigMap 并不提供保密或者加密功能。 如果你想存储的数据是机密的,请使用Secret, 或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。

配置是程序绕不开的话题,在Kubernetes中使用ConfigMap来配置,它本质其实就是键值对。

# congiMap里的配置文件是如何存储的
## 方法一
键值对 key:value
## 方法二
文件名:配置文件的内容

# configMap支持的配置类型
1.直接定义的键值对
2.基于文件创建的键值对

# configMap创建方式
1.命令行
2.资源配置清单

# configMap的配置文件如何传递到POD里
1.变量传递 (毫无意义)
2.数据卷挂载

# 使用configMap的限制条件
1.ConfigMap必须在Pod之前创建,Pod才能引用他
2.ConfigMap受限于命名空间限制,只有处于同一个命名空间中的Pod才可以被引用

image-20240926140512049

image-20240926140450766



命令行创建ConfigMap -- (key-value)

## 以键值对的方式存在 key=value
--from-literal:指定键值对的 key=value

kubectl create configmap web-config \
--from-literal=nginx_port=80 \
--from-literal=server_name=www.jkt.com
[root@master app]# kubectl create configmap web-config \
> --from-literal=nginx_port=80 \
> --from-literal=server_name=www.jkt.com
configmap/web-config created

[root@master app]# kubectl get cm
NAME         DATA   AGE
web-config   2      11s

[root@master app]# kubectl describe cm web-config 
Name:         web-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
nginx_port:
----
80
server_name:
----
www.jkt.com
Events:  <none>

image-20240926141614782

POD引用cm
将对应cm中 key的value  赋值给 env的名字  当吃环境变量传递进入系统
apiVersion: v1
kind: Pod
metadata:
  name: nginx-cm
spec:
  containers:
  - name: nginx-pod
    image: nginx:alpine
    
    env:
    - name: NGINX_PORT
      valueFrom:
        configMapKeyRef:
          name: web-config
          key: nginx_port
    
    - name: SERVER_NAME
      valueFrom:
        configMapKeyRef:
          name: web-config
          key: server_name
    

image-20240926142614270

命令行创建ConfigMap--(基于file)

[root@master01 configmap]# cat www.conf
server {
        listen 这是一个80端口;
        server_name www.kjt.com;
        location / {
        root /usr/share/nginx/html/www;
        index index.html index.htm;
        }
}

[root@master cm]# kubectl create configmap nginx-www \
--from-file=web-www=./www.conf

image-20240926143518250

POD引用configmap
apiVersion: v1
kind: Pod
metadata:
  name: nginx-cm02
spec:
  volumes:
  - name: nginx-www-file
    configMap:
      name: nginx-www
      items:
      - key: web-www
        path: nginx.conffff
  containers:
  - name: nginx-pod
    image: nginx:alpine
    volumeMounts:
    - name: nginx-www-file
      mountPath: /tmp

image-20240926144700815

image-20240926145029508

##### 通过修改cm 实现远程修改
[root@master cm]# kubectl edit cm nginx-www 
configmap/nginx-www edited

image-20240926145341657

image-20240926145520479



资源清单创建configMap

将文件内容写入资源清单 通过管道符多行输入
apiVersion: v1                     # 指定ConfigMap资源使用的API版本
kind: ConfigMap                    # 定义资源类型,这里是ConfigMap
metadata:                           # 包含ConfigMap的元数据
  name: kjt-conf                   # ConfigMap的名称
  namespace: default               # 指定ConfigMap所在的命名空间,这里是默认命名空间
data:                               # 该部分包含配置信息
  kjt001-key: |                    # ConfigMap中的一个键,后面是多行字符串
[root@master01 configmap]# cat nginx-cm03.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: kjt-conf
  namespace: default
data:
  kjt001-key: |
    server {
          listen 5050;
          server_name blog.zls.com;
			location / {
				root /usr/share/nginx/html/www;
				index index.html index.htm;
			}
		}
  kjt002-key: |
    server {
		listen 5051;
		server_name zh.zls.com;
		location / {
			root /usr/share/nginx/html/blog;
			index index.html index.htm;
		}
    }

---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-cm03
spec:
  volumes:
  - name: kjt-001-file
    configMap:
      name: kjt-conf
      items:
      - key: kjt001-key
        path: kjt001.conffff
  - name: kjt-002-file
    configMap:
      name: kjt-conf
      items:
      - key: kjt002-key
        path: kjt002.conffff
  
  containers:
  - name: nginx-pod
    image: nginx:alpine
    volumeMounts:
    - name: kjt-001-file
      mountPath: /tmp/kjt001
    - name: kjt-002-file
      mountPath: /tmp/kjt002

image-20240926151136842