前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >再战 k8s(8):ConfigMap

再战 k8s(8):ConfigMap

作者头像
看、未来
发布2022-05-06 15:00:45
5340
发布2022-05-06 15:00:45
举报
文章被收录于专栏:CSDN搜“看,未来”

文章目录

1 ConfigMap介绍

1.1 概述

在部署应用程序时,我们都会涉及到应用的配置,在容器中,如Docker容器中,如果将配置文件打入容器镜像,这种行为等同于写死配置,每次修改完配置,镜像就得重新构建。当然,我们也可以通过挂载包含该文件的卷进行配置管理和修改。而在k8s中,我们要讲一种更好的方式,即ConfigMap,这种资源对象的出现,更是极大的方便了应用程序的配置管理。   ConfigMap是一个或多个key/value的形式保存在k8s中,内部可以管理变量也可以管理完整的配置文件内容。

1.2 用法

代码语言:javascript
复制
生成容器内的环境变量,在pod中可以通过spec.env或者spec.envFrom进行引用。
设置容器启动命令的启动参数,前提是设置为环境变量。
以卷volume的方式挂载到容器内部的文件或目录,通过spec.volumes引用。

2 ConfigMap用法

代码语言:javascript
复制
在使用命令的时候注意单词: configmap等价于cm,cm算是简写,类似于deployment可以使用命令时写成deploy,service可以写成svc,namespace可以写成ns,pod可以写成po。

2.1 创建

1)yaml文件方式创建 样例:

apiVersion: v1 kind: ConfigMap metadata: name: cm-test01 data: appconf01: value01 appconf02: value02

命令: $ kubectl create -f configmap-test01.yaml

2)命令行方式创建

代码语言:javascript
复制
读取文件方式(也可以是目录)通过--from-file参数从文件中读取。可以指定key的名称,若不指定,则默认使用文件名为key。
如当前目录有一个配置文件为test.properties

key01:value01 key02:value02 conf01: value03

$ kubectl create cm cm-test-file --from-file=test.properties

代码语言:javascript
复制
指定参数方式,通过--from-literal指定keyxx=valuexx创建confimap中的data内配置属性。
$ kubectl create configmap cm-test-literal --from-literal=key01=value01 --from-literal=key02=value02

2.2 查询

1)查看configmap列表 $ kubectl get cm

[root@k8s /cm/test]# kubectl get cm NAME DATA AGE cm-test-file 1 1m cm-test-literal 2 2s cm-test01 2 1h

2)查看configmap详情 $ kubectl describe cm cm-test01

[root@k8s /cm/test]# kubectl describe cm cm-test01 Name: cm-test01 Namespace: system-pro Labels: Annotations:

Data

===

appconf01:

---

value01

appconf02:

value02

$ kubectl describe configmap cm-test-file

[root@k8s /cm/test]# kubectl describe configmap cm-test-file Name: cm-test-file Namespace: system-pro Labels: Annotations:

Data

test.properties:

key01:value01 key02:value02 conf01: value03

$ kubectl describe cm cm-test-literal

[root@k8s /cm/test]# kubectl describe cm cm-test-literal Name: cm-test-literal Namespace: system-pro Labels: Annotations:

Data

===

key01:

---

value01

key02:

---

value02

3)查看yaml输出 $ kubectl get cm cm-test01 -o yaml

[root@k8s /cm/test]# kubectl get cm cm-test01 -o yaml apiVersion: v1 data: appconf01: value01 appconf02: value02 kind: ConfigMap metadata: creationTimestamp: 2020-03-13T13:06:21Z name: cm-test01 namespace: system-pro resourceVersion: “594861” selfLink: /api/v1/namespaces/system-pro/configmaps/cm-test01 uid: 6f5e7efb-652b-11ea-adf9-fa163e4464a5

$ kubectl get configmap cm-test-file -o yaml

[root@k8s /cm/test]# kubectl get configmap cm-test-file -o yaml apiVersion: v1 data: test.properties: | key01:value01 key02:value02 conf01: value03 kind: ConfigMap metadata: creationTimestamp: 2020-03-13T14:29:30Z name: cm-test-file namespace: system-pro resourceVersion: “598548” selfLink: /api/v1/namespaces/system-pro/configmaps/cm-test-file uid: 0d226ad2-6537-11ea-adf9-fa163e4464a5

$ kubectl get cm cm-test-literal -o yaml

[root@k8s /cm/test]# kubectl get cm cm-test-literal -o yaml apiVersion: v1 data: key01: value01 key02: value02 kind: ConfigMap metadata: creationTimestamp: 2020-03-13T14:30:57Z name: cm-test-literal namespace: system-pro resourceVersion: “598613” selfLink: /api/v1/namespaces/system-pro/configmaps/cm-test-literal uid: 412affd4-6537-11ea-adf9-fa163e4464a5

2.3 更新

1)edit $ kubectl edit cm cm-test01

通过kubectl describe cm cm-test01查看更新是否生效

2)apply 直接更改yaml文件里面的值,通过kubectl apply -f configmap-test01.yaml重新发布一遍进行更新。

2.4 删除

1)通过yaml文件的方式删除 $ kubectl delete -f configmap-test01.yaml

2)直接删除资源 $ kubectl delete cm cm-test01 3 ConfigMap和Pod的使用

代码语言:javascript
复制
容器应用对ConfigMap的使用主要是两种:
1)通过环境变量获取ConfigMap的内容:spec.env和spec.envFrom
2)通过卷volume挂载的方式将ConfigMap的内容挂载到容器内部的文件或目录:spec.volumes

以下内容均以上述的ConfigMap资源cm-test01为例

3.1 环境变量方式

spec.env方式

1)创建pod

[root@k8s /cm/test]# vim pod-test01.yaml apiVersion: v1 kind: Pod metadata: name: cm-pod-test001 spec: containers:

  • name: cm-test image: tomcat:8 command: [ “/bin/sh”, “-c”, “env | grep APP”] env:
    • name: APPCONF01 # 定义环境变量的名称 valueFrom: # key “appconf01”的值获取 configMapKeyRef: name: cm-test01 # 环境变量的值来自于configmap cm-test01 key: appconf01 # configmap中的配置key为appconf01
    • name: APPCONF02 # 定义环境变量的名称 valueFrom: # key “appconf02”的值获取 configMapKeyRef: name: cm-test01 # 环境变量的值来自于configmap cm-test01 key: appconf02 # configmap中的配置key为appconf02 restartPolicy: Never # 重启策略:从不。

执行创建pod: $ kubectl create -f pod-test01.yaml

2)查看pod $ kubectl get pods

[root@k8s /cm/test]# kubectl get pods NAME READY STATUS RESTARTS AGE cm-pod-test001 0/1 Completed 0 1h

3)查看pod日志 $ kubectl logs cm-pod-test001

[root@k8s /cm/test]# kubectl logs cm-pod-test001 APPCONF01=value01 APPCONF02=value02

说明容器内部的环境变量使用ConfigMap中进行读取的。

spec.envFrom方式

1)创建pod yaml文件

[root@k8s /cm/test]# vim pod-test02.yaml apiVersion: v1 kind: Pod metadata: name: cm-pod-test002 spec: containers:

  • name: cm-test2 image: tomcat:8 command: [ “/bin/sh”, “-c”, “env”] envFrom:
    • configMapRef: name: cm-test01 # 根据ConfigMap cm-test01资源自动生成环境变量 restartPolicy: Never

执行创建pod: $ kubectl create -f pod-test02.yaml

2)查看pod $ kubectl get po

[root@k8s /cm/test]# kubectl get po NAME READY STATUS RESTARTS AGE cm-pod-test001 0/1 Completed 0 2h cm-pod-test002 0/1 Completed 0 1h

注意: 环境变量的名称受限制:[a-zA-Z][a-zA-Z0-9_]*,不能以数字或非法字符开头。

3.2 卷挂载方式

指定items

[root@k8s /cm/test]# vim pod-test03.yaml apiVersion: v1 kind: Pod metadata: name: cm-pod-test003 spec: containers:

  • name: cm-test3 image: tomcat:8 volumeMounts:
    • name: vm-01-1 mountPath: /conf volumes:
  • name: vm-01-1 configMap: name: cm-test-file items:
    • key: key-testproperties path: test.properties restartPolicy: Never

不指定items

[root@k8s /cm/test]# vim pod-test04.yaml apiVersion: v1 kind: Pod metadata: name: cm-pod-test004 spec: containers:

  • name: cm-test4 image: tomcat:8 volumeMounts:
    • name: vm-02-2 mountPath: /conf volumes:
  • name: vm-02-2 configMap: name: cm-test-file restartPolicy: Never

进入容器中查看 $ kubectl exec -it cm-pod-test004 -c cm-test4 – bash 进入容器后,ls /conf查看是否有test.properties文件。

[root@k8s /cm/test]# kubectl exec -it cm-pod-test004 -c cm-test4 – bash root@cm-pod-test004:/usr/local/tomcat# ls /conf test.properties

补充

关于–from-file的方式的创建指定key和不指定key的区别

1)不指定key名

创建:

$ kubectl create cm cm-test-file --from-file=test.properties

输出:

$ kubectl get cm cm-test-file -o yaml

在这里插入图片描述

2)指定key

创建:

$ kubectl create cm cm-test-file02 --from-file=tp=test.properties

输出:

$ kubectl get cm cm-test-file -o yaml

在这里插入图片描述

若指定key的名称,configmap中将会使用指定名称;若不指定,则默认使用文件名为key。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1 ConfigMap介绍
    • 1.1 概述
      • 1.2 用法
      • 2 ConfigMap用法
        • 2.1 创建
          • 2.2 查询
          • Data
            • test.properties:
              • 2.3 更新
                • 2.4 删除
                  • 3.1 环境变量方式
                    • spec.env方式
                    • spec.envFrom方式
                  • 3.2 卷挂载方式
                    • 指定items
                    • 不指定items
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档