目录
ConfigMap
示例
Secret
示例
其他方式创建configmap和secret
应用程序动态更新配置方案:
ConfigMap ConfigMap是一个K8s存储资源,用于存储应用程序配置文件。 Pod使用configmap数据有两种方式: • 变量注入 • 数据卷挂载 示例:
示例
先创建一个configMap
vi configMap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap-demo
data:
abc: "123"
cde: "456"
redis-config: |
port: 6379
host: 192.168.31.10
{'aaa': 123}
kubectl apply -f configMap.yaml
kubectl get configmap
可以看到这个configmap上面对应有有三个数据
创建测试pod引用
vi pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: configmap-demo-pod
spec:
containers:
- name: web
image: nginx
env:
- name: ABCD
valueFrom:
configMapKeyRef:
name: configmap-demo
key: abc
- name: CDEF
valueFrom:
configMapKeyRef:
name: configmap-demo
key: cde
volumeMounts:
- name: config
mountPath: "/config"
readOnly: true
volumes:
- name: config
configMap:
name: configmap-demo
items:
- key: "redis-config"
path: "redis.properties"
kubectl apply -f pod.yaml
容器运行成功后进入容器
可以看到写入configmap的变量都写入了
挂载数据也挂载完成
Secret
Secret与ConfigMap类似,区别在于Secret主要存储敏感数据。 可存储以下三种数据类型:
• docker-registry(kubernetes.io/dockerconfigjson):存储镜像仓库认证信息
• generic(Opaque):存储密码、密钥等(yaml里数据需经过base64编码)
• tls(kubernetes.io/tls):存储TLS证书
secret用来存加密数据,所以其中数据都有经过加密算法加密过,
示例
先将密码base64脱敏
echo -n 'aliang' |base64
写一个测试yaml
vi secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: db-user-pass
type: Opaque
data:
username: YWxpYW5n
password: MTIzNDU2
执行
查看k8s内所有secret存储
kubectl get secret
创建pod引用此secret
vi pod-secret.yaml
apiVersion: v1
kind: Pod
metadata:
name: secret-demo-pod
spec:
containers:
- name: demo
image: nginx
env:
- name: USER
valueFrom:
secretKeyRef:
name: db-user-pass
key: username
- name: PASS
valueFrom:
secretKeyRef:
name: db-user-pass
key: password
volumeMounts:
- name: config
mountPath: /config
readOnly: true
volumes:
- name: config
secret:
secretName: db-user-pass
items:
- key: username
path: my-username
执行
进入pod测试
注意:变量都在env中
成功
其他方式创建configmap和secret
cronjob是本地的文件,可以是其他的
kubectl create configmap test --from-file=yaml666=CronJob.yaml
可以看到test创建成功
打开test的详细信息,可以看见此yaml已经被引用
应用程序动态更新配置方案:
即当程序配置文件更新后,成功需要响应新配置文件的话
• 当ConfigMap发生变更时,应用程序自动感知动态加载(需要程序自身支持)
• 触发滚动更新,即重启服务
• 给程序预留一个接口,用于通知动态加载配置(Sidecar),例如nginx -s reload
vi secret.yaml
apiVersion: v1 kind: Secret metadata: name: db-user-pass type: Opaque data: username: YWxpYW5n password: MTIzNDU2执行 查看k8s内所有secret存储
kubectl get secret创建pod引用此secret
vi pod-secret.yaml
apiVersion: v1 kind: Pod metadata: name: secret-demo-pod spec: containers: - name: demo image: nginx env: - name: USER valueFrom: secretKeyRef: name: db-user-pass key: username - name: PASS valueFrom: secretKeyRef: name: db-user-pass key: password volumeMounts: - name: config mountPath: /config readOnly: true volumes: - name: config secret: secretName: db-user-pass items: - key: username path: my-username执行 进入pod测试 注意:变量都在env中 成功



