【k8s应用管理】kubernetes 配置资源管理

打印 上一主题 下一主题

主题 1031|帖子 1031|积分 3093

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
配置资源管理

Secret 是一种用于存储敏感信息(如暗码、令牌、密钥等)的资源对象。与直接将敏感信息存储在 Pod 或镜像中相比,利用 Secret 可以更好地控制数据的访问权限,淘汰数据暴露的风险。
Secret 的四种类型


  • kubernetes.io/service-account-token

    • 由 Kubernetes 主动创建,用于访问 APIServer。
    • Pod 默认利用这个 Secret 与 APIServer 通信。
    • 主动挂载到 Pod 的 /var/run/secrets/kubernetes.io/serviceaccount 目录中。

  • Opaque

    • 默认的 Secret 类型,利用 base64 编码存储用户自定义的敏感数据(如暗码、密钥等)。

  • kubernetes.io/dockerconfigjson

    • 用于存储私有 Docker Registry 的认证信息。

  • kubernetes.io/tls

    • 用于存储 TLS 证书和私钥信息。

创建 Secret 的两种方式

1. 利用 kubectl create secret 命令创建

  1. echo -n 'zhangsan' > username.txt
  2. echo -n 'abc1234' > password.txt
  3. kubectl create secret generic mysecret --from-file=username.txt --from-file=password.txt
复制代码
查看 Secret:
  1. kubectl get secrets
  2. kubectl describe secret mysecret
复制代码
2. 利用 base64 编码内容创建

  1. echo -n zhangsan | base64
  2. echo -n abc1234 | base64
复制代码
创建 secret.yaml 文件:
  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4.   name: mysecret1
  5. type: Opaque
  6. data:
  7.   username: emhhbmdzYW4K=
  8.   password: YWJjMTIzNAo==
复制代码
应用 YAML 文件:
  1. kubectl create -f secret.yaml
复制代码
查看 Secret 的详细信息:
  1. kubectl get secret mysecret1 -o yaml
复制代码
利用 Secret 的两种方式

1. 将 Secret 挂载到 Volume 中

创建 secret-test.yaml 文件:
  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: mypod
  5. spec:
  6.   containers:
  7.   - name: nginx
  8.     image: nginx
  9.     volumeMounts:
  10.     - name: secrets
  11.       mountPath: "/etc/secrets"
  12.       readOnly: true
  13.   volumes:
  14.   - name: secrets
  15.     secret:
  16.       secretName: mysecret
复制代码
应用 YAML 文件:
  1. kubectl create -f secret-test.yaml
复制代码
进入 Pod 查看挂载的文件:
  1. kubectl exec -it mypod bash
  2. cd /etc/secrets
  3. ls
  4. cat username.txt
  5. cat password.txt
复制代码
2. 将 Secret 导出到环境变量中

创建 secret-test1.yaml 文件:
  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: mypod1
  5. spec:
  6.   containers:
  7.   - name: nginx
  8.     image: nginx
  9.     env:
  10.       - name: TEST_USER
  11.         valueFrom:
  12.           secretKeyRef:
  13.             name: mysecret1
  14.             key: username
  15.       - name: TEST_PASSWORD
  16.         valueFrom:
  17.           secretKeyRef:
  18.             name: mysecret1
  19.             key: password
  20.     envFrom:
  21.     - secretRef:
  22.         name: mysecret1
复制代码
应用 YAML 文件:
  1. kubectl apply -f secret-test1.yaml
复制代码
进入 Pod 查看环境变量:
  1. kubectl exec -it mypod1 bash
  2. echo $TEST_USER
  3. echo $TEST_PASSWORD
复制代码
总结



  • Secret 是 Kubernetes 中用于存储敏感信息的资源对象。
  • 可以通过命令行或 YAML 文件创建 Secret。
  • Secret 可以通过挂载 Volume 或环境变量的方式在 Pod 中利用。
  • 利用 Secret 可以有效淘汰敏感信息的暴露风险,并方便管理。
更多详细信息可以参考 Kubernetes 官方文档:Secrets。

ConfigMap

ConfigMap 概述



  • 作用:存储非加密的配置数据(如应用配置、环境变量),与 Secret 类似,但用于非敏感信息。
  • 应用场景:管理应用的配置参数(如数据库地点、日志级别)。
  • 核心特点

    • 支持从文件、目录或字面值创建。
    • 数据以键值对(key-value)形式存储。
    • 可注入到 Pod 的环境变量、命令行参数或挂载为文件。

创建 ConfigMap 的三种方式

从目录创建

将目录中所有文件作为键值对,键为文件名,值为文件内容。
  1. mkdir /opt/configmap
  2. echo 'enemy.types=aliens,monsters' > /opt/configmap/game.config
  3. echo 'color.good=purple' > /opt/configmap/ui.config
  4. kubectl create configmap game-config --from-file=/opt/configmap/
复制代码
从文件创建

指定多个文件,每个文件对应一个键值对。
  1. kubectl create configmap game-config-2 \
  2.   --from-file=/opt/configmap/game.config \
  3.   --from-file=/opt/configmap/ui.config
复制代码
从字面值创建

直接通过命令行参数定义键值对。
  1. kubectl create configmap special-config \
  2.   --from-literal=special.how=very \
  3.   --from-literal=special.type=good
复制代码
查看 ConfigMap
  1. kubectl get cm
  2. kubectl describe cm game-config
  3. kubectl get cm special-config -o yaml
复制代码
在 Pod 中利用 ConfigMap

作为环境变量

通过 valueFrom 或 envFrom 注入。
  1. # env.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5.   name: test-pod
  6. spec:
  7.   containers:
  8.   - name: busybox
  9.     image: busybox:1.28.4
  10.     command: [ "/bin/sh", "-c", "env" ]
  11.     env:
  12.       - name: SPECIAL_HOW_KEY
  13.         valueFrom:
  14.           configMapKeyRef:
  15.             name: special-config  # 引用 ConfigMap
  16.             key: special.how      # 指定键
  17.     envFrom:
  18.       - configMapRef:
  19.           name: env-config        # 注入所有键值对
复制代码
作为命令行参数

在 command 中通过环境变量引用。
  1. # test-pod2.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5.   name: test-pod2
  6. spec:
  7.   containers:
  8.   - name: busybox
  9.     image: busybox:1.28.4
  10.     command:
  11.       - "/bin/sh"
  12.       - "-c"
  13.       - "echo $(SPECIAL_HOW_KEY) $(SPECIAL_TYPE_KEY)"  # 使用环境变量
  14.     env:
  15.       - name: SPECIAL_HOW_KEY
  16.         valueFrom:
  17.           configMapKeyRef:
  18.             name: special-config
  19.             key: special.how
复制代码
挂载为数据卷

将 ConfigMap 作为文件挂载到容器目录。
  1. # test-pod3.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5.   name: test-pod3
  6. spec:
  7.   containers:
  8.   - name: busybox
  9.     image: busybox:1.28.4
  10.     volumeMounts:
  11.     - name: config-volume
  12.       mountPath: /etc/config     # 挂载到容器内的目录
  13.   volumes:
  14.     - name: config-volume
  15.       configMap:
  16.         name: special-config     # 引用的 ConfigMap
复制代码
验证挂载文件
  1. kubectl exec -it test-pod3 -- cat /etc/config/special.how
  2. # 输出:very
复制代码
ConfigMap 的热更新

1. Volume 主动更新



  • 修改 ConfigMap 后,挂载为 Volume 的文件会主动更新(约 10 秒延长)。
  • 示例

    • 更新 ConfigMap:
      1. kubectl edit cm log-config  # 将 log_level 从 INFO 改为 DEBUG
      复制代码
    • 查看容器内文件:
      1. kubectl exec <pod-name> -- cat /etc/config/log_level  # 输出 DEBUG
      复制代码

2. 环境变量不更新



  • 环境变量不会主动更新,需重启 Pod 或触发滚动更新。
3. 触发滚动更新

通过修改 Deployment 的注解触发 Pod 重启:
  1. kubectl patch deployment my-nginx \
  2.   --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20231101"}}}}}'
复制代码
注意


  • ConfigMap 与 Secret 的区别:ConfigMap 存储非敏感数据,Secret 存储敏感数据(如暗码)。
  • 更新限定

    • Volume 挂载的文件支持热更新,但环境变量需重启 Pod。
    • 更新 ConfigMap 后,已存在的 Pod 需手动触发更新(如滚动部署)。

  • 巨细限定:单个 ConfigMap 的 data 字段总巨细不超过 1 MiB。
  • ConfigMap 是 Kubernetes 管理非敏感配置的核心组件。
  • 支持从文件、目录或字面值创建,灵活顺应不同场景。
  • 通过环境变量、命令行参数或 Volume 挂载将配置注入 Pod。
  • 热更新特性使得配置管理更高效,但需注意环境变量的范围性。
参考文档:Kubernetes ConfigMap

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表