Kubernetes那点事儿——配置存储:ConfigMap、Secret

配置存储:ConfigMap、Secret


前言

前面介绍过的各种存储主要都是做数据的持久化,本节介绍的ConfigMap和Secret主要用于配置文件存储,或者环境变量的配置。

ConfigMap

创建ConfigMap后,数据实际会存储在K8s中(Etcd)Etcd,然后通过创建Pod时引用该数据。

应用场景:应用程序配置

Pod使用configmap数据有两种方式:

  • 变量注入
  • 数据卷挂载
yaml 复制代码
# cat configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-demo
data:
  # 类属性键;每一个键都映射到一个简单的值
  abcd: "1234"
  cdef: "5678"

   # 类文件键
  redis.properties: |
    port: 6379
    host: 192.168.31.10

#configmap pod引用#
apiVersion: v1
kind: Pod
metadata:
  name: configmap-demo-pod
spec:
  containers:
  - name: configmap-pod
    image: nginx
    env:
      - name: ABCD # pod中环境变量 - echo $ABCD
        valueFrom:
          configMapKeyRef:
            name: configmap-demo # 与configmap.name一致
            key: abcd # 取值的key
      - name: CDEF # pod中环境变量 - echo $CDEF
        valueFrom:
          configMapKeyRef:
            name: configmap-demo # 与configmap.name一致
            key: cdef # 取值的key
    volumeMounts:
    - name: config
      mountPath: "/config"
      readOnly: true
  volumes:
  - name: config
    configMap:
      name: configmap-demo # 与configmap.name一致
      # 来自 ConfigMap 的一组键,将被创建为文件
      items:
      - key: "redis.properties" # 对用configmap的key名称
        path: "redis.properties" # 文件名字,/config/redis.properties
bash 复制代码
# kubectl apply -f configmap.yaml
configmap/configmap-demo created

# kubectl get configmap
NAME             DATA   AGE
configmap-demo   3      5s

# kubectl apply -f configmap-pod.yaml 
pod/configmap-demo-pod configured

# kubectl exec -it configmap-demo-pod -- bash 
root@configmap-demo-pod:/# ls /config
redis.properties
root@configmap-demo-pod:/# echo $ABCD
1234
root@configmap-demo-pod:/# echo $CDEF
5678
root@configmap-demo-pod:/# cat /config/redis.properties 
port: 6379
host: 192.168.31.10

这里使用了两种挂载方式,环境变量和配置文件。

被挂载的 ConfigMap 内容会被自动更新当卷中使用的 ConfigMap 被更新时,所投射的键最终也会被更新。

Kubelet 组件会在每次周期性同步时检查所挂载的 ConfigMap 是否为最新。Kubelet 使用的是其本地的高速缓存来获得 ConfigMap 的当前值。高速缓存的类型可以通过 KubeletConfiguration 结构,ConfigMapAndSecretChangeDetectionStrategy 字段来配置。

Secret

与ConfigMap类似,区别在于Secret主要存储敏感数据,所有的数据要经过base64编码。

应用场景:凭据

kubectl create secret 支持三种数据类型:

  • docker-registry:存储镜像仓库认证信息
  • generic:从文件、目录或者字符串创建,例如存储用户名密码
  • tls:存储证书,例如HTTPS证书
bash 复制代码
# echo -n 'admin' | base64
YWRtaW4=

# echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm
yaml 复制代码
# cat secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: db-user-pass
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm



# cat secret-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: secret-demo-pod
spec:
  containers:
  - name: secret-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-dbusername
bash 复制代码
# kubectl exec -it secret-demo-pod  -- bash

root@secret-demo-pod:/# echo $USER $PASS
admin 1f2d1e2e67df
root@secret-demo-pod:/# cat /config/my-dbusername
admin

这里也是使用了两种挂载方式,一种是环境变量,一种是作为文件挂载

相关推荐
帅帅梓38 分钟前
docker图形化管理
docker·容器·eureka
努力搬砖的咸鱼7 小时前
容器之间怎么通信?Docker 网络全解析
网络·docker·云原生·容器
liming4959 小时前
Ubuntu18.04部署k8s
云原生·容器·kubernetes
YC运维11 小时前
Kubernetes资源管理全解析
java·容器·kubernetes
Leinwin12 小时前
微软发布Azure Kubernetes Service Automatic国际版
microsoft·kubernetes·azure
不爱笑的良田13 小时前
从零开始的云原生之旅(六):DaemonSet 实战日志采集器
云原生
chinesegf13 小时前
Docker篇6-项目app.py和flask_app.service配置和映射到docker中
docker·容器·flask
退役小学生呀13 小时前
二十二、DevOps:基于Tekton的云原生平台落地(三)
linux·云原生·容器·kubernetes·k8s·devops·tekton
橙色云-智橙协同研发13 小时前
PLM实施专家宝典:离散制造企业跨域协同与数字化审核方案
云原生·解决方案·数字化转型·plm·国产plm·工程方案·专家总结
维尔切13 小时前
搭建 k8s
云原生·容器·kubernetes