应用配置管理Secret&ConfigMap
1.Secret
常见的应用配置方式
- 镜像
- 配置中心
- 配置文件
- 共享存储
- 放到git 仓库
配置文件分类:
- 敏感信息
- 非敏感信息 如账号密码 服务器地址
Secret再k8s中 的使用方式
加密数据并存放Etcd中,让Pod的容器以挂载Volume方式访问。
应用场景:凭据
Pod使用secret两种方式:
- 变量注入
- 挂载
例:现在一对 用户名 密码 pod在运行的时候需要加载 注入到pod 中
假如现在 用户名:admin 密码:password
echo -n "admin" |base64
YWRtaW4=
echo -n "password" |base64
cGFzc3dvcmQ=
passwdAndusername-secret.yaml
apiVersion
pod怎样注入secret中的变量
secret-var-use.yaml
apiVersion
将secret挂载到pod文件中
secret-volume.yaml
apiVersion
三种类型secret
docker-registry 是配置docker私有仓库的认证信息,当yaml中指定了相应的secret 就可以获取到对应的变量值
kubectl create secret docker-registry myregistry --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=benjami
n7788 --docker-password=a7260488
imagePullSecrets
generic 通过传值 或者 指定本地文件的方式 创建secret
传值:
kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=123456
传文件:
echo -n admin > ./username
echo -n 123456 > ./password
kubectl create secret generic mysecret --from-file=./username --from-file=./password
tls 创建证书型secret一般用于 ingress 配置https 场景中
kubectl create secret tls secret-tls --cert=/root/learn/ssl/example.ctnrs.com.pem --key=/root/learn/ssl/example.ctnrs.com-ke
y.pem
tls
Secret官网:https://kubernetes.io/docs/concepts/configuration/secret/
2.ConfigMap
与Secret类似,区别在于ConfigMap保存的是不需要加密配置信息。
应用场景:应用配置
引用变量方式
configmap-string.yaml
apiVersion
config-var.yaml
apiVersion
挂载数据卷方式
cat config-volume.yaml
---
apiVersion
应用程序动态更新配置
ConfigMap更新时,业务也随之更新的方案:
- 当ConfigMap发生变更时,应用程序动态加载
- 触发滚动更新,即重启服务
但是问题是,如何触发应用reload?如何周期性的检查文件是否变化?
比如 我将configMap中定义的密码 由 123456 改为 password
然后重新应用程序,发现应用并未使用更新后的配置
只有将pod 进行重建后,才能加载到修改后的配置
kubectl delete po mypod4
kubectl apply -f config-volume.yaml
ConfigMap 官网:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/