当前位置: 首页 > news >正文

Kubernetes ConfigMaps

文章目录

  • 简介
  • 创建ConfigMaps
    • 通过命令行使用字面值创建 ConfigMap。
    • 从文件创建ConfigMaps
    • 从多个文件创建 ConfigMap
    • 从目录创建 ConfigMap
    • 使用 YAML 创建 ConfigMap
  • 使用ConfigMaps
    • 使用 ConfigMaps作为环境变量
    • 使用 ConfigMap 作为卷挂载
    • 使用 ConfigMap 中的特定的key
  • ConfigMap 进阶用法
    • 合并 ConfigMap
    • 更新 ConfigMaps
    • 将 ConfigMaps 与Deployment结合使用
    • 环境特定的配置
    • 验证
    • 安全性
    • 使用描述性名称
    • 保持 ConfigMaps 简洁
    • 为 ConfigMaps 添加文档
  • 结论

简介

ConfigMap 是 Kubernetes 中的一种对象,用于以键值对的形式存储非机密的配置数据。ConfigMap 对于将配置设置与应用程序代码分离管理至关重要,这使得应用程序更加灵活和便于移植。
为什么使用 ConfigMap?

  • 将配置与代码解耦: 使用 ConfigMap,可以在不重新构建容器镜像的情况下更改配置设置。
  • 环境特定的配置: 轻松管理针对不同环境(开发、预生产、生产)的配置。
  • 集中化管理: 通过将配置集中存储在一个地方,简化配置管理。

创建ConfigMaps

通过命令行使用字面值创建 ConfigMap。

kubectl create configmap my-config --from-literal=db_host=database.example.com --from-literal=db_port=5432

从文件创建ConfigMaps

示例: app.properties

db_host=database.example.com
db_port=5432
log_level=DEBUG

从这个示例文件创建ConfigMap

kubectl create configmap my-config --from-file=app.properties

从多个文件创建 ConfigMap

kubectl create configmap my-config --from-file=app.properties --from-file=log.properties

从目录创建 ConfigMap

如果目录包含多个配置文件,则可以从整个目录创建 ConfigMap。

kubectl create configmap my-config --from-file=config-dir/

使用 YAML 创建 ConfigMap

可以在 YAML 文件中定义 ConfigMap,并使用 kubectl apply 创建它。
Example: configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: my-config
data:app.properties: |db_host=database.example.comdb_port=5432log_level: DEBUG

套用yaml文件

kubectl apply -f configmap.yaml

使用ConfigMaps

使用 ConfigMaps作为环境变量

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imageenvFrom:- configMapRef:name: my-config

使用 ConfigMap 作为卷挂载

ConfigMaps 也可以作为卷安装在 pod 中,允许容器直接访问配置文件。

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imagevolumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: my-config

使用 ConfigMap 中的特定的key

如果只需要 ConfigMap 中的特定键,则可以明确指定它们。

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imageenv:- name: DB_HOSTvalueFrom:configMapKeyRef:name: my-configkey: db_host- name: DB_PORTvalueFrom:configMapKeyRef:name: my-configkey: db_port

示例:使用特定键作为卷

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imagevolumeMounts:- name: config-volumemountPath: /etc/config/db_hostsubPath: db_hostvolumes:- name: config-volumeconfigMap:name: my-configitems:- key: db_hostpath: db_host

ConfigMap 进阶用法

合并 ConfigMap

在某些情况下,可能需要为单个应用程序合并多个 ConfigMap。Kubernetes 允许在同一个 Pod 中使用多个 ConfigMap。
示例:将多个 ConfigMap 用作环境变量

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imageenvFrom:- configMapRef:name: my-config1- configMapRef:name: my-config2

更新 ConfigMaps

要更新 ConfigMap,可以使用 kubectl edit 直接编辑它。

kubectl edit configmap my-config

或者,您可以应用修改后的 YAML 文件中的更改。

kubectl apply -f updated-configmap.yaml

将 ConfigMaps 与Deployment结合使用

在生产环境中,通常会将 ConfigMaps 与 Kubernetes deployment结合使用。
示例:在部署中使用 ConfigMap

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: my-imageenvFrom:- configMapRef:name: my-config

环境特定的配置

创建针对特定环境的 ConfigMap(例如,config-dev、config-prod),这样可以轻松管理不同环境的配置。

kubectl create configmap config-dev --from-file=dev.properties
kubectl create configmap config-prod --from-file=prod.properties

验证

验证 ConfigMap 的内容以避免应用程序出现错误。您可以使用诸如 kubeval 之类的工具来确保语法和结构的正确性。

kubeval configmap.yaml

安全性

虽然 ConfigMaps 不适合存储敏感数据,但应确保其访问权限仅限于必要的组件。使用基于角色的访问控制(RBAC)来控制访问权限。
示例: RBAC Policy

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: configmap-reader
rules:
- apiGroups: [""]resources: ["configmaps"]verbs: ["get", "list", "watch"]

这个配置允许角色持有者在 default 命名空间中读取(包括get、list、watch) ConfigMaps 的内容,但不能修改或删除它们。这通常用于对 ConfigMaps 的只读访问,比如配置管理或监控工具。

使用描述性名称

为 ConfigMaps 使用描述性名称,以便轻松识别其用途。

kubectl create configmap app-config --from-file=app.properties
kubectl create configmap log-config --from-file=log.properties

保持 ConfigMaps 简洁

避免在单个 ConfigMap 中放入过多数据。将大的配置拆分为多个 ConfigMaps 以便于管理

为 ConfigMaps 添加文档

在 YAML 文件中添加注释和文档,以描述每个键值对的用途和使用方式。

apiVersion: v1
kind: ConfigMap
metadata:name: my-config
data:# Database hostdb_host: database.example.com# Database portdb_port: "5432"

结论

ConfigMaps 是 Kubernetes 中用于分离配置数据的关键功能。通过合理使用 ConfigMaps,可以提升应用的灵活性和可维护性。遵循最佳实践,保持配置简洁、安全、有序,能有效管理和优化您的 Kubernetes 应用。

http://www.lryc.cn/news/495868.html

相关文章:

  • 前端热门面试题目[一](HTML、CSS、Javascript、Node、Vue、React)
  • Swift 宏(Macro)入门趣谈(五)
  • ES6 Set、Map、WeakSet、WeakMap 四者辨析与实战应用详解
  • 【数据结构】哈希表实现
  • Verilog的线与类型与实例化模块
  • 芯片测试-RF中的S参数,return loss, VSWR,反射系数,插入损耗,隔离度等
  • 强化学习的几个主要方法(策略梯度、PPO、REINFORCE实现等)(上)
  • Git远程仓库操作
  • GAGAvatar: Generalizable and Animatable Gaussian Head Avatar 学习笔记
  • 什么是VISUAL STUDIO CODE (V S CODE)
  • 2024年09月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析
  • C++初阶——动态内存管理
  • 如何查看阿里云ddos供给量
  • MySQL中的事务隔离全详解
  • 异常--C++
  • SeggisV1.0 遥感影像分割软件【源代码】讲解
  • 锁-读写锁-Swift
  • Kafka如何保证消息可靠?
  • 5.10【机器学习】
  • [白月黑羽]关于仿写股票数据软件题目的解答
  • 详解LZ4文件解压缩问题
  • vue项目中单独文件的js不存在this.$store?.state怎么办
  • Github提交Pull Request教程 Git基础扫盲(零基础易懂)
  • Java函数式编程【二】【Stream的装饰】【中间操作】【map映射器】【摊平映射器flatMap】
  • 树莓派明明安装了opencv和numpy,却找不到
  • numpy.float8不存在;Python中,实现16位浮点数
  • Redis集群配置 (不使用docker 部署)
  • HTML5系列(7)-- Web Storage 实战指南
  • 【在Linux世界中追寻伟大的One Piece】读者写者问题与读写锁
  • 用到动态库的程序运行过程