一、什么是 ConfigMap?
在传统架构中,配置文件往往被保存在宿主机上,程序启动是可以指定某个配置文件,但是使用容器部署时,容器所在的节点并不固定,所以不能使用这种方式,此处在构建镜像时,如果把配置文件也放在容器里面,那么配置文件一旦有更改的话,也是一件非常麻烦的事情。所以k8s 抽象了一个 configMap的概念,将配置与 pod 和组件分开,这有助于保持工作负载的可移植性,使配置更易于更改和管理。比如在生产环境中,可以将 Nginx、Redis 等应用的配置文件存储在 ConfigMap 上,然后将其挂载即可使用、
相对于 secret,ConfigMap 更倾向于存储和共享非敏感、未加密的配置信息,假如是集群中使用敏感信息,最好使用 secret。
ConfigMap 用来在键值对数据库(etcd)中保存非加密数据。一般用来保存配置文件。
ConfigMap 可以用作环境变量、命令行参数或者存储卷。
ConfigMap 将环境配置信息与容器镜像 解耦,便于配置的修改。
ConfigMap 在设计上不是用来保存大量数据的。
ConfigMap 中保存的数据不可超过1 MiB。
二、创建ConfigMap
- 针对目录创建configmap
- 先创建测试目录
-
- 在测试目录下写入几个测试文件
-
- 创建一个configmap
-
- 查看创建的configmap的信息
-
- 以yaml文件的方式查看创建的configmap的详细信息
- 针对文件创建configmap
- 在测试目录下创建一个新的测试文件
-
- 在创建时直接跟上文件名称
-
- 以yaml文件的格式查看针对文件创建的configmap
- 创建带有key值的configmap
- 针对文件创建指定数量的带有key值的configmap
-
- 以yaml文件的格式查看创建出来的configmap详细信息
- 创建为Pod引用变量的configmap
- 在测试目录下创建一个变量文件
-
- 针对变量文件创建configmap
-
- 查看详细信息
- 创建基于字符值的configmap
- 删除configmap
- 基于valueFrom的方式创建configmap(变量的名称可以和初始的名称不一样,可已有选择性的选择一部分变量)
- 先以字符的形式创建configmap
-
- 创建有变量的Pod
-
- 查看log
- 基于envFrom的方式创建configmap(变量的名称和初始名称一致)
- 使用envFrom从configmap定义变量
-
- 创建此Pod
-
- 查看log
- 以文件的形式挂载configmap
- 先创建测试文件
-
- 使用带有key的命令创建configmap
-
- 查看创建的configmap
-
- 编写文件,将名为spec-config的configMap 挂载到容器的/etc/config 目录下
-
- 创建此Pod
(/etc/conf目录会被覆盖)
-
- 查看Pod创建结果
-
- 登录到容器,查看挂载结果
- 自定义文件名挂载configmap
- 编写Pod文件
-
- 创建此Pod
-
- 查看创建结果
-
- 登录容器查看挂载结果
-
- 查看挂载文件的权限
- 指定挂载的文件权限
- 编写Pod文件,指定文件的权限(dapi-teste3-pod.yaml)
-
- 创建此Pod
-
- 查看创建结果
-
- 登录容器查看文件的权限
- 利用SubPath解决挂载覆盖的问题
- 创建测试用的配置文件
-
- 使用带有key的命令创建configmap
-
- 查看configmap
-
- 创建Pod文件,挂载文件
-
- 创建此Pod
-
- 查看创建结果
-
- 登录容器查看挂载结果
然后:cat /etc/nginx/nginx.conf
- 利用secret加密数据管理
- 使用kubectl创建secret
- 首先创建账户信息
- 使用kubectl创建secret
-
-
- 以文件的方式创建secret
-
-
-
- 查看secret
-
-
-
- 查看加密详细信息
-
-
- 使用yaml文件创建secret
- 先对明文进行编码(手动创建 Secret 时,每一项内容必须是 base64 编码的)
- 使用yaml文件创建secret
-
-
- 创建一个yaml文件(db-user-secret.yaml),格式如下
-
-
-
- 通过此yaml文件创建一个secret
-
-
-
- 查看创建的secret
-
- 解码secret
- 查看创建的secret,以获取加密的信息
-
- 把加密过的数据复制出来,使用base64,解密