k8s-kubernetes-configmap存储

2019-12-11 14:11:47 浏览数 (1)

存储

configMap

configMap描述信息

ConfigMap功能在Kubernetes1.2版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。 ConfigMap API给我们提供了向容器中注入配置信息的机制, ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象

ConfigMap的创建
1、使用目录创建
代码语言:javascript复制
$1s docs/user-guide/configmap/kubect1/ 
game.properties
ui.properties
​
$ cat docs/user-guide/configmap/kubectl/game.properties 
enemies=aliens
livess=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten 
secret.code.passphrase=UUDDLRLRBABAS 
secret.code.allowed=true 
secret.code.lives=30
​
cat docs/user-guide/configmap/kubectl/ui.properties 
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
​
$ kubectl create configmap game-config --from-file=docs/user-guide/configmap/kubect1
代码语言:javascript复制
kubectl get cm
kubectl get cm game-config
kubectl get cm game-config -o yaml --查看配置
kubectl describe cm game-config --查看配置

-from-file指定在目录下的所有文件都会被用在ConfigMap里面创建一个键值对,键的名字就是文件名,值就是文件的内容

注意:键值对后边不要有空格
Ⅱ、使用文件创建

只要指定为一个文件就可以从单个文件中创建ConfigMap

代码语言:javascript复制
kubectl create configmap game-config-2 --from-file=/root/configmap/dir/gameconfig.properties
​
kubectl get cm  game-config-2 -o yaml

-from-file这个参数可以使用多次,你可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录是一样的

Ⅲ、使用字面值创建

使用文字值创建,利用-from-literal参数传递配置信息,该参数可以使用多次,格式如下

代码语言:javascript复制
kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm
​
$ kubectl get configmaps special-config -o yaml
Pod中使用ConfigMap
Ⅰ、使用ConfigMap来替代环境变量
代码语言:javascript复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm
代码语言:javascript复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  log_level:INFO
代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: hub.atguigu.com/library/myapp:v1 
      command: ["/bin/sh", "-c", "env"]
      env:
        - name: SPECIAL_TYPE_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
Ⅱ、用ConfigMap设置命令行参数
代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: hub.atguigu.com/library/myapp:v1
      command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ] 
      env:
        - name: SPECIAL_LEVEL_KEY 
          valueFrom: 
            configMapKeyRef: 
              name: special-config 
              key: special.how 
        - name: SPECIAL_TYPE_KEY 
          valueFrom: 
            configMapKeyRef: 
              name: special-config 
              key: special.type 
  restartPolicy: Never
Ⅲ、通过数据卷插件使用ConfigMap

在数据卷里面使用这个ConfigMap,有不同的选项。最基本的就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容

代码语言:javascript复制
apiversion: v1
kind: Pod
metadata:
  name: dapi-test-pod3
spec:
  containers:
    - name: test-container
      image: hub.atguigu.com/library/myapp:v1
      command: [ "/bin/sh", "-c", "sleep 600s" ] 
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: special-config
  restartPolicy: Never
ConfigMap的热更新
代码语言:javascript复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: log-config
  namespace: default
data:
  log_level:INFO
​
---
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
  name: my-nginx 
spec:
  replicas: 1
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
        - name: my-nginx
          image: hub.atguigu.com/library/myapp:v1 
          ports:
            - containerPort: 80 
          volumeMounts:
            - name: config-volume 
              mountPath: /etc/config 
      volumes:
        - name: config-volume 
          configMap:
            name: log-config
代码语言:javascript复制
[root@k8s-master01 ~]# kubectl exec my-nginx-7b55868ff4-wqh2q -it -- cat /etc/config/log_level
INFO

修改ConfigMap

代码语言:javascript复制
$ kubectl edit configmap log-config

修改10g-level的值为DEBUG等待大概10秒钟时间,再次查看环境变量的值

代码语言:javascript复制
$ kubect1 exec 'kubectl get pods -1 run=my-nginx -osname|cut -d "/"-f2 cat /tmp/1oglevel DEBUG

ConfigMap更新后滚动更新Pod

更新ConfigMap目前并不会触发相关Pod的滚动更新,可以通过修改pod annotations的方式强制触发滚动更新

代码语言:javascript复制
$ kubectl patch deployment my-nginx--patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20198411"}}}}}'

这个例子里我们在. spec.template.metadata. annotations中添加version/config ,每次通过修改 version/config来触发滚动更新

更新ConfigMap后:

  • 使用该ConfigMap挂载的Env不会同步更新
  • 使用该ConfigMap挂载的Volume中的数据需要一段时间(实测大概10秒)才能同步更新

0 人点赞