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

k8s的ConfigMap是什么, 为什么设计ConfigMap, 如何使用ConfigMap

ConfigMap简介, 为什么设计ConfigMap

在k8s中, ConfigMap是一种API对象, 用于将非机密的配置数据存储到键值对中。
Configmap作用是, 把配置数据从应用代码中分隔开, 让镜像和配置文件解耦,实现了镜像的可移植性。

举例:
我有一个Squid(正向代理)的Pod, 需要获取用户配置的白名单做访问控制。 每个用户设置的白名单都不一样, 而且用户可以随时对白名单做增、删、改,所以这个白名单的配置不能写死在代码里。
我们可以把白名单配置存储到k8s的ConfigMap, 这样配置数据和镜像就实现了解耦,Pod中可以动态地获取白名单的配置。

如何使用ConfigMap

使用ConfigMap时, Pod可以将其用作环境变量、命令行参数或存储卷中的配置文件。
下面给出一个具体的案例,将ConfigMap用作存储卷中的配置文件,Pod中通过读取配置文件的内容,就获取到了配置信息。

ConfigMap示例

需求描述: 我有一个Squid的Pod, 用户可以修改一些配置信息,例如:白名单, 父级代理。 要求创建一个ConfigMap存储这些配置,并且将ConfigMap用作存储卷中的配置文件.
配置信息如下:

whitelist: www.baidu.com:443,www.google.com:443 # 白名单
customerProxy: 192.168.52.204:3128 # Squid的父级代理

步骤
首先创建一个Squid Pod, 可以参考Squid Pod部署

再创建ConfigMap, 新建文件squid-configmap.yaml, 内容如下:

kind: ConfigMap
apiVersion: v1
metadata:name: squid-configmapnamespace: squid
data:whitelist: "www.baidu.com,www.google.com"parentProxy: "192.168.52.204:3128"

修改Deployment, 将ConfigMap映射到Pod的/etc/squid-config目录下。 具体做法是编辑squid-deployment.yaml, 添加如下内容:

volumes:- name: squid-config-volumeconfigMap:name: squid-configmap
containers:- name: squidvolumeMounts:- mountPath: /etc/squid-configname: squid-config-volume

完整的squid-deployment.yaml如下

apiVersion: apps/v1
kind: Deployment
metadata:name: squidnamespace: squidlabels:name: squid
spec:replicas: 1selector:matchLabels:app: squidtemplate:metadata:labels:app: squidspec:volumes:- name: squid-volumepersistentVolumeClaim:claimName: squid-claim- name: squid-config-volumeconfigMap:name: squid-configmapdnsPolicy: ClusterFirstWithHostNethostNetwork: truecontainers:- name: squidimage: squid:IMAGE_PLACEHOLDERimagePullPolicy: IfNotPresentlivenessProbe:httpGet:path: /healthzport: 5000initialDelaySeconds: 5periodSeconds: 10failureThreshold: 3resources:limits:memory: "4Gi"volumeMounts:- mountPath: /var/log/squidname: squid-volume- mountPath: /etc/squid-configname: squid-config-volume

应用configmap, deployment, 等待Pod Ready

kubectl create -f squid-configmap.yaml
kubectl -n squid delete deploy squid
kubectl create -f squid-deployment.yaml

测试
先确认ConfigMap内容包含了配置信息

# kubectl -n squid get cm squid-configmap -o yaml
apiVersion: v1
data:customerProxy: 192.168.52.204:3128whitelist: www.baidu.com,www.google.com
kind: ConfigMap
metadata:...

再进入Pod,确认/etc/squid-config目录下的文件内容

# kubectl -n squid exec -it squid-64bbc7d8f5-dqklp -- /bin/bash
cat /etc/squid-config/customerProxy
192.168.52.204:3128
# cat /etc/squid-config/whitelist
www.baidu.com,www.google.com

编辑configmap中的配置,等待一段时间后进入容器确认/etc/squid-config/的文件内容也随之更新

# kubectl -n squid edit cm squid-congfimap
把whitelist的值设置为www.4399.com, 等待一段时间后进入容器中,查看`/etc/squid-config/whitelist`的内容更新为www.4399.com

参考

【1】 Kubernetes Documentation - ConfigMaps
【2】 kubernetes核心技术-ConfigMap

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

相关文章:

  • fiddler设置抓取https,还抓取不到https如何解决?
  • Python高性能web框架-FastApi教程:(1)创建一个简单的FastApi
  • Django基础之模板
  • RabbitMQ Work Queues (工作队列模式) 使用案例
  • C#高级:Winform桌面开发中TreeView的基础例子
  • 大模型的文件有哪些?
  • QT 国际化(翻译)
  • C 进阶 — 指针的使用
  • 【经验分享】容器云运维的知识点
  • MFC学习笔记专栏开篇语
  • 电子科技大学《高级算法设计与分析》期末复习问题汇总(客观题-选择题、判断题)
  • GPTcelltype——scRNA-seq注释
  • AI与大数据的深度结合:驱动决策的革命性力量
  • Java多线程与线程池技术详解(九)
  • 【常考前端面试题总结】---2025
  • 什么是大语言模型(LLM)
  • 柚坛工具箱Uotan Toolbox适配鸿蒙,刷机体验再升级
  • supervisor使用详解
  • win11电源设置在哪里?控制面板在哪里?如何关闭快速启动?
  • 【论文阅读笔记】One Diffusion to Generate Them All
  • SpringCloud和Nacos的基础知识和使用
  • 人工智能技术的深度解析与推广【人工智能的应用场景】
  • md5sum -c
  • excel使用笔记
  • keepalived+nginx实现web高可用
  • 边界层气象:脉动量预报方程展开 | 湍流脉动速度方差预报方程 | 平均湍流动能收支方程推导
  • TOSUN同星TsMaster使用入门——2、使用TS发送报文,使用graphics分析数据等
  • 【操作系统】实验七:显示进程列表
  • day10 电商系统后台API——接口测试(使用postman)
  • JavaScript ES6+ 语法速通