前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s-kubernetes-configmap存储

k8s-kubernetes-configmap存储

作者头像
eadela
发布2019-12-11 14:11:47
4690
发布2019-12-11 14:11:47
举报
文章被收录于专栏:eadela

存储

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秒)才能同步更新
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 存储
    • configMap
      • configMap描述信息
      • ConfigMap的创建
      • Pod中使用ConfigMap
      • ConfigMap的热更新
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档