专栏首页拥抱云原生腾讯云TKE使用之ConfigMap挂载
原创

腾讯云TKE使用之ConfigMap挂载

1. CM简介

ConfigMap(Kubernetes简称cm)作为Kubernetes 提供的一种资源,可以将配置信息,跟业务镜像解耦开来,提高业务镜像的移植性。

2. 使用场景

其内部核心数据结构,可以理解为一个key-value 映射。

key 为配置名称,限定为string 类型,有语法约束;value 为配置值,限定为string 类型。参照官方文档,其用法有以下四种:

  1. 用作环境变量
  2. 用作镜像CMD参数
  3. 用作Pod卷挂载
  4. kubernetes API 调用使用

说明:

1. ConfigMap 对象,须在Pod 启动前创建,才能被Pod引入使用。

2. ConfigMap 对象,需要和业务Pod 在同一个NameSpace,才可以被Pod 引入使用(如果是Pod 内部,使用kubernetes API 调用,则无该限制)。

3. ConfigMap 对象,不适宜存储敏感数据,如数据库密码,访问密钥等。如有安全性要求,请参考Secret 资源。

3. 举例说明

这里,首先在集群develop namespace 下,创建一个cm 对象:cm-001

其主要信息如下:核心数据data, 包含4个配置key:dbhost,dbport,env,redis.conf

root@VM-128-4-ubuntu:~# kubectl get cm cm-001 -n develop -o yaml 
apiVersion: v1
data:
  dbhost: 10.2.33.4
  dbport: "3306"
  env: develop
  redis.conf: port 6380
kind: ConfigMap
metadata:
  creationTimestamp: "2020-05-17T05:47:13Z"
  name: cm-001
  namespace: develop
  resourceVersion: "1499686372"
  selfLink: /api/v1/namespaces/develop/configmaps/cm-001
  uid: ab12fc40-ac57-41da-8e42-252a07e864ee
root@VM-128-4-ubuntu:~# 

3.1 用作环境变量

创建一个Pod:cm-001-pod

root@VM-128-4-ubuntu:~# cat redis-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: cm-001-pod
  namespace: develop
spec:
  containers:
    - name: demo
      image: redis
      env:
        - name: env
          valueFrom:
            configMapKeyRef:
              name: cm-001
              key: env
root@VM-128-4-ubuntu:~# 
root@VM-128-4-ubuntu:~# 
root@VM-128-4-ubuntu:~# kubectl get pod -n develop 
NAME         READY   STATUS    RESTARTS   AGE
cm-001-pod   1/1     Running   0          17s

验证结果如下:环境变量 env=develop ,在pod 内生效:

root@VM-128-4-ubuntu:~# kubectl exec -it cm-001-pod /bin/bash -n develop 
root@cm-001-pod:/data# env 
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_PORT=443
env=develop
HOSTNAME=cm-001-pod
*
*

3.2 用作镜像CMD 启动参数

这里,本质上还是先以env环境变量形式,引入到Pod 内部。然后,CMD 启动命令使用环境变量,参考官方例子:

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: SPECIAL_LEVEL
        - name: SPECIAL_TYPE_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: SPECIAL_TYPE
  restartPolicy: Never

3.3 用作Pod 卷挂载

config map 对象,用作Pod 内部卷挂载时,对应的key,会自动生成为同名文件,供业务使用。

apiVersion: v1
kind: Pod
metadata:
  name: cm-001-pod
  namespace: develop
spec:
  containers:
    - name: demo
      image: redis
      volumeMounts:
        - name: config
          mountPath: "/tmp/conf"
          readOnly: true
  volumes:
    - name: config
      configMap:
        name: cm-001  

验证挂载结果:

root@VM-128-4-ubuntu:~# kubectl exec -it  cm-001-pod  -n develop bash 
root@cm-001-pod:/data# ls
root@cm-001-pod:/data# ls /tmp/
conf
root@cm-001-pod:/data# ls /tmp/conf
dbhost  dbport  env  redis.conf
root@cm-001-pod:/data# cat /tmp/conf/redis.conf 
port 6380root@cm-001-pod:/data# cat /tmp/conf/dbhost 
10.2.33.4root@cm-001-pod:/data# 

3.4 kubernetes API 调用

API 调用时,使用的ConfigMap 对象不再局限于当前namespace。这里不再举例。

4. TKE平台使用

结合腾讯云容器服务TKE:

4.1 创建deploy,配置cm 挂载,env 使用

添加数据卷+使用全部key
配置挂载点+环境变量

4.2 运行效果

环境变量,配置文件挂载均生效。

env+volume挂载效果

5. 参考文档

https://kubernetes.io/docs/concepts/configuration/configmap/

https://cloud.tencent.com/document/product/457/31717

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 腾讯云TKE使用之ConfigMap挂载

    ConfigMap(Kubernetes简称cm)作为Kubernetes 提供的一种资源,可以将配置信息,跟业务镜像解耦开来,提高业务镜像的移植性。

    jackiebai
  • 腾讯云TKE使用之ConfigMap挂载

    ConfigMap(Kubernetes简称cm)作为Kubernetes 提供的一种资源,可以将配置信息,跟业务镜像解耦开来,提高业务镜像的移植性。

    jackiebai
  • 使用truffle向infura部署以太坊智能合约

    用户1408045
  • VulnHub靶机系列:Os-ByteSec

    Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者Vi...

    FB客服
  • 安装python常用软件包

    可用源: 豆瓣:https://pypi.douban.com/simple/ 清华:https://pypi.tuna.tsinghua.edu.cn/s...

    foochane
  • Qtcreator调试时变量“无法访问”

    原文链接:https://blog.csdn.net/chyuanrufeng/article/details/861...

    acoolgiser
  • 确保云安全的最佳方法是什么?

    随着云计算成为企业开展业务的一种基础技术,云安全已变得至关重要。然而,充分了解云安全的最佳策略是一个真正的挑战。

    静一
  • 13.4 库依赖冲突问题:Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path13.4 库依

    引入第三方库'org.raml:raml-parser:0.8.12',导致slf4j依赖冲突。

    一个会写诗的程序员
  • M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network(论文解读)

    为解决目标实例尺度变化带来的问题,特征金字塔广泛用在一阶段目标检测器(比如,DSSD,RetinaNet,RefineDet)和两阶段目标检测器(比如Mask ...

    于小勇
  • codeblocks文件读取之后,在输出中文时会乱码

    本来没打算写这个文,但是帮助我的大佬说可以写,正好也帮助一下可能出现这个问题的小可爱们

    阿湫

扫码关注云+社区

领取腾讯云代金券