一、ConfigMap
二、Secret
三、应用程序如何动态更新配置
一、ConifgMap
创建ConfigMap后,数据实际会存储在k8s的Etcd中,然后通过创建pod时引用该数据
应用场景:应用程序配置
Pod使用configmap数据有两种形式:
a、变量注入:将键值数据类型注入到容器系统变量,程序读取系统变量获取到值
b、数据卷挂载:将数据挂载到容器中某个目录,程序读取这个文件,如果是配置文件,程序默认有配置文件目录,那就直接挂载到指定的目录即可
示例:
configmap.yaml
# kubectl apply -f configmap.yaml
# kubectl get configmap
二、Secret
与configmap类似,区别在于Secret主要存储敏感数据,所有的数据要经过base64编码。
应用场景:凭据
kubectl create secret支持三种数据类型:
a、docker-registry(kubernetes.io/dockerconfigjson):存储镜像仓库认证信息
b、generic(Opaque):存储密码、秘钥等
c、tls(kubernetes.io/tls):存储TLS证书
账号密码示例;
# kubectl apply -f secret.yaml
三、应用程序如何动态更新配置
应用程序正在运行,如果修改配置文件,会不会立即生效:
a、热启,通过程序加载
b、一般都是冷处理,重启应用
c、给程序预留一个接口,用于通知动态加载配置,如:nginx -s reload
d、采用配置管理系统。如:apollo、disconf等
应用程序动态更新配置方案:
a、当ConfigMap发生变更时,应用程序自动感知动态加载(需要程序自身支持)
b、触发滚动更新,即重启服务