kuberbetes-存储-ConfigMap

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值