K8s 存储配置资源

存储配置对象

1. ConfigMap

应用在其初始化或运行期间要依赖一些配置信息。多数时候,存在要调整配置参数所设置的数值的需求。ConfigMap 是 Kubernetes 的一种机制,可以将配置数据注入到应用的 Pod 内部。

ConfigMap 允许将配置清单与镜像内容分离,以保持容器化的应用程序的可移植性。例如,可以下载并运行相同的容器镜像来启动容器,分别用于本地开发、系统测试或运行实时终端用户工作负载。

ConfigMap 不用来保存大量数据,如果超出,考虑用挂载存储卷或者用独立的数据库或者文件服务器。

用途

  • 用于存储非敏感的配置数据,如应用程序参数、配置文件、命令行参数等。
  • 数据以 key-value 形式保存,可供 Pod 挂载或通过环境变量读取。

1.1 创建 ConfigMap

最好使用yaml文件进行创建或修改,这样便于使用git进行管理,团队协作等.

命令行方式
复制代码
kubectl create configmap my-config \
  --from-literal=APP_MODE=production \
  --from-literal=TIMEOUT=30

由于多行内容需要转义和保持缩进,直接在命令中写入多行内容非常繁琐,不适合较大配置。

通过文件创建
  1. 先准备两个配置文件:

    echo 'server {
    listen 80;
    server_name a.example.com;
    location / {
    proxy_pass http://192.168.1.71:8080;
    }
    }' > a.conf

    echo 'server {
    listen 80;
    server_name b.example.com;
    location / {
    proxy_pass http://192.168.1.71:8081;
    }
    }' > b.conf

  2. 创建 ConfigMap:

    kubectl create configmap nginx-config --from-file=a.conf --from-file=b.conf


YAML 定义方式
复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  a.conf: |   # 竖杠"|"表示多行文本块
    server {
        listen 80;
        server_name a.example.com;
        location / {
            proxy_pass http://192.168.1.71:8080;
        }
    }
  b.conf: |
    server {
        listen 80;
        server_name b.example.com;

        location / {
            proxy_pass http://192.168.1.71:8081;
        }
    }

1.2 使用 ConfigMap

挂载到容器中
复制代码
apiVersion: v1
kind: Pod
metadata:
  name: nginx-proxy
spec:
  containers:
  - name: web
    image: nginx:1.23
    volumeMounts:
      - name: config
        mountPath: /etc/nginx/conf.d
  volumes:
  - name: config
    configMap:
      name: nginx-config
      items:
      - key: "a.conf"
        path: "a.com.conf"

解释: 卷定义及 ConfigMap 挂载

复制代码
volumes:
- name: config
  configMap:
    name: nginx-config
    items:
    - key: "a.conf"
      path: "a.com.conf"
  • volumes:Pod 使用的卷。
  • configMap.name: nginx-config:指定使用名为 nginx-config 的 ConfigMap。
  • items
    • key: "a.conf":ConfigMap 中的某个键。
    • path: "a.com.conf":在容器文件系统中保存为 /etc/nginx/conf.d/a.com.conf

运行效果

  • ConfigMap 中 a.conf 对应的值(通常是 nginx 的配置内容)会被写入容器中的 /etc/nginx/conf.d/a.com.conf 文件。

  • 容器启动时会加载该配置文件,提供对应的代理配置。


通过环境变量注入

在containers.env字段中定义环境变量,如:

复制代码
env:
  - name: WORKER_CONNECTION
    valueFrom: 
      configMapKeyRef:
        name: your_configmap_name
        key: your_selected_key

所有键值对都会以环境变量的形式注入容器。


2. Secret

Secret 是包含敏感数据的对象,使用 Secret 意味着不需要在代码中包含敏感数据。

Secrets 类似于配置映射,但具体用于保存机密数据,例如:为容器设置环境变量;向 Pod

提供 SSH 密钥或密码等凭证;允许 kubelet 从私有注册表中提取容器镜像等。

用途

  • 用于存储敏感数据,如密码、Token、SSH Key、TLS 证书等。

  • 数据默认以 Base64 编码存储(非加密),可启用加密存储功能。


2.1 创建 Secret

命令行方式(generic)
复制代码
kubectl create secret generic my-secret \
  --from-literal=username=admin \
  --from-literal=password=123456
命令行方式(docker-registry)
复制代码
kubectl create secret docker-registry my-docker-secret \
  --docker-server=https://index.docker.io/v1/ \
  --docker-username=myuser \
  --docker-password=mypass \
  --docker-email=myemail@example.com
命令行方式(tls)
复制代码
kubectl create secret tls my-tls-secret \
  --cert=server.crt \
  --key=server.key
YAML 定义方式(generic)
复制代码
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: YWRtaW4=   # base64(admin)
  password: MTIzNDU2   # base64(123456)

2.2 使用 Secret

挂载到容器中
复制代码
volumes:
- name: secret-volume
  secret:
    secretName: my-secret
containers:
- name: app
  image: busybox
  volumeMounts:
  - name: secret-volume
    mountPath: /etc/secret

容器内 /etc/secret/username/etc/secret/password 文件包含解码后的内容。


通过环境变量注入
复制代码
containers:
- name: app
  image: busybox
  envFrom:
  - secretRef:
      name: my-secret

usernamepassword 会以环境变量的形式注入容器。


3. 对比总结

特性 ConfigMap Secret
用途 存储非敏感配置数据 存储敏感数据(密码、密钥、证书)
数据存储 明文(etcd 中未加密) Base64 编码,可启用加密
使用方式 挂载 / 环境变量 挂载 / 环境变量

相关推荐
qetfw8 分钟前
Debian OpenLDAP 目录服务配置:DN、LDIF、ldapsearch 与认证验证
linux·运维·debian
词却15 分钟前
Linux基础:Linux环境搭建与远程连接
linux
不悔哥23 分钟前
Linux 小电视:稚晖君的开源桌面终端,从 6 层板到 Quark
linux
分布式存储与RustFS43 分钟前
RustFS 监控实战:OpenTelemetry Collector 把指标接入 Prometheus + Grafana
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
qq_349447951 小时前
在ollama下部署DeepSeek-r1模型(linux机器)
linux·运维·服务器
hehelm1 小时前
仿muduo库实现高并发服务器—Channel类
linux·服务器·开发语言·网络·c++
小此方1 小时前
Linux加餐(二):藏在Linux中的设计模式(二)单例模式与线程池
linux·单例模式·设计模式
猫吃了源码1 小时前
Linux系统制作 Ubuntu Server 24.04 启动U盘详细教程
linux·服务器·ubuntu
hehelm1 小时前
仿muduo库实现高并发服务器—EventLoop
linux·服务器·网络·c++
Lucky09281 小时前
codex 安装前置软件
linux·运维·macos