总结:k8s之ConfigMap

一、介绍

ConfigMap是一种API对象,用来将非加密数据保存到键值对中。可以用作环境变量、命令行参数或者存储卷中的配置文件。

ConfigMap可以将环境变量配置信息和容器镜像解耦,便于应用配置的修改。如果需要存储加密信息时可以使用Secret对象。

创建ConfigMap的方式有4种:

通过直接在命令行中指定configmap参数创建,即--from-literal
通过指定文件创建,即将一个配置文件创建为一个ConfigMap--from-file=<文件>
通过指定目录创建,即将一个目录下的所有配置文件创建为一个ConfigMap,--from-file=<目录>
事先写好标准的configmap的yaml文件,然后kubectl create -f 创建
 

二、命令行创建ConfigMap

1、通过键值对创建configmap

创建:kubectl create configmap literal-config --from-literal=key1=hello --from-literal=key2=world

查看:kubectl describe configmap literal-config

2、通过文件的方式

$ echo hello > test1.txt
$ ehco world > test2.txt
$ kubectl create configmap my-config --from-file=key1=test1.txt  --from-file=key2=test2.txt

之后查看configmap:kubectl describe configmap my-config

看到该configmap中有两个键值对,key1:hello 和 key2:world。

总结:通过文件创建其实就是将文件的内容作为value。本质上和第一种方式一致,但是性能会低一些,毕竟涉及到读取文件

2、

三、yaml创建ConfigMap

#config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
 name: my-config
data:
 key1: hello
 key2: world

创建:kubectl create -f config.yaml

查看:kubectl describe configmap my-config

四、ConfigMap使用

Pod的使用方式:

1. 将ConfigMap中的数据设置为容器的环境变量

2. 将ConfigMap中的数据设置为命令行参数

3. 使用Volume将ConfigMap作为文件或目录挂载

4. 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap

配置到容器的环境变量

# test-pod-configmap.yaml
apiVersion: v1
kind: Pod
metadata:
 name: test-pod-configmap
spec:
 containers:
  - name: test-busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    args:
    - sleep
    - "86400"
    env:
    - name: KEY1
      valueFrom:
       configMapKeyRef:
        name: my-config
        key: key1
    - name: KEY2
      valueFrom:
       configMapKeyRef:
        name: my-config

设置为命令行参数

# test-pod-configmap-cmd
apiVersion: v1
kind: Pod
metadata:
 name: test-pod-configmap-cmd
spec:
 containers:
  - name: test-busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: [ "/bin/sh","-c","echo $(KEY1) $(KEY2)"]
    env:
    - name: KEY1
      valueFrom:
       configMapKeyRef:
        name: my-config
        key: key1
    - name: KEY2
      valueFrom:
       configMapKeyRef:
        name: my-config
        key: key2

创建pod,该pod成功启动后会输出环境变量KEY1和KEY2的值

$ kubectl create -f test-pod-configmap-cmd.yaml       

将configmap挂载到容器中


# test-pod-projected-configmap-volume.yaml
apiVersion: v1
kind: Pod
metadata:
 name: test-pod-projected-configmap-volume
spec:
 containers:
 - name: test-pod-busybox
   image: busybox
   imagePullPolicy: IfNotPresent
   args:
   - sleep
   - "86400"
   volumeMounts:
   - name: config-volume
     mountPath: "/projected-volume"
     readOnly: true
 volumes:
 - name: config-volume
   projected:
    sources:
    - configMap:
       name: my-config

创建pod:kubectl create -f test-pod-projected-configmap-volume.yaml

进入容器:kubectl exec -it test-pod-projected-configmap-volume -- /bin/sh

查看挂在到容器中的文件内容

通过volume挂载和环境变量的区别:

通过Volume挂载到容器内部时,当该configmap的值发生变化时,容器内部具备自动更新的能力,但是通过环境变量设置到容器内部该值不具备自动更新的能力。

参考:

k8s之ConfigMap详细理解及使用

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KubernetesConfigMap是用于存储应用程序所需的配置信息的一种资源类型。它可以存储任何类型的数据,如字符串、整数、布尔值、JSON、XML等等。 ConfigMap可以通过以下方式创建: 1. 使用kubectl命令行工具创建ConfigMap: ``` kubectl create configmap my-config --from-literal=DATABASE_NAME=mydb --from-literal=DATABASE_USER=root --from-literal=DATABASE_PASSWORD=password ``` 2. 使用YAML文件创建ConfigMap: ``` apiVersion: v1 kind: ConfigMap metadata: name: my-config data: DATABASE_NAME: mydb DATABASE_USER: root DATABASE_PASSWORD: password ``` ConfigMap可以在容器内部使用以下方式使用: 1. 通过环境变量使用ConfigMap: ``` apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: my-image env: - name: DATABASE_NAME valueFrom: configMapKeyRef: name: my-config key: DATABASE_NAME - name: DATABASE_USER valueFrom: configMapKeyRef: name: my-config key: DATABASE_USER - name: DATABASE_PASSWORD valueFrom: configMapKeyRef: name: my-config key: DATABASE_PASSWORD ``` 2. 通过卷挂载使用ConfigMap: ``` 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 ``` 使用ConfigMap的好处是可以将应用程序的配置信息与应用程序本身分离,从而使应用程序更为灵活和可移植。同时,当需要更改配置时,只需要更改ConfigMap,而不需要重新构建应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值