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

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

相关推荐
吴爃25 分钟前
Spring Boot 项目在 K8S 中的打包、部署与运维发布实践
运维·spring boot·kubernetes
人工智能培训2 小时前
工程科研中的AI应用:结构力学分析技巧
人工智能·深度学习·机器学习·docker·容器
子木HAPPY阳VIP3 小时前
信创UOS,Docker 完整操作部署(Dockerfile部署方式)&排错整合
linux·运维·redis·nginx·docker·容器·tomcat
The Straggling Crow3 小时前
Monitoring 2026-04-30
kubernetes
AOwhisky3 小时前
Kubernetes调度与服务暴露:从“定时任务”到“服务发现”的完全指南
linux·运维·云原生·容器·kubernetes·服务发现
Cyber4K3 小时前
【Kubernetes专项】温故而知新,重温技术原理(6)
云原生·容器·kubernetes
叶总没有会4 小时前
Docker:项目部署
运维·docker·容器
爱学习 爱分享4 小时前
docker 本地装瀚高 4.5 数据库
数据库·docker·容器
叶总没有会5 小时前
Docker入门
运维·docker·容器
发现你走远了5 小时前
极简后端环境搭建:一行 Docker 命令部署四大核心数据库(避坑 PG 18+)
数据库·docker·容器