kubernetes——存储之ConfigMap配置管理

一、configmap简介

  • configmap用于保存配置数据,以键值对形式存储。
  • configmap 资源提供了向 Pod 注入配置数据的方法。
  • 旨在让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。
  • 典型的使用场景:

(1)填充环境变量的值
(2)设置容器内的命令行参数
(3)填充卷的配置文件

二、创建configmap

  • 创建ConfigMap的方式有4种

1、使用字面值创建

kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
kubectl get cm
kubectl describe cm my-config

在这里插入图片描述

2、使用文件创建

  • key的名称是文件名称,value的值是这个文件的内容
kubectl create configmap my-config-2 --from-file=/etc/resolv.conf
kubectl get cm
kubectl describe cm my-config-2

在这里插入图片描述

3、使用目录创建

  • 目录中的文件名为key,文件内容是value
mkdir -p configmap/test
cd configmap/
cp /etc/passwd test/
cp /etc/fstab test/
kubectl create configmap my-config-3 --from-file=test
kubectl get cm
kubectl describe cm my-config-3

在这里插入图片描述
在这里插入图片描述

4、编写configmap的yaml文件

vim cm1.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm1-config
data:
  db_host: "172.25.36.250"
  db_port: "3306"

kubectl apply -f cm1.yaml
kubectl get cm cm1-config
kubectl describe cm cm1-config

在这里插入图片描述
在这里插入图片描述

三、如何使用configmap

1、使用configmap设置环境变量

vim pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
    - name: pod1
      image: busyboxplus
      command: ["/bin/sh", "-c", "env"]
      env:
        - name: key1
          valueFrom:
            configMapKeyRef:
              name: cm1-config
              key: db_host
        - name: key2
          valueFrom:
            configMapKeyRef:
              name: cm1-config
              key: db_port
  restartPolicy: Never

在这里插入图片描述

  • 运行清单,查看日志
kubectl apply -f pod.yaml
kubectl logs pod1

在这里插入图片描述

2、通过在pod的命令行下运行的方式

vim pod2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
    - name: pod2
      image: busyboxplus
      command: ["/bin/sh", "-c", "env"]
      envFrom:
        - configMapRef:
            name: cm1-config
  restartPolicy: Never

在这里插入图片描述

  • 运行清单,查看日志
kubectl apply -f pod2.yaml
kubectl get pod pod2
kubectl logs pod2

在这里插入图片描述

3、使用conigmap设置命令行参数

vim pod2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
    - name: pod2
      image: busyboxplus
      command: ["/bin/sh", "-c", "echo $(db_host) $(db_port)"]      
      envFrom:
        - configMapRef:
            name: cm1-config
  restartPolicy: Never

在这里插入图片描述

  • 运行清单,查看输出结果
kubectl delete -f pod2.yaml
kubectl apply -f pod2.yaml
kubectl logs pod2

在这里插入图片描述

4、通过数据卷使用configmap

vim pod2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
    - name: pod2
      image: busyboxplus
      command: ["/bin/sh", "-c", "cat /config/db_host"]
      volumeMounts:
      - name: config-volume
        mountPath: /config
  volumes:
    - name: config-volume
      configMap:
        name: cm1-config
  restartPolicy: Never

在这里插入图片描述

  • 运行清单,查看输出结果
kubectl delete -f pod2.yaml
kubectl apply -f pod2.yaml
kubectl logs pod2

在这里插入图片描述

四、configmap热更新

1、编辑nginx的配置文件,修改端口为8000

vim nginx.conf

server {
    listen       8000;
    server_name  _;

    location / {
        root /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

在这里插入图片描述
2、通过文件创建configmap

kubectl create configmap nginxconf --from-file=nginx.conf
kubectl describe cm nginxconf

在这里插入图片描述3、编辑nginx.yaml文件,使其包含刚修改的nginx的配置文件

vim nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          volumeMounts:
          - name: config-volume
            mountPath: /etc/nginx/conf.d
      volumes:
        - name: config-volume
          configMap:
            name: nginxconf

在这里插入图片描述
4、运行清单,访问8000端口

kubectl apply -f nginx.yaml
kubectl get pod -o wide | grep nginx
curl 10.244.2.13:8000

在这里插入图片描述
5、修改端口为8080

kubectl edit cm nginxconf

apiVersion: v1
data:
  nginx.conf: |
    server {
        listen       8080;
        server_name  _;

        location / {
            root /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }
kind: ConfigMap
metadata:
  creationTimestamp: "2021-07-30T17:56:46Z"
  name: nginxconf
  namespace: default
  resourceVersion: "37497"
  uid: fc838be5-db02-4738-91ad-4cb39ceb3e6d

在这里插入图片描述6、对8080端口进行访问,发现失败,但进入pod中查询nginx的配置文件,发现已经更改为8080

curl 10.244.2.13:8080
kubectl exec my-nginx-b9b58dbdf-9skrz cat /etc/nginx/conf.d/nginx.conf

在这里插入图片描述7、上面现象说明configmap热更新已生效,但访问Pod的8080端口是无效的

  • 这时就需要手动触发Pod滚动更新, 这样才能再次加载nginx的配置文件
kubectl patch deployments.apps my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20210731"}}}}}'
  • 查看重新分配的ip,访问8080,发现成功
kubectl get pod -o wide | grep nginx
curl 10.244.2.16:8080

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes 中使用 ConfigMap 进行配置管理对于 Spring Boot 应用来说是一种常见的做法。下面是一个简单的示例,演示了如何在 Spring Boot 应用中使用 ConfigMap 进行配置。 首先,需要在 Kubernetes 中创建一个 ConfigMap 对象,其中包含了应用所需的配置信息。可以通过以下命令创建一个 ConfigMap: ``` kubectl create configmap my-config --from-literal=app.url=http://example.com --from-literal=app.port=8080 ``` 上述命令创建了一个名为 `my-config` 的 ConfigMap,并将 `app.url` 和 `app.port` 两个属性设置为相应的值。 接下来,在 Spring Boot 应用的 `application.properties`(或 `application.yml`)文件中,可以通过以下方式引用 ConfigMap 中的配置: ``` app.url=${APP_URL} app.port=${APP_PORT} ``` 在上述示例中,`${APP_URL}` 和 `${APP_PORT}` 分别对应于 ConfigMap 中的 `app.url` 和 `app.port` 属性。 最后,在部署 Spring Boot 应用的 Kubernetes Deployment 配置文件中,需要将 ConfigMap 挂载到容器中,并将其作为环境变量注入到应用中。例如: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app-container image: my-app-image ports: - containerPort: 8080 env: - name: APP_URL valueFrom: configMapKeyRef: name: my-config key: app.url - name: APP_PORT valueFrom: configMapKeyRef: name: my-config key: app.port ``` 上述配置文件中,通过 `env` 配置将 ConfigMap 中的属性值注入到容器的环境变量中,使得 Spring Boot 应用能够读取到正确的配置。 这样,当部署 Spring Boot 应用到 Kubernetes 中时,它将使用 ConfigMap 中定义的配置信息。如果需要更新配置,只需更新 ConfigMap 对象即可,无需重新构建和部署应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值