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

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

相关推荐
David爱编程10 分钟前
容器性能优化实战指南——防止“吃爆”服务器就靠这些招!
后端·docker·容器
炎码工坊34 分钟前
DevSecOps实践:用Terraform策略检查筑牢基础设施安全防线
网络安全·微服务·云原生·系统安全·安全架构
藥瓿锻37 分钟前
2024 CKS题库+详尽解析| 1. kube-bench 修复不安全项
运维·安全·docker·云原生·容器·kubernetes·cks
掘金-我是哪吒1 小时前
分布式微服务系统架构第146集:JavaPlus技术文档平台
分布式·微服务·云原生·架构·系统架构
容器魔方2 小时前
科大讯飞基于Volcano实现AI基础设施突破,赢得CNCF最终用户案例研究竞赛
云原生·容器·云计算
德育处主任2 小时前
亚马逊云 Lambda 容器化部署教程
后端·容器
程序员阿超的博客4 小时前
云原生核心技术 (10/12): K8s 终极实战:从零部署一个 Spring Boot + MySQL + Redis 应用
spring boot·云原生·kubernetes
风清再凯4 小时前
docker-compose容器单机编排
docker·容器·dubbo
互联网搬砖老肖6 小时前
Web 架构之 Kubernetes 弹性伸缩策略设计
前端·架构·kubernetes
Akamai中国7 小时前
什么是云计算的边缘原生应用?
人工智能·kubernetes·云计算·边缘计算