k8s中存储分为以下几类:
ConfigMap、Volume、Secret、Perstent Volume(pv)
ConfigMap:
此功能式是在kubernetes1.2版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。Config Map API给我们提供工了像容器中注入配置信息的机制,ConfigMap可以被采用保存单个属性,要也可以用来保存整个配置文件或者JSON二进制大对象
ConfigMap的创建
1.使用目录创建
配置文件:
[root@apiserver dir]# cat aaa.properties
hooo=1
booo=2
[root@apiserver dir]# cat game.properties
enemies=aliens
lives=3
enemies.cheat=ture
[root@apiserver dir]# cat ui.properties
color.good=purple
color.bad=yellow
[root@apiserver dir]#
–from-file制定目录下的所有文件都会被用在ConfigMap里面创建一个键值对,键的名字就是文件名,值就是文件的内容
命令:
kubectl create configmap doc-config --from-file=/usr/local/configmap/dir
2.使用文件创建:
命令:
kubectl create configmap file-config --from-file=/usr/local/configmap/dir/ui.properties
--from-file
这个参数可以使用对于偶次,可以使用两次分别制定事例中的那两个配置文件,效果就跟指定目录是一样
3.使用字面值创建:
使用字面值创建,利用—from-literal参数传递配置信息,改参数可以使用多次,格式如下
kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm
查看配置信息:
4.使用资源清单的方式创建:
[root@apiserver env]# cat env.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
data:
log_level: INFO
ConfigMap的使用
方式一:
配置pod:
[root@apiserver env]# cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-config
image: nginx
command: ["/bin/bash","-c","env"]
env:
- name: SPECIAL_LEVE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.how
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.type
envFrom:
- configMapRef:
name: env-config #configmap来源
restartPolicy: Never
pod创建完成:
[root@apiserver env]# kubectl get pod
NAME READY STATUS RESTARTS AGE
dapi-test-pod 0/1 Completed 0 26s
查看pod信息:
[root@apiserver env]# kubectl logs dapi-test-pod
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=dapi-test-pod
PWD=/
PKG_RELEASE=1~buster
HOME=/root
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
log_level=INFO
SPECIAL_LEVE_KEY=very
NJS_VERSION=0.3.9
SHLVL=0
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SPECIAL_TYPE_KEY=charm
NGINX_VERSION=1.17.10
_=/usr/bin/env
方法二(标签形式)
创建pod:
[root@apiserver env]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod1
spec:
containers:
- name: test-config1
image: nginx
command: ["/bin/bash","-c","echo $(SPECIAL_LEVE_KEY) $(SPECIAL_TYPE_KEY)"]
env:
- name: SPECIAL_LEVE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.how
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.type
envFrom:
- configMapRef:
name: env-config
restartPolicy: Never
查看:
方式三(利用volume):
配置pod:
[root@apiserver env]# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod2
spec:
containers:
- name: test-config2
image: nginx
command: ["/bin/bash","-c","sleep 600s"]
volumeMounts:
- name: config-volumes
mountPath: /etc/config
volumes:
- name: config-volumes
configMap:
name: special-config
restartPolicy: Never
查看目录是否挂载:
[root@apiserver env]# kubectl exec -it dapi-test-pod2 bash
root@dapi-test-pod2:/# cd /etc/config/
root@dapi-test-pod2:/etc/config# ls
special.how special.type
如果使用的是doc-config 结果如下:
[root@apiserver env]# kubectl exec -it dapi-test-pod3 /bin/bash
root@dapi-test-pod3:/# cd /etc/config/
root@dapi-test-pod3:/etc/config# ls
aaa.properties game.properties ui.properties
root@dapi-test-pod3:/etc/config# cat aaa.properties
hooo=1
booo=2
ConfigMap热更新:
编辑deployment的yaml文件:
[root@apiserver config]# cat 111.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: log-config
data:
log_level: INFO
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:v1
ports:
- containerPort: 80
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: log-config
部署时出现问题:
[root@apiserver config]# kubectl apply -f 111.yaml
configmap/log-config unchanged
error: error parsing 111.yaml: error converting YAML to JSON: yaml: line 19: did not find expected key
原因:空格问题
编辑configmap实现热更新:
[root@apiserver config]# kubectl edit cm log-config
将INFO修改为DEBUG:
原:
[root@apiserver config]# kubectl exec -it nginx-deployment-58b5f7c9d-bdxrc bash
root@nginx-deployment-58b5f7c9d-bdxrc:/# cd /etc/config/
root@nginx-deployment-58b5f7c9d-bdxrc:/etc/config# ls
log_level
root@nginx-deployment-58b5f7c9d-bdxrc:/etc/config# cat log_level
INFO
改变后:
[root@apiserver config]# kubectl exec -it nginx-deployment-58b5f7c9d-bdxrc bash
root@nginx-deployment-58b5f7c9d-bdxrc:/# cd /etc//config/
root@nginx-deployment-58b5f7c9d-bdxrc:/etc/config# ls
log_level
root@nginx-deployment-58b5f7c9d-bdxrc:/etc/config# cat log_level
DEBUG