一 configmap
1.1 configmap的功能
-
configMap用于保存配置数据,以键值对形式存储。
-
configMap 资源提供了向 Pod 注入配置数据的方法。
-
镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。
-
etcd限制了文件大小不能超过1M
1.2 configmap的使用场景
-
填充环境变量的值
-
设置容器内的命令行参数
-
填充卷的配置文件
1.3 configmap创建方式
1.3.1 字面值创建
[root@k8s-master ~]# kubectl create cm lee-config --from-literal fname=timing --from-literal lname=lee configmap/lee-config created [root@k8s-master ~]# kubectl describe cm lee-config Name: lee-config Namespace: default Labels: <none> Annotations: <none> Data #键值信息显示 ==== fname: ---- timing lname: ---- lee BinaryData ==== Events: <none>
1.3.2 通过文件创建
[root@k8s-master ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 114.114.114.114 [root@k8s-master ~]# kubectl create cm lee2-config --from-file /etc/resolv.conf configmap/lee2-config created [root@k8s-master ~]# kubectl describe cm lee2-config Name: lee2-config Namespace: default Labels: <none> Annotations: <none> Data ==== resolv.conf: ---- # Generated by NetworkManager nameserver 114.114.114.114 BinaryData ==== Events: <none>
1.3.3 通过目录创建
[root@k8s-master ~]# mkdir leeconfig [root@k8s-master ~]# cp /etc/fstab /etc/rc.d/rc.local leeconfig/ [root@k8s-master ~]# kubectl create cm lee3-config --from-file leeconfig/ configmap/lee3-config created [root@k8s-master ~]# kubectl describe cm lee3-config Name: lee3-config Namespace: default Labels: <none> Annotations: <none> Data ==== fstab: ---- # # /etc/fstab # Created by anaconda on Fri Jul 26 13:04:22 2024 # # 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. # # After editing this file, run 'systemctl daemon-reload' to update systemd # units generated from this file. # UUID=6577c44f-9c1c-44f9-af56-6d6b505fcfa8 / xfs defaults 0 0 UUID=eec689b4-73d5-4f47-b999-9a585bb6da1d /boot xfs defaults 0 0 UUID=ED00-0E42 /boot/efi vfat umask=0077,shortname=winnt 0 2 #UUID=be2f2006-6072-4c77-83d4-f2ff5e237f9f none swap defaults 0 0 rc.local: ---- #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. touch /var/lock/subsys/local mount /dev/cdrom /rhel9 BinaryData ==== Events: <none>
1.3.4 通过yaml文件创建
[root@k8s-master ~]# kubectl create cm lee4-config --from-literal db_host=172.25.254.100 --from-literal db_port=3306 --dry-run=client -o yaml > lee-config.yaml [root@k8s-master ~]# vim lee-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: lee4-config
data:
db_host: 172.25.254.100
db_port: "3306"
[root@k8s-master ~]# kubectl describe cm lee4-config
Name: lee4-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
db_host:
----
172.25.254.100
db_port:
----
3306
BinaryData
====
Events: <none>
1.3.5 configmap的使用方式
-
通过环境变量的方式直接传递给pod
-
通过pod的 命令行运行方式
-
作为volume的方式挂载到pod内
1.3.5.1 使用configmap填充环境变量
#讲cm中的内容映射为指定变量 [root@k8s-master ~]# vim testpod1.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: testpod
name: testpod
spec:
containers:
- image: busyboxplus:latest
name: testpod
command:
- /bin/sh
- -c
- env
env:
- name: key1
valueFrom:
configMapKeyRef:
name: lee4-config
key: db_host
- name: key2
valueFrom:
configMapKeyRef:
name: lee4-config
key: db_port
restartPolicy: Never
[root@k8s-master ~]# kubectl apply -f testpod.yml pod/testpod created [root@k8s-master ~]# kubectl logs pods/testpod KUBERNETES_PORT=tcp://10.96.0.1:443 KUBERNETES_SERVICE_PORT=443 MYAPP_V1_SERVICE_HOST=10.104.84.65 HOSTNAME=testpod SHLVL=1 MYAPP_V2_SERVICE_HOST=10.105.246.219 HOME=/ MYAPP_V1_PORT=tcp://10.104.84.65:80 MYAPP_V1_SERVICE_PORT=80 MYAPP_V2_SERVICE_PORT=80 MYAPP_V2_PORT=tcp://10.105.246.219:80 MYAPP_V1_PORT_80_TCP_ADDR=10.104.84.65 MYAPP_V2_PORT_80_TCP_ADDR=10.105.246.219 KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 MYAPP_V1_PORT_80_TCP_PORT=80 MYAPP_V2_PORT_80_TCP_PORT=80 MYAPP_V1_PORT_80_TCP_PROTO=tcp PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin MYAPP_V2_PORT_80_TCP_PROTO=tcp KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp key1=172.25.254.100 key2=3306 MYAPP_V1_PORT_80_TCP=tcp://10.104.84.65:80 MYAPP_V2_PORT_80_TCP=tcp://10.105.246.219:80 KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 KUBERNETES_SERVICE_PORT_HTTPS=443 PWD=/ KUBERNETES_SERVICE_HOST=10.96.0.1 #把cm中的值直接映射为变量 [root@k8s-master ~]# vim testpod2.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: testpod
name: testpod
spec:
containers:
- image: busyboxplus:latest
name: testpod
command:
- /bin/sh
- -c
- env
envFrom:
- configMapRef:
name: lee4-config
restartPolicy: Never
#查看日志 [root@k8s-master ~]# kubectl logs pods/testpod KUBERNETES_PORT=tcp://10.96.0.1:443 KUBERNETES_SERVICE_PORT=443 MYAPP_V1_SERVICE_HOST=10.104.84.65 HOSTNAME=testpod SHLVL=1 MYAPP_V2_SERVICE_HOST=10.105.246.219 HOME=/ db_port=3306 MYAPP_V1_SERVICE_PORT=80 MYAPP_V1_PORT=tcp://10.104.84.65:80 MYAPP_V2_SERVICE_PORT=80 MYAPP_V2_PORT=tcp://10.105.246.219:80 MYAPP_V1_PORT_80_TCP_ADDR=10.104.84.65 MYAPP_V2_PORT_80_TCP_ADDR=10.105.246.219 KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 MYAPP_V1_PORT_80_TCP_PORT=80 age=18 MYAPP_V2_PORT_80_TCP_PORT=80 MYAPP_V1_PORT_80_TCP_PROTO=tcp PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin KUBERNETES_PORT_443_TCP_PORT=443 MYAPP_V2_PORT_80_TCP_PROTO=tcp KUBERNETES_PORT_443_TCP_PROTO=tcp MYAPP_V1_PORT_80_TCP=tcp://10.104.84.65:80 MYAPP_V2_PORT_80_TCP=tcp://10.105.246.219:80 KUBERNETES_SERVICE_PORT_HTTPS=443 KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 name=lee PWD=/ KUBERNETES_SERVICE_HOST=10.96.0.1 db_host=172.25.254.100 #在pod命令行中使用变量 [root@k8s-master ~]# vim testpod3.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: testpod
name: testpod
spec:
containers:
- image: busyboxplus:latest
name: testpod
command:
- /bin/sh
- -c
- echo ${db_host} ${db_port} #变量调用需
envFrom:
- configMapRef:
name: lee4-config
restartPolicy: Never
#查看日志 [root@k8s-master ~]# kubectl logs pods/testpod 172.25.254.100 3306
1.3.5.2 通过数据卷使用configmap
[root@k8s-master ~]# vim testpod4.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: testpod
name: testpod
spec:
containers:
- image: busyboxplus:latest
name: testpod
command:
- /bin/sh
- -c
- cat /config/db_host
volumeMounts: #调用卷策略
- name: config-volume #卷名称
mountPath: /config
volumes: #声明卷的配置
- name: config-volume #卷名称
configMap:
name: lee4-config
restartPolicy: Never
#查看日志 [root@k8s-master ~]# kubectl logs testpod 172.25.254.100
1.3.5.3 利用configMap填充pod的配置文件
#建立配置文件模板 [root@k8s-master ~]# vim nginx.conf
server {
listen 8000;
server_name _;
root /usr/share/nginx/html;
index index.html;
}
#利用模板生成cm
root@k8s-master ~]# kubectl create cm nginx-conf --from-file nginx.conf
configmap/nginx-conf created
[root@k8s-master ~]# kubectl describe cm nginx-conf
Name: nginx-conf
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
nginx.conf:
----
server {
listen 8000;
server_name _;
root /usr/share/nginx/html;
index index.html;
}
BinaryData
====
Events: <none>
#建立nginx控制器文件 [root@k8s-master ~]# kubectl create deployment nginx --image nginx:latest --replicas 1 --dry-run=client -o yaml > nginx.yml #设定nginx.yml中的卷 [root@k8s-master ~]# vim nginx.yml [root@k8s-master ~]# cat nginx. cat: nginx.: 没有那个文件或目录 [root@k8s-master ~]# cat nginx.yml
apiVersion: