05-k8s当中的ConfigMap资源
ConfigMap资源,简称CM资源,它生成的键值对数据,存储在ETCD数据库中;应用场景:主要是对应用程序的配置;pod通过env变量引入ConfigMap,或者通过数据卷挂载volume的方式引入ConfigMap资源;
一、ConfigMap资源概述
ConfigMap资源,简称CM资源,它生成的键值对数据,存储在ETCD数据库中;
应用场景:主要是对应用程序的配置;
pod通过env变量引入ConfigMap,或者通过数据卷挂载volume的方式引入ConfigMap资源;
二、查看k8s集群系统中都有哪些资源类型
[root@k8s231 pod]# kubectl api-resources
三、ConfigMap资源管理
1,创建工作目录
[root@k8s231 pod]# mkdir /xinjizhiwa/configmap
[root@k8s231 pod]# cd /xinjizhiwa/configmap
2,创建ConfigMap资源
· 声明式创建ConfigMap资源
1,编辑ConfigMap资源清单
[root@k8s231 configmap]# vim 01-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cm01
#声明cm资源的数据
data:
#第一种写法【key:value】
xinjizhiwa: "HELLO WORLD"
k8s: "1.23.17"#第二种写法【key:| value value value。。。】
my.cnf: |
[mysqld]
datadir=/xinjizhiwa/data
basedir=/usr/bin/mysqld/bin/
socket=/tmp/mysql.socket
skip-name-resolve=1
port=3306
[client]
username=admin
password=1
2,创建ConfigMap资源
[root@k8s231 configmap]# kubectl apply -f 01-cm.yaml
configmap/cm01 created
查看ConfigMap资源
[root@k8s231 configmap]# kubectl get cm cm01
NAME DATA AGE
cm01 3 28s
· 响应式创建ConfigMap资源
命令行创建ConfigMap资源;
[root@k8s231 configmap]# kubectl create cm cm001 --from-literal=xinjizhiwa=k8s12317 --from-literal=k8s=kubernetes
configmap/cm001 created
查看cm资源
[root@k8s231 configmap]# kubectl get cm cm001 -o wide
NAME DATA AGE
cm001 2 10s
指定文件方式创建cm资源
1,编辑一个文件
[root@k8s231 configmap]# cat > 1.txt <<EOF
> 11111111111111
> 222222222222
> 3333333333333
> 4444444444444
> 5555555555555
> 666666666666
> EOF
2,指定文件创建cm资源
[root@k8s231 configmap]# kubectl create cm cm002 --from-file=1.txt=1.txt
configmap/cm002 created
3,查看cm资源
[root@k8s231 configmap]# kubectl get cm cm002 -o wide
NAME DATA AGE
cm002 1 22s
3,查看cm资源的详细信息
[root@k8s231 configmap]# kubectl describe cm cm002
Name: cm002
Namespace: default
Labels: <none>
Annotations: <none>Data
====
1.txt:
----
11111111111111
222222222222
3333333333333
4444444444444
5555555555555
666666666666...
4,删除cm资源
[root@k8s231 configmap]# kubectl delete cm --all
configmap "cm001" deleted
configmap "cm002" deleted
configmap "cm01" deleted
configmap "kube-root-ca.crt" deleted
四、pod引入CM资源
pod引入cm资源的方式,有两种,env变量引入和volume挂载卷引入;
1,创建cm资源
[root@k8s231 configmap]# cat 01-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cm01
#声明cm资源的数据
data:
#第一种写法【key:value】
xinjizhiwa: "HELLO WORLD"
k8s: "1.23.17"
#第二种写法【key:| value value value。。。】
my.cnf: |
[mysqld]
datadir=/xinjizhiwa/data
basedir=/usr/bin/mysqld/bin/
socket=/tmp/mysql.socket
skip-name-resolve=1
port=3306
[client]
username=admin
password=1
[root@k8s231 configmap]# kubectl apply -f 01-cm.yaml
2,创建pod资源,env变量引入cm
[root@k8s231 configmap]# cat pod-env.yaml
apiVersion: v1
kind: Pod
metadata:
name: m1
spec:
containers:
- name: c1
image: nginx:1.20.1-alpine
env:
#引入一个变量
- name: env-cm01
#从其他位置引入变量
valueFrom:
#声明从ConfigMap中引入变量
configMapKeyRef:
#引入变量ConfigMap的名称
name: cm01
#引用ConfigMap中的哪个key?
key: xinjizhiwa
#引入第二个变量
- name: env-cm02
valueFrom:
configMapKeyRef:
name: cm01
#引用ConfigMap中的哪个key?
key: my.cnf
进入容器查看变量是否引入成功
[root@k8s231 configmap]# kubectl exec m1 -it -- sh
/ # env
env-cm01=HELLO WORLD
env-cm02=[mysqld]
datadir=/xinjizhiwa/data
basedir=/usr/bin/mysqld/bin/
socket=/tmp/mysql.socket
skip-name-resolve=1
port=3306
[client]
username=admin
password=1
3,创建pod资源,volume挂载卷引入cm
· 编辑pod资源清单
[root@k8s231 configmap]# vim pod-env.yaml
apiVersion: v1
kind: Pod
metadata:
name: m1
spec:
#声明pod存储卷
volumes:
- name: vol-cm
#声明挂载cm资源
configMap:
#指定cm组员名称
name: cm01
#如果不写items,则引用cm资源中全部的key:value作为文件挂载
items:
#cm资源的key是什么
- key: xinjizhiwa
#key的value值挂载到容器中变成文件内容,文件名叫什么?
path: xinjizhiwa.txt
- key: my.cnf
path: my.cnf
containers:
- name: c1
image: nginx:1.20.1-alpine
volumeMounts:
- name: vol-cm
mountPath: /k8s
[root@k8s231 configmap]# kubectl apply -f pod-env.yaml
pod/m1 created
· 进入pod容器查看是否挂载成功,变成文件
[root@k8s231 configmap]# kubectl exec m1 -it -- sh
/ # ls
bin etc media root sys
dev home mnt run tmp
docker-entrypoint.d k8s opt sbin usr
docker-entrypoint.sh lib proc srv var
/ # ls -l k8s
total 0
lrwxrwxrwx 1 root root 13 Feb 7 11:26 my.cnf -> ..data/my.cnf
lrwxrwxrwx 1 root root 21 Feb 7 11:26 xinjizhiwa.txt -> ..data/xinjizhiwa.txt
/ # cd k8s/
/k8s # ls
my.cnf xinjizhiwa.txt
/k8s # cat my.cnf
[mysqld]
datadir=/xinjizhiwa/data
basedir=/usr/bin/mysqld/bin/
socket=/tmp/mysql.socket
skip-name-resolve=1
port=3306
[client]
username=admin
password=1
/k8s # cat xinjizhiwa.txt
HELLO WORLD/k8s #
拓展:当pod挂载cm资源到容器的目录后,若容器的原目录中有文件,则会被清空,那么如何做到,及把cm资源挂载成为文件到容器的指定目录,又能保证容器原目录中的文件不清空呐?
[root@k8s231 configmap]# cat pod-env.yaml
apiVersion: v1
kind: Pod
metadata:
name: m1
spec:
#声明pod存储卷
volumes:
- name: vol-cm
#声明挂载cm资源
configMap:
#指定cm组员名称
name: cm01
#如果不写items,则引用cm资源中全部的key:value作为文件挂载
items:
#cm资源的key是什么
- key: xinjizhiwa
#key的value值挂载到容器中变成文件内容,文件名叫什么?
path: xinjizhiwa.txt
- key: my.cnf
path: my.cnf
containers:
- name: c1
image: nginx:1.20.1-alpine
volumeMounts:
- name: vol-cm
mountPath: /k8s
#如果subPath不指定任何值(默认),则默认容器挂载路径为空,表示清空挂载点;
#如果subPath指定名称和cm的Path相同,表示仅仅挂载这个文件,不清空挂在的目录保留原本容器路径的文件;
#也就是说volumes>>configMap>items>path只有与subPath的值相等时,才是挂载文件;否则就是挂载目录;会清空目录;
subPath: my.cnf
#resdOnly: true #只读设置;表示不允许容器内编辑或删除这个文件;
至此,configmap资源结束;
更多推荐
所有评论(0)