k8s学习--ConfigMap详细解释与应用

爱吃龙利鱼 2024-08-16 13:37:01 阅读 91

文章目录

一 什么是configmapConfigMap 的好处ConfigMap 的限制

二.创建ConfigMap的4种方式1.在命令行指定参数创建2.在命令行通过多个文件创建3.在命令行通过文件提供多个键值对创建4.YAML资源清单文件创建

三 configmap的两种使用方法1.通过环境变量的方式传递给pod2.通过volume的方式挂载到pod内3.应用举例

ConfigMap的热更新


一 什么是configmap

简单理解

kubernetes集群可以使用ConfigMap来实现对容器中应用的配置进行管理

(就是可以把一些应用的conf文件内容写到里面)。

可以把ConfigMap看作是一个挂载到pod中的存储卷

详细解释

在 Kubernetes 中,ConfigMap 是一种 API 对象,用于存储非机密数据(如配置文件、环境变量、命令行参数等)。ConfigMap 允许您将应用程序的配置与容器化的应用程序分开管理,从而实现配置的灵活和动态管理。

ConfigMap 的核心概念

Key-Value 存储:ConfigMap 以键值对的形式存储数据。每个键和值都是字符串,可以用来配置应用程序的各种参数。数据来源:ConfigMap 的数据可以从多种来源创建,包括命令行参数、文件、目录或者现有的 ConfigMap。非机密性:ConfigMap 专门用于存储非机密数据。对于机密数据(如密码、令牌),应使用 Kubernetes 的 Secret 对象。

组合使用

你可以将 ConfigMap 的数据同时作为环境变量和文件挂载,以灵活满足应用程序的需求。

ConfigMap 的好处

分离配置和代码:通过使用 ConfigMap,可以将配置数据与应用程序代码分离开来,便于管理和修改配置,而无需重建镜像或重新部署应用。动态更新配置:在不重启 Pod 的情况下,更新 ConfigMap 可以立即反映在应用程序中(前提是应用程序支持热加载配置)。简化管理:通过 Kubernetes 的 API,可以方便地创建、更新和删除 ConfigMap,从而简化配置管理。增强安全性:将非机密配置与机密数据分开管理,增强了集群的安全性。对于机密数据,应该使用 Secret 对象。

ConfigMap 的限制

非机密性:ConfigMap 不适用于存储机密数据,因为它们以纯文本形式存储,任何有权限访问 ConfigMap 的人都可以读取其中的数据。大小限制:单个 ConfigMap 的大小有限制(通常为 1MB),因此不适合存储大数据量的配置。应用程序支持:应用程序需要具备从环境变量或文件读取配置的能力,否则无法利用 ConfigMap 的优势。

二.创建ConfigMap的4种方式

1.在命令行指定参数创建

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/45a71beb70394092bc0ed46ac50722ac.png

[root@master ~]# kubectl create configmap cm1 --from-literal=host=127.0.0.1 --from-literal=port=3306

[root@master ~]# kubectl describe cm cm1

在这里插入图片描述

2.在命令行通过多个文件创建

通过指定文件创建,即将一个配置文件创建为一个ConfigMap,–from-file=文件路径:

[root@master ~]# echo -n 127.0.0.1 > host

[root@master ~]# echo -n 3306 > port

[root@master ~]# kubectl create configmap cm2 --from-file=./host --from-file=./port

[root@master ~]# kubectl describe cm cm2

在这里插入图片描述

3.在命令行通过文件提供多个键值对创建

通过一个文件内多个键值对,–from-env-file=文件路径

[root@master ~]# vim env.txt

写入

host=127.0.0.1

port=3306

[root@master ~]# kubectl create configmap cm3 --from-env-file=env.txt

[root@master ~]# kubectl describe cm cm3

在这里插入图片描述

4.YAML资源清单文件创建

[root@master ~]# vim cm4.yaml

<code>apiVersion: v1

kind: ConfigMap

metadata:

name: cm4

data:

host: 127.0.0.1

port: "3306"

[root@master ~]# kubectl apply -f cm4.yml

configmap/cm4 created

[root@master ~]# kubectl describe cm cm4

Name: cm4

Namespace: default

Labels: <none>

Annotations:

Data

====

host:

----

127.0.0.1

port:

----

3306

Events: <none>

三 configmap的两种使用方法

1.通过环境变量的方式传递给pod

[root@master ~]# vim pod-cm1.yaml

apiVersion: v1

kind: Pod

metadata:

name: pod-cm1

spec:

containers:

- name: busybox

image: busybox

args: [ "/bin/sh", "-c", "sleep 10000" ]

envFrom:

- configMapRef:

name: cm1

[root@master ~]# kubectl apply -f pod-cm1.yml

[root@master ~]# kubectl get pod

[root@master ~]# kubectl exec pod-cm1 – env

在这里插入图片描述

2.通过volume的方式挂载到pod内

[root@master ~]# vim pod-cm2.yaml

<code>apiVersion: v1

kind: Pod

metadata:

name: pod-cm2

spec:

containers:

- name: busybox

image: busybox

args: [ "/bin/sh", "-c", "sleep 10000" ]

volumeMounts:

- name: vol-cm

mountPath: "/etc/mysql"

readOnly: true

volumes:

- name: vol-cm

configMap:

name: cm2

[root@master ~]# kubectl apply -f pod-cm2.yml

[root@master ~]# kubectl get pod

[root@master ~]# kubectl exec pod-cm2 – cat /etc/mysql/host

127.0.0.1

[root@master ~]# kubectl exec pod-cm2 – cat /etc/mysql/port

3306

可以看到内容

3.应用举例

[root@master ~]# echo “test-test” > nginx.conf #产生测试用的nginx.conf文件

[root@master ~]# kubectl create configmap nginxconf --from-file=/root/nginx.conf

[root@master ~]# kubectl describe cm nginxconf

[root@master ~]# vim pod-nginxconf.yaml

apiVersion: v1

kind: Pod

metadata:

name: nginx

spec:

containers:

- name: nginx

image: nginx:1.20

volumeMounts: # 用volume挂载方式

- name: vol-nginx # 对应下面的volume名

mountPath: "/testdir" # 挂载到容器内部的路径

readOnly: true # 只读

volumes:

- name: vol-nginx # 卷名称

configMap:

name: nginxconf # configmap的名称

[root@master ~]# kubectl apply -f pod-nginxconf.yaml

[root@master ~]# kubectl exec -it nginx – cat /testdir/nginx.conf

在这里插入图片描述

ConfigMap的热更新

如果修改了value, 那么容器内部会不会更新?

ConfigMap热更新方式

通过环境变量的方式传递给pod。这种方式不会热更新

通过volume的方式挂载到pod内。这种方式会热更新,大概需要半分钟左右。

[root@master ~]# kubectl edit cm nginxconf

修改test-test 为 test-page

[root@master ~]# kubectl exec -it nginx – cat /testdir/nginx.conf #等待一会

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。