目录

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
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐