存储

configMap

configMap描述信息

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

ConfigMap的创建

1、使用目录创建
$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
kubectl get cm
kubectl get cm game-config
kubectl get cm game-config -o yaml --查看配置
kubectl describe cm game-config --查看配置

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

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

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

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参数传递配置信息,该参数可以使用多次,格式如下

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来替代环境变量
apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
special.how: very
special.type: charm
apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
namespace: default
data:
log_level:INFO
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设置命令行参数
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,有不同的选项。最基本的就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容

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的热更新

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
[root@k8s-master01 ~]# kubectl exec my-nginx-7b55868ff4-wqh2q -it -- cat /etc/config/log_level
INFO

修改ConfigMap

$ kubectl edit configmap log-config

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

$ kubect1 exec 'kubectl get pods -1 run=my-nginx -osname|cut -d "/"-f2 cat /tmp/1oglevel DEBUG

ConfigMap更新后滚动更新Pod

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

$ 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秒)才能同步更新

最新文章

  1. SAP ALV OO 选择行打印
  2. 解决企业In-House安装APP需HTTPS支持的问题(转载)
  3. oracle/sqlserver 递归
  4. WebService之基于REST机制的实现实例(Java版)
  5. 理解python先编译后解释的特点
  6. [转载]mysql插入大量数据
  7. SVN四部曲之SVN命令精通
  8. asp.net mvc NPOI 生成Excel文件
  9. rsyslog安装
  10. Servlet配置对象、上下文对象、多线程问题
  11. HDU 4945 2048(DP)
  12. ssl通信c实现
  13. GitHub 添加 SSH keys
  14. Prime Ring Problem(dfs水)
  15. span是没有value标签的,要向获得标签内部的值改怎么办。
  16. 使用CompletableFuture优化你的代码执行效率
  17. 2017年7月最新浏览器市场份额,IE8份额仅剩个位数
  18. DOM入门。
  19. UEditor的jQuery插件化 -转
  20. curl 调用jenkins的api

热门文章

  1. HttpServlet容器响应Web客户请求流程?
  2. python模块安装问题:no matching distribution found for XXX 或者 Read timed out.
  3. eclipse svn同步过滤掉某些不需要同步的文件
  4. CSS的Animation&Transition&gradients属性
  5. Java多线程和并发(二),Thread中的start和run的区别
  6. TTTTTTTTTTTTT CF Good Bye 2015 C- New Year and Domino(CF611C) 二维前缀
  7. 洛谷P1576 最小花费x
  8. python模块turtle简单用法
  9. [BZOJ5249][九省联考2018]IIIDX:线段树+贪心
  10. Android_(传感器)指南针