作者设置:由于当前各个常用镜像站无法正常代理下载镜像,这篇实验中所用到的镜像建议先从网络下载获取再导入到私仓使用,
或私信后台回复:9521 获取~ ~
目录描述
-
Kubernetes 常见的配置资源介绍
-
ConfigMap 介绍说明
-
ConfigMap 创建方式
-
ConfigMap 使用方式
-
ConfigMap实践案例
一. Kubernetes 常见的配置资源介绍
1.1 配置介绍
生产中所有的应用程序中,都涉及到配置文件,而配置文件经常会有变更,比如: 数据库连接,代码版本号,证书更新等
典型场景:项目经历开发环境、测试环境、预发布环境、线上环境才能完成发布,而每个环境都有定义其独立的各种配置,这些配置手工操作很繁杂,有一些流行的开源项目,比如: Apollo,Nacos,Consul等可以实现配置管理, 还有大公司专门开发了专用配置管理中心,如百度的disconf等。
为容器化应用提供配置信息方法
-
制作镜像时,提前将定义好的配置文件拷贝进镜像之中
-
制作镜像时,内置环境变量,在启动容器时通过环境变量向容器传递配置数据
-
启动容器时,基于存储卷向容器传递配置文件,但需要提前准备外部的存储
注意:对于运行容器中的配置改变,还需要通过应用程序重载相关配置才能生效
kubernetes
作为分布式容器调度平台,同样会遇到同样配置变更的问题,这时不可能把资源删除后,重新修改然后再启动生成,这种方法就太繁琐。
kubernetes提供了对pod
中容器应用的集中配置管理组件:ConfigMap
、Secret
、downwardAPI
。通过这些组件来实现向pod中的容器
注入配置信息
的机制。
1.2 配置组件简介
官方的配置组件简介说明 https://kubernetes.io/zh-cn/docs/concepts/configuration/
https://kubernetes.io/zh-cn/docs/concepts/configuration/
1.2.1 Configmap
Configmap
是Kubernetes
集群中非常重要的一种配置管理资源对象。借助于ConfigMap API
向pod中的容器
注入配置信息的机制。
ConfigMap
不仅仅可以保存环境变量或命令行参数等属性,也可以用来保存整个配置文件或者JSON格式的文件。
各种配置属性和数据以 k/v
或嵌套k/v
样式 存在到Configmap
中
注意:所有的配置信息都是以明文的方式来进行传递,实现资源配置的快速获取或者更新。
1.2.2 Secret
在Kubernetes
集群中,有一些配置属性信息非常敏感,这些信息在传递的过程中,不希望外界能够接触的。所以,Kubernetes
提供了一种加密场景
中的配置管理资源对象Secret
。
它在进行数据传输之前,会对数据进行编码,在数据获取时,会对数据进行解码,从而保证整个数据传输过程的安全。
注意:这些数据是根据不同的应用场景,采用不同的加密机制。
1.2.3 downwardAPI
downwardAPI
为运行在pod中的应用容器提供了一种反向引用。让容器中的应用程序了解所处pod
或node
的一些基础属性信息。
从严格意义上来说,downwardAPI不是存储卷
,它自身就存在。相较于configmap
、secret
等资源对象需要创建后才能使用,而downwardAPI引用的是Pod自身的运行环境
,这些信息在Pod启动的时候就存在了
二、ConfigMap 介绍说明
Kubernetes
提供了对pod中容器应用的集中配置管理组件:ConfigMap
。通过ConfigMap
来实现、借助于ConfigMap API
向pod中容器中注入配置信息
的机制。
可以把configmap
理解为Linux系统中的/etc目录
,专门用来存储配置文件的目录。
Kubernetes借助于ConfigMap对象实现了将配置信息从容器镜像中解耦
,从而增强了工作负载的可移樟性、使其配置更易于更改和管理并避免了将配置数据硬编码到Pod配置清单中
注:ConfigMap不仅仅可以保存单个属性,也可以用来保存整个配置文件。
虽然configmap可以对各种应用程序提供定制配置服务,但是一般不用它来替代专门的配置文件,从Kubernetes v1.19
版本开始,ConfigMap
和Secret
支持使用immutable字段创建不可变实例。
Configmap 属于名称空间级别
基本属性:
root@master1ha1:~# kubectl explain cm
binaryData #二进制数据
data #文本数据,支持变量和文件
immutable <boolean> #设为true,不能被修改只能删除,默认为nil可以随时被修改
#注意:基于data的方式传递信息的话,会在pod的容器内部生成一个单独的数据文件