5.k8s当中的ConfigMap资源

本文详细介绍了Kubernetes中的ConfigMap资源概述、创建、管理以及如何在Pod中通过env变量和volume挂载引入ConfigMap。重点讲解了响应式创建和使用subPath功能以避免挂载时清空原有文件。
摘要由CSDN通过智能技术生成

目录

一、ConfigMap资源概述

ConfigMap

二、查看k8s集群系统中都有哪些资源类型

三、ConfigMap资源管理

1.创建工作目录

2.创建ConfigMap资源

2.1.声明式创建ConfigMap资源

编辑资源清单

创建ConfigMap资源

查看ConfigMap资源

 2.2响应式创建ConfigMap资源

命令行创建ConfigMap资源

指定文件方式创建cm资源

2.3查看cm资源的详细信息

2.4删除cm资源

四、pod引入CM资源

1.创建pod资源,env变量引入cm

2.创建pod资源,volume挂载卷引入cm


一、ConfigMap资源概述

在Docker中,我们一般通过绑定挂载的方式将配置文件挂载到容器里。

在Kubernetes集群中,容器可能被调度到任意节点,配置文件需要能在集群任意节点上访问、分发和更新。

ConfigMap

ConfigMap 用来在键值对数据库(etcd)中保存非加密数据。一般用来保存配置文件。

ConfigMap 可以用作环境变量、命令行参数或者存储卷。

ConfigMap 将环境配置信息与 容器镜像 解耦,便于配置的修改。

ConfigMap 在设计上不是用来保存大量数据的。

在 ConfigMap 中保存的数据不可超过 1 MiB。

超出此限制,需要考虑挂载存储卷或者访问文件存储服务。

二、查看k8s集群系统中都有哪些资源类型

[root@k8s1 k8s]# kubectl api-resources

三、ConfigMap资源管理

1.创建工作目录

[root@k8s1 k8s]# mkdir configmap
[root@k8s1 k8s]# cd configmap/

2.创建ConfigMap资源

2.1.声明式创建ConfigMap资源

编辑资源清单

[root@k8s1 configmap]# vi 01-cm.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm01
#声明cm资源的数据
data:
  #第一种写法【key:value】
  oslee: "HELLO WORLD"
  k8s: "1.23.17"

  #第二种写法【key:| value value value...】
  my.cnf: |
    [mysqld]
    datadir=/xinjizhiwa/data
    basedir=/usr/bin/mysqld/bin/
    socket=/tmp/mysql.socket
    skip-name-resolve=1
    port=3306
    [client]
    username=admin
    password=1
创建ConfigMap资源

[root@k8s1 configmap]# kubectl apply -f 01-cm.yaml

查看ConfigMap资源

[root@k8s1 configmap]# kubectl get cm 
NAME               DATA   AGE
cm01               3      13m
kube-root-ca.crt   1      14h
 

[root@k8s1 configmap]# kubectl get cm cm01 
NAME   DATA   AGE
cm01   3      13m

 2.2响应式创建ConfigMap资源

命令行创建ConfigMap资源

[root@k8s1 configmap]# kubectl create cm cm001 --from-literal=oslee=k8s --from-literal=k8s=kubernetes
configmap/cm001 created

指定文件方式创建cm资源

# 编辑一个文件

[root@k8s1 configmap]# cat > 1.txt <<EOF
11111111111111
222222222222
3333333333333
4444444444444
5555555555555
666666666666
EOF

# 指定文件创建cm资源

[root@k8s1 configmap]# kubectl create cm cm002 --from-file=1.txt=1.txt
configmap/cm002 created

2.3查看cm资源的详细信息

[root@k8s1 configmap]# kubectl describe cm cm01 
Name:         cm01
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
k8s:
----
1.23.17
my.cnf:
----
[mysqld]
datadir=/xinjizhiwa/data
basedir=/usr/bin/mysqld/bin/
socket=/tmp/mysql.socket
skip-name-resolve=1
port=3306
[client]
username=admin
password=1

oslee:
----
HELLO WORLD

BinaryData
====

Events:  <none>

2.4删除cm资源

[root@k8s1 configmap]# kubectl delete cm cm002
configmap "cm002" deleted
[root@k8s1 configmap]# kubectl delete cm --all

四、pod引入CM资源

 pod引入cm资源的方式,有两种,env变量引入和volume挂载卷引入

1.创建pod资源,env变量引入cm

apiVersion: v1
kind: Pod
metadata:
  name: m1
spec:
  containers:
  - name: c1
    image: nginx:1.20.1-alpine
    env:
    #引入一个变量
    - name: env-cm01
      #从其他位置引入变量
      valueFrom:
        #声明从ConfigMap中引入变量
        configMapKeyRef:
          #引入变量ConfigMap的名称
          name: cm01
          #引用ConfigMap中的哪个key?
          key: oslee
    #引入第二个变量
    - name: env-cm02
      valueFrom:
        configMapKeyRef:
          name: cm01
          #引用ConfigMap中的哪个key?
          key: my.cnf

# 创建资源

[root@k8s1 configmap]# kubectl apply -f pod-env.yaml 
pod/m1 created

# 进入容器查看变量是否引入成功

[root@k8s1 configmap]# kubectl exec m1 -it -- sh
/ # env

env-cm01=HELLO WORLD
KUBERNETES_SERVICE_HOST=10.200.0.1
PWD=/
env-cm02=[mysqld]
datadir=/xinjizhiwa/data
basedir=/usr/bin/mysqld/bin/
socket=/tmp/mysql.socket
skip-name-resolve=1
port=3306
[client]
username=admin
password=1

2.创建pod资源,volume挂载卷引入cm

# 编辑pod资源清单

apiVersion: v1
kind: Pod
metadata:
  name: m1
spec:
  #声明pod存储卷
  volumes:
  - name: vol-cm
    #声明挂载cm资源
    configMap:
      #指定cm组员名称
      name: cm01
      #如果不写items,则引用cm资源中全部的key:value作为文件挂载
      items:
      #cm资源的key是什么
      - key: oslee
        #key的value值挂载到容器中变成文件内容,文件名叫什么?
        path: oslee.txt
      - key: my.cnf
        path: my.cnf

  containers:
  - name: c1
    image: nginx:1.20.1-alpine
    volumeMounts:
    - name: vol-cm
      mountPath: /k8s

# 创建资源

[root@k8s1 configmap]# kubectl apply -f pod-env.yaml 
pod/m1 created 

# 进入pod容器查看是否挂载成功,变成文件

[root@k8s1 configmap]#  kubectl exec m1 -it -- sh
/ # ls -l k8s/
total 0
lrwxrwxrwx    1 root     root            13 May  1 06:18 my.cnf -> ..data/my.cnf
lrwxrwxrwx    1 root     root            16 May  1 06:18 oslee.txt -> ..data/oslee.txt

 3.拓展subPath

拓展:当pod挂载cm资源到容器的目录后,若容器的原目录中有文件,则会被清空,那么如何做到,及把cm资源挂载成为文件到容器的指定目录,又能保证容器原目录中的文件不清空呐? 

apiVersion: v1
kind: Pod
metadata:
  name: m1
spec:
  #声明pod存储卷
  volumes:
  - name: vol-cm
    #声明挂载cm资源
    configMap:
      #指定cm组员名称
      name: cm01
      #如果不写items,则引用cm资源中全部的key:value作为文件挂载
      items:
      #cm资源的key是什么
      - key: oslee
        #key的value值挂载到容器中变成文件内容,文件名叫什么?
        path: oslee.txt
      - key: my.cnf
        path: my.cnf


  containers:
  - name: c1
    image: nginx:1.20.1-alpine
    volumeMounts:
    - name: vol-cm
      mountPath: /k8s
      #如果subPath不指定任何值(默认),则默认容器挂载路径为空,表示清空挂载点;
      #如果subPath指定名称和cm的Path相同,表示仅仅挂载这个文件,不清空挂在的目录保留原本容器路径的文件;
      #也就是说volumes>>configMap>items>path只有与subPath的值相等时,才是挂载文件;否则就是挂载目录;会清空目录; 
      subPath: my.cnf
      #resdOnly: true #只读设置;表示不允许容器内编辑或删除这个文件;

  • 40
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s中的ConfigMap是一种用于存储配置数据的资源对象,可以在容器中使用这些配置数据。PV(Persistent Volume)是一种持久化存储资源,用于将存储卷与Pod进行绑定。下面是关于k8s中的nginx ConfigMap和PV的介绍和演示: 1. 创建nginx ConfigMap: ```shell kubectl create configmap nginx-config --from-file=/etc/config/ ``` 这将创建一个名为nginx-config的ConfigMap,并将/etc/config/目录下的所有文件作为配置数据。 2. 查看ConfigMap信息: ```shell kubectl get configmap nginx-config ``` 这将显示名为nginx-config的ConfigMap的详细信息。 3. 在Pod中使用ConfigMap: 可以在Pod的配置文件中使用ConfigMap来注入配置数据。例如,在Pod的配置文件中添加以下内容: ```yaml apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx-container image: nginx volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: nginx-config ``` 这将在Pod中创建一个名为config-volume的卷,并将nginx-config ConfigMap的配置数据挂载到Pod的/etc/config目录下。 4. 创建PV: ```shell kubectl apply -f pv.yaml ``` 其中pv.yaml是一个包含PV定义的YAML文件。 5. 查看PV信息: ```shell kubectl get pv ``` 这将显示所有PV的详细信息。 6. 将PV与Pod绑定: 可以在Pod的配置文件中使用PV来绑定持久化存储。例如,在Pod的配置文件中添加以下内容: ```yaml apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx-container image: nginx volumeMounts: - name: data-volume mountPath: /data volumes: - name: data-volume persistentVolumeClaim: claimName: my-pvc ``` 这将在Pod中创建一个名为data-volume的卷,并将名为my-pvc的PersistentVolumeClaim与之绑定。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值