前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云TKE使用之ConfigMap挂载

腾讯云TKE使用之ConfigMap挂载

作者头像
白鹏飞
发布2020-07-08 17:14:14
2.2K0
发布2020-07-08 17:14:14
举报

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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 内生效:

代码语言:javascript
复制
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 启动命令使用环境变量,参考官方例子:

代码语言:javascript
复制
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,会自动生成为同名文件,供业务使用。

代码语言:javascript
复制
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  

验证挂载结果:

代码语言:javascript
复制
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

本文系转载,前往查看

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

本文系转载前往查看

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. CM简介
  • 2. 使用场景
  • 3. 举例说明
    • 3.1 用作环境变量
      • 3.2 用作镜像CMD 启动参数
        • 3.3 用作Pod 卷挂载
          • 3.4 kubernetes API 调用
          • 4. TKE平台使用
            • 4.1 创建deploy,配置cm 挂载,env 使用
              • 4.2 运行效果
              • 5. 参考文档
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档