configMap资源配置
# configMap资源
# configMap介绍
configMap用于提供配置中心的功能,它能将配置从集群外部注入到集群容器内部。
且它的配置支持动态修改,当某配置发生变动时,configMap会通知给引用了该配置的容器,让其重载配置文件。但是只对存储卷方式有效,环境变量方式无效。
不过他是明文存储信息的,所以某些敏感信息不应该使用它进行存储,而是应该使用Secret。
# 数据格式
configMap使用键值对方式定义数据,且值没有长度限制。
# 注入方式
- 第一种方式
- 在Pod中的containers.env.valuefrom引用。将configMap中的配置,作为Pod中容器的环境变量注入进容器内部。
- 第二种方式
- 在Pod中的volumes.configMap中定义,然后在containers.volumeMounts中引用。将configMap中的配置,作为一个存储卷,挂载到Pod中容器的应用程序读取配置文件的路径。
- 例子
# 创建configMap配置
kubectl create configMap nginx_conf --from-literal=nginx_port=80
# Pod引用configMap为环境变量
env:
name: nginx_port
valueFrom:
configMapKeyRef:
name: nginx_conf
key: nginx_port
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 创建方式
使用kubectl create configmap命令行创建。
- 指定键值对创建:
kubectl create configmap [配置名] --from-literal=[键名]=[值] --from-literal=[键名]=[值]...
- 指定文件内容作为值创建,不指定键名会将文件名当键名,文件内容当值。
kubectl create configmap [配置名] --from-file=[键名]=[文件路径]
kubectl create configmap [配置名] --from-file=[文件路径]
- 指定键值对创建:
使用yaml资源配置清单进行创建。
apiVersion: v1 kind: ConfigMap metadata: name: test # 指定configMap数据,注意:ConfigMap和Secret都不需要spec data: nginx_worker: root nginx.port: "80" # 多行文本,注意:文本内容需要缩进 mysql.conf: | [mysqld] log-bin log_bin_trust_function_creators=1 lower_case_table_names=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# secret资源
# secret介绍
它和configMap提供的功能差不多,不过他的值是密文存储信息的,所以某些敏感信息可以使用它进行存储,比如密码、证书等。
但并非加密得很安全,只是提供了些许的安全性,使用base64 -d就能解密出来。
应用方式和configMap差不多,参考即可。
# secret命令标识类型
generic
- 通用,可以保存密码等。tls
- 可以保存私钥、证书。docker-registry
- 可以保存私有仓库的镜像的认证信息。
# 创建方式
- 使用kubectl create secret命令行创建。
- generic:
kubectl create secret generic [secret名] --from-literal=[键名]=[值]...
- tls:
kubectl create secret tls [secret名] --cert=证书 --key=秘钥
- docker-registry:
kubectl create secret docker-registry [secret名] --docker-username=用户名 --docker-password=密码 --docker-email=邮箱
- generic:
- 使用yaml资源配置清单进行创建。
apiVersion: v1
kind: Secret
metadata:
name: test
# 指定secret数据,使用键值对方式定义数据,值如果是纯数字应该加上双引号
# 如果类型为generic,则定义的值需要事先使用base64进行加密
type: Opaque
data:
password: "aGVsbG93cHJsZA=="
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
type <string>
- 指定secret类型。Opaque
- 可用来存储密码、密钥、信息、证书等,要求value是base64编码格式。- 命令式创建类型标识为generic。
kubernetes.io/tls
- 可以保存私钥、证书,用于保存TLS客户端或者服务器端的数据,用于为SSL通信模式存储证书和私钥文件。- 命令式创建类型标识为tls。
kubernetes.io/dockerconfigjson
- 用来存储私有docker仓库的认证信息,要求value是BASE64加密的Json序列化格式的认证信息,格式如下:# value格式 data: .dockerconfigjson: # 下面这串需要BASE64加密 {"auths":{ "镜像HTTP地址":{ "username":"用户名", "password":"密码", "auth":"BASE64二次加密的:用户名:密码" }}} # 例如: data: .dockerconfigjson: eyJhdXRocyI6eyJodHRwczovL2luZGV4LmRvY2tlci5pby92MS8iOnsidXNlcm5hbWUiOiJ0ZXN0IiwicGFzc3dvcmQiOiJwYXNzd29yZCIsImF1dGgiOiJkR1Z6ZERwd1lYTnpkMjl5WkE9PSJ9fX0=
1
2
3
4
5
6
7
8
9
10
11
12
13
14- 命令式创建类型标识为docker-registry。