【k8s应用管理】kubernetes配置资源管理
- 游戏开发
- 2025-09-03 13:00:02

文章目录 配置资源管理Secret 的四种类型创建 Secret 的两种方式1. 使用 `kubectl create secret` 命令创建2. 使用 base64 编码内容创建 使用 Secret 的两种方式1. 将 Secret 挂载到 Volume 中 2. 将 Secret 导出到环境变量中总结 ConfigMapConfigMap 概述 创建 ConfigMap 的三种方式从目录创建从文件创建从字面值创建 在 Pod 中使用 ConfigMap作为环境变量作为命令行参数挂载为数据卷 ConfigMap 的热更新1. Volume 自动更新2. 环境变量不更新3. 触发滚动更新 配置资源管理
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 命令创建 echo -n 'zhangsan' > username.txt echo -n 'abc1234' > password.txt kubectl create secret generic mysecret --from-file=username.txt --from-file=password.txt查看 Secret:
kubectl get secrets kubectl describe secret mysecret 2. 使用 base64 编码内容创建 echo -n zhangsan | base64 echo -n abc1234 | base64创建 secret.yaml 文件:
apiVersion: v1 kind: Secret metadata: name: mysecret1 type: Opaque data: username: emhhbmdzYW4K= password: YWJjMTIzNAo==应用 YAML 文件:
kubectl create -f secret.yaml查看 Secret 的详细信息:
kubectl get secret mysecret1 -o yaml 使用 Secret 的两种方式 1. 将 Secret 挂载到 Volume 中创建 secret-test.yaml 文件:
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: nginx image: nginx volumeMounts: - name: secrets mountPath: "/etc/secrets" readOnly: true volumes: - name: secrets secret: secretName: mysecret应用 YAML 文件:
kubectl create -f secret-test.yaml进入 Pod 查看挂载的文件:
kubectl exec -it mypod bash cd /etc/secrets ls cat username.txt cat password.txt 2. 将 Secret 导出到环境变量中创建 secret-test1.yaml 文件:
apiVersion: v1 kind: Pod metadata: name: mypod1 spec: containers: - name: nginx image: nginx env: - name: TEST_USER valueFrom: secretKeyRef: name: mysecret1 key: username - name: TEST_PASSWORD valueFrom: secretKeyRef: name: mysecret1 key: password envFrom: - secretRef: name: mysecret1应用 YAML 文件:
kubectl apply -f secret-test1.yaml进入 Pod 查看环境变量:
kubectl exec -it mypod1 bash echo $TEST_USER echo $TEST_PASSWORD 总结 Secret 是 Kubernetes 中用于存储敏感信息的资源对象。可以通过命令行或 YAML 文件创建 Secret。Secret 可以通过挂载 Volume 或环境变量的方式在 Pod 中使用。使用 Secret 可以有效减少敏感信息的暴露风险,并方便管理。更多详细信息可以参考 Kubernetes 官方文档:Secrets。
ConfigMap ConfigMap 概述 作用:存储非加密的配置数据(如应用配置、环境变量),与 Secret 类似,但用于非敏感信息。应用场景:管理应用的配置参数(如数据库地址、日志级别)。核心特点: 支持从文件、目录或字面值创建。数据以键值对(key-value)形式存储。可注入到 Pod 的环境变量、命令行参数或挂载为文件。 创建 ConfigMap 的三种方式 从目录创建
将目录中所有文件作为键值对,键为文件名,值为文件内容。
mkdir /opt/configmap echo 'enemy.types=aliens,monsters' > /opt/configmap/game.config echo 'color.good=purple' > /opt/configmap/ui.config kubectl create configmap game-config --from-file=/opt/configmap/ 从文件创建指定多个文件,每个文件对应一个键值对。
kubectl create configmap game-config-2 \ --from-file=/opt/configmap/game.config \ --from-file=/opt/configmap/ui.config 从字面值创建直接通过命令行参数定义键值对。
kubectl create configmap special-config \ --from-literal=special.how=very \ --from-literal=special.type=good查看 ConfigMap:
kubectl get cm kubectl describe cm game-config kubectl get cm special-config -o yaml 在 Pod 中使用 ConfigMap 作为环境变量通过 valueFrom 或 envFrom 注入。
# env.yaml apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: busybox image: busybox:1.28.4 command: [ "/bin/sh", "-c", "env" ] env: - name: SPECIAL_HOW_KEY valueFrom: configMapKeyRef: name: special-config # 引用 ConfigMap key: special.how # 指定键 envFrom: - configMapRef: name: env-config # 注入所有键值对 作为命令行参数在 command 中通过环境变量引用。
# test-pod2.yaml apiVersion: v1 kind: Pod metadata: name: test-pod2 spec: containers: - name: busybox image: busybox:1.28.4 command: - "/bin/sh" - "-c" - "echo $(SPECIAL_HOW_KEY) $(SPECIAL_TYPE_KEY)" # 使用环境变量 env: - name: SPECIAL_HOW_KEY valueFrom: configMapKeyRef: name: special-config key: special.how 挂载为数据卷将 ConfigMap 作为文件挂载到容器目录。
# test-pod3.yaml apiVersion: v1 kind: Pod metadata: name: test-pod3 spec: containers: - name: busybox image: busybox:1.28.4 volumeMounts: - name: config-volume mountPath: /etc/config # 挂载到容器内的目录 volumes: - name: config-volume configMap: name: special-config # 引用的 ConfigMap验证挂载文件:
kubectl exec -it test-pod3 -- cat /etc/config/special.how # 输出:very ConfigMap 的热更新 1. Volume 自动更新 修改 ConfigMap 后,挂载为 Volume 的文件会自动更新(约 10 秒延迟)。示例: 更新 ConfigMap:kubectl edit cm log-config # 将 log_level 从 INFO 改为 DEBUG 查看容器内文件:kubectl exec <pod-name> -- cat /etc/config/log_level # 输出 DEBUG 2. 环境变量不更新 环境变量不会自动更新,需重启 Pod 或触发滚动更新。 3. 触发滚动更新通过修改 Deployment 的注解触发 Pod 重启:
kubectl patch deployment my-nginx \ --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
【k8s应用管理】kubernetes配置资源管理由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【k8s应用管理】kubernetes配置资源管理”