ConfigMap
ConfigMap 允许您将配置文件与镜像文件分离,以使容器化的应用程序具有可移植性。该页面提供了一系列使用示例,这些示例演示了如何使用存储在 ConfigMap 中的数据创建 ConfigMap 和配置 Pod。ConfigMap API给我们提供了向容器中注入配置信息的机制,ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。
配置数据可以通过很多种方式在Pods里被使用。ConfigMaps可以被用来:
- 设置环境变量的值
- 在容器里设置命令行参数
- 在数据卷里面创建config文件
用户和系统组件两者都可以在ConfigMap里面存储配置数据。
创建
使用目录或文件创建
你可以使用 kubectl create configmap name --from-file= 从同一目录中的多个文件创建 ConfigMap。
1 | # 创建本地目录 |
运行结果:
1 | [root@master file]# kubectl get cm |
从env文件创建
当使用多个 --from-env-file 来从多个数据源创建 ConfigMap 时,仅仅最后一个 env 文件有效:
1 | # 环境文件包含环境变量列表。 |
命令创建
可以将 kubectl create configmap 与 --from-literal 参数一起使用,从命令行定义文字值:
1 | [root@master file]# kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm |
生成器创建
使用 kustomization 目录创建 ConfigMap 对象
1 | [root@master kustomization]# cat kustomization.yaml |
或者也可以使用生成器来实现。
1 | cat <<EOF >./kustomization.yaml |
使用
env法
使用 configMapKeyRef 传入值:
1 | apiVersion: v1 |
上述yaml表示,新建一个名为SPECIAL_LEVEL_KEY的环境变量,其值来源于configMap里面的special.how
1 | [root@master file]# kubectl get pod dapi-test-pod |
上一个例子是有指定一个具体的KEY,如果没有指定呢?
1 | [root@master file]# cat pod-configmap-envFrom.yaml |
注意看KEY与VALUE的关系。
挂载文件目录法
可以使用 volumeMounts 方法进行挂载的。
1 | [root@master file]# cat pod-configmap-volume.yaml |
上述yaml表示将special-config这个cm挂载至/etc/config目录下。可以看到,其每一个KEY都是会生成一个文件,文件的内容为value的值。
1 | [root@master file]# kubectl apply -f pod-configmap-volume.yaml |
也可以挂载单独的KEY:
1 | [root@master file]# cat pod-configmap-volume-specific-key.yaml |
将KEY special.how挂载到 /etc/config目录下,其文件名使用path变成了keys:
1 | [root@master file]# kubectl exec -it dapi-test-pod -- /bin/sh |
热更新的问题
刚上述dapi-test-pod保持运行。使用 kubectl edit cm special-config 去修改special.how的值。可以发现是可以更新的,但时间要超过10S。
1 | [root@master file]# kubectl exec -it dapi-test-pod -- cat /etc/config/keys |
使用volumes挂载的方式是可以更新configMap的,但是使用env方式导给POD是更新不了的。
实例:使用CM挂载redis配置
1 | [root@master redis]# ll |
使用 kubectl apply -k . 创建:
1 | [root@master redis]# kubectl apply -k . |
等待redis运行之后,去查看一下redis的配置。
1 | [root@master redis]# kubectl get po redis |
可以看到/redis-master-data为空目录,而/redis-master是redis的配置文件。
实例:redis更新: https://kubernetes.io/zh/docs/tutorials/configuration/configure-redis-using-configmap/
Secrets
Secret有三种类型:
- Opaque:base64编码格式的Secret,用来存储密码、密钥等;但数据也通过
base64 –decode解码得到原始数据,所以加密性很弱。 - kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息。
- kubernetes.io/service-account-token: 用于被serviceaccount引用。serviceaccout创建时Kubernetes会默认创建对应的secret。Pod如果使用了serviceaccount,对应的secret会自动挂载到Pod目录/run/secrets/ kubernetes.io/serviceaccount中。
Secret类型
Opaque类型
Opaque类型的数据是一个map类型,要求value是base64编码格式,如果您使用的密码具有特殊字符,则需要使用 \\ 字符对其进行转义。
文件创建
1 | [root@master Secret]# echo -n 'admin' > ./username.txt |
默认情况下,kubectl get 和 kubectl describe 是不会显示密码的内容。 这是为了防止机密被意外地暴露给旁观者或存储在终端日志中。
手工创建
也可以手工创建,如下:
1 | echo -n 'admin' | base64 |
现在可以像这样写一个 secret 对象:
1 | apiVersion: v1 |
使用stringData字段,是可以加密整个配置文件。
1 | [root@master Secret]# cat stringData.yaml |
也可以从生成器创建,请查看:生成器
doccker secret
可以直接用kubectl命令来创建用于docker registry认证的secret:
1 | $ kubectl create secret docker-registry myregistrykey |
service-account-token
用于被serviceaccount引用。serviceaccout创建时Kubernetes会默认创建对应的secret。Pod如果使用了serviceaccount,对应的secret会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中。
Secret 是一种包含少量敏感信息例如密码、token 或 key 的对象。这样的信息可能会被放在 Pod spec 中或者镜像中;将其放在一个 secret 对象中可以更好地控制它的用途,并降低意外暴露的风险。
第一个POD都会有一个SA,如下:
1 | [root@master redis]# kubectl exec -it myweb-lqr4n -- /bin/bash |
使用方法
Secret 可以作为数据卷被挂载,或作为环境变量暴露出来以供 pod 中的容器使用。它们也可以被系统的其他部分使用,而不直接暴露在 pod 内。 例如,它们可以保存凭据,系统的其他部分应该用它来代表您与外部系统进行交互。
volume挂载法
1 | [root@master Secret]# cat pod-volume-secrets.yaml |
也可以将单独的KEY挂载到指定的目录下。
1 | [root@master Secret]# cat pod-volume-secrets2.yaml |
环境变量引用
1 | [root@master Secret]# cat pod-env-secrets.yaml |
Secrets其用法是跟ConfigMap基本上是一致,区别不同是ConfigMap是明文,而Secrets是经过base64加密过的。
参考链接
- ConfigMap:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-pod-configmap/
- secrets:https://kubernetes.io/zh/docs/concepts/configuration/secret/
- Kubernetes之ServiceAccount+Secret:https://blog.csdn.net/BigData_Mining/article/details/88529157