ConfigMap
一、ConfigMap 基本概念
ConfigMap
是 Kubernetes 用来存储非机密的配置信息的对象。你可以将配置数据存储在 ConfigMap
中,然后将这些数据挂载到容器内,或者将其以环境变量的形式注入到容器中。这使得你可以在无需重新构建镜像的情况下更新配置。
二、ConfigMap 的主要功能
-
存储配置数据:将配置数据存储在 Kubernetes 集群中。
-
注入配置数据:通过挂载到容器内的文件、目录或环境变量的方式将配置数据提供给容器。
-
动态更新:
ConfigMap
的数据可以在运行时更新,应用程序可以根据需要获取最新的配置数据。
三、ConfigMap 的创建和管理
1.创建 ConfigMap
可以通过 YAML 文件、kubectl
命令行工具或者从文件中创建 ConfigMap
。
apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: key1: value1 key2: value2
示例:
apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: SIMPLE_KEY: simple_value nginx_d: /usr/local/nginx config.yaml: | server: port: 8080 host: localhost db.properties: | db.user=root db.password=secret db.url=jdbc:mysql://localhost:3306/mydb --- apiVersion: v1 kind: Pod metadata: name: pod-with-config-files labels: app: nginx spec: containers: - name: my-container image: harbor.hiuiu.com/nginx/nginx:1.21.5 env: - name: NGINX valueFrom: configMapKeyRef: name: my-configmap key: nginx_d volumeMounts: - name: config-volume mountPath: "/etc/config" readOnly: true volumes: - name: config-volume configMap: name: my-configmap items: - key: "config.yaml" path: "config.yaml" - key: "db.properties" path: "db.properties" restartPolicy: Never
kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
示例:
将一个包含 Tomcat 相关配置信息的 ConfigMap 引入到一个 Pod 中
kubectl create configmap tomcat-config --from-literal=tomcat_dir=/usr/local/tomcat --from-literal=server_name=tomcat.com apiVersion: v1 kind: Pod metadata: name: tomcat-pod spec: containers: - name: tomcat-container image: c7-tomcat:9.0.16 imagePullPolicy: Never command: ["/bin/sh"] args: ["-c","while true; do echo hello; sleep 10; done"] env: - name: TOMCAT_DIR valueFrom: configMapKeyRef: name: tomcat-config key: tomcat_dir - name: SERVER_NAME valueFrom: configMapKeyRef: name: tomcat-config key: server_name ports: - containerPort: 8080 kubectl apply -f cm.yaml kubectl exec tomcat-pod -- env | grep TOMCAT_DIR 输出结果// TOMCAT_DIR=/usr/local/tomcat kubectl exec tomcat-pod -- env | grep SERVER_NAME 输出结果// SERVER_NAME=tomcat.com
从文件创建:
kubectl create configmap my-config --from-file=path/to/config/file
示例:
创建一个 Kubernetes Pod,并将 default.conf
文件作为 NGINX 配置文件挂载到 Pod 中
vim default.conf server { listen 8080; listen [::]:8080; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50.html; location = /50.html{ root /usr/share/nginx/html; } } kubectl create configmap apps-config --from-file=default.conf apiVersion: v1 kind: Pod metadata: name: app-pod-with-config spec: containers: - name: app-container image: harbor.hiuiu.com/nginx/nginx:1.21.5 volumeMounts: - name: config-volume mountPath: "/etc/nginx/conf.d" readOnly: true volumes: - name: config-volume configMap: name: apps-config
将一个包含环境变量的 ConfigMap
加载到 Kubernetes Pod 的容器中
ConfigMap是通过--from-env-file
选项从环境变量文件生成的
cat env.list DATABASE_HOST=localhost DATABASE_POST=3006 DATABASE_USER=root DATABASE_PASSWORD=secret kubectl create configmap my-configmap --from-env-file=env.list apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: harbor.hiuiu.com/nginx/nginx:1.21.5 envFrom: - configMapRef: name: my-configmap kubectl exec -it my-pod -- bash env
从目录创建:
kubectl create configmap my-config --from-file=path/to/dir/
kubectl get configmap my-config -o yaml
kubectl edit configmap my-config
kubectl delete configmap my-config
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: my-image env: - name: CONFIG_KEY valueFrom: configMapKeyRef: name: my-config key: key1
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: my-image volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: my-config
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: my-image command: ["/bin/sh", "-c"] args: - echo $(CONFIG_KEY); env: - name: CONFIG_KEY valueFrom: configMapKeyRef: name: my-config key: key1
-
非机密数据:
ConfigMap
主要用于存储非机密的配置数据。对于敏感数据,建议使用Secret
对象。 -
数据更新:如果
ConfigMap
的数据被更新,挂载到 Pod 中的数据不会自动更新,除非重新创建 Pod 或者容器。 -
大小限制:单个
ConfigMap
的大小有上限限制,通常为 1MB,但这个限制可能会因 Kubernetes 版本和实现而异。
通过使用 ConfigMap
,你可以更灵活地管理应用程序的配置,使得配置管理更加清晰和易于操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示