分布式环境中,基于负载、容错等需求的考虑,几乎所有的服务都需要在不同的机器节点上部署不止一个实例。随着程序日益复杂,程序的配置日益增多,而且配置文件的修改频率大于代码本身,这种情况下,有时候修改一个配置就不得不重新编译代码,分发上线。部署规则较大的场景中,是相当复杂、繁琐的
ConfigMap
作为分布式Kubernetes也提供了统一配置管理方案,基于ConfigMap对象实现了将配置文件从容器镜像中解耦,从而增强了容器应用的可移植性。
创建
apiVersion: v1data:# K V 形式存储ca.crt: "xxxx"kind: ConfigMapmetadata:name: kube-root-ca.crtnamespace: base
环境变量使用
env:- name: testvalueFrom:configMapKeyRef:name: configmap_namekey: map_key# 引用正哥文件envFrom:# 前缀- prefix: alibabaconfigMapRef:name: configmap_nameoptional: false
挂载存储卷使用
volumes:- name: testconfigMap:# 导出全部文件name: configmap_name# 指定配置items:- key: xxx.confpath: xxxx.conf# 权限0-777mode: 0644
注意事项
- 以存储卷引用的方式ConfigMap 时候必须先与Pod存在,否则导致Pod无法正常启动的错误
- 当环境变量注入的ConfigMap中的键不存在时会被忽略
- ConfigMap 的名称空间级的资源,因此Pod必须与其在同一个命名空间
Secret
与ConfigMap功能类似,但它专用与存放敏感数据,例如:密码、数字证书、秘钥、令牌 在Secret 里数据都使用Base64编码字符串存储
创建
apiVersion: v1data:.dockerconfigjson: >-eyJhdXRocyI6eyJyZWdpc3RyeS12cGMuY24tc2hhbmdoYWkuYWxpeXVuY3MuY29tIjp7InVzZXJuYW1lIjoiaWQtYWx5QGJpbGxiZWFyLmNuIiwicGFzc3dvcmQiOiIyMDIwYmlsbGJlYXIuY24iLCJhdXRoIjoiYVdRdFlXeDVRR0pwYkd4aVpXRnlMbU51T2pJd01qQmlhV3hzWW1WaGNpNWpiZz09In19fQ==kind: Secretmetadata:name: aliyun-shanghainamespace: basetype: kubernetes.io/dockerconfigjson
环境变量使用
env:- name: testvalueFrom:secretKeyRef:key: secretKeyName_Keyname: secretKeyName
挂载存储卷使用
volumes:- name: volume-namesecret:defaultMode: 420secretName: secretKeyNameitems:- key: xxx.confpath: xxxx.conf# 权限0-777mode: 0644
拉取镜像配置
containers:image: 'registry-vpc.cn-shanghai.aliyuncs.com/shlx/billbear-book-client:dev'imagePullPolicy: Alwaysname: billbear-book-clientimagePullSecrets:- name: aliyun-shanghai
Ingress TLS 配置
spec:ingressClassName: nginxrules:- host: xxx.comhttp:paths:- backend:service:name: xxx-svcport:number: 80path: /pathType: ImplementationSpecifictls:- hosts:- xxx.comsecretName: secretName
