• k8s configMap中subPath字段和items字段详解


    1. subPath字段的作用

    在Linux中,将目录A挂载到目录B,则目录B原有的文件都会被目录A下的文件覆盖。

    那么在k8s中,如何将configmap挂载到容器中某个目录的文件中呢?答案是使用subPath。

    subPath可以将configMap和secret作为文件挂载到容器中而不覆盖挂载目录下的文件。

    话不多说,直接看一个例子。

    制作案例镜像:

    dockerfile:

    FROM busybox
    WORKDIR /workspace
    RUN touch a.txt b.txt c.txt
    
    • 1
    • 2
    • 3

    切换到dockerfile目录下执行:

    docker build -t mydocker:latest .
    docker tag mydocker:latest zengfeng666/mydocker:1.0
    docker push zengfeng666/mydocker:1.0
    
    • 1
    • 2
    • 3

    configmap.yaml

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: configmap
      namespace: dev
    data:
      info: |
        username:admin
        password:123456
      info2: zhangssssssssssssssssssssssssss
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    pod1.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod1
      namespace: dev
    spec:
      containers:
      - name: mydocker
        image: zengfeng666/mydocker:1.0
        command: ["/bin/sh", "-c", "while true; do sleep 2; done;"]
        volumeMounts:
        - name: config
          mountPath: /workspace
      volumes:
      - name: config
        configMap:
          name: configmap
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    pod2.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod2
      namespace: dev
    spec:
      containers:
      - name: mydocker
        image: zengfeng666/mydocker:1.0
        command: ["/bin/sh", "-c", "while true; do sleep 2; done;"]
        volumeMounts:
        - name: config
          mountPath: /workspace/info
          subPath: info
        - name: config
          mountPath: /workspace/info2
          subPath: info2
      volumes:
      - name: config
        configMap:
          name: configmap
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    $ kubectl create -f pod1.yaml
    $ kubectl create -f pod2.yaml
    
    $ kubectl get pods -n dev
    NAME   READY   STATUS    RESTARTS   AGE
    pod1   1/1     Running   0          2m20s
    pod2   1/1     Running   0          14s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    可以看到,因为pod1中是将configmap直接挂载到了容器的workspace目录,由于Linux的目录挂载特性(可以看这篇:什么是挂载,Linux挂载详解),原来的workspace目录下的文件将会被挂载过来的目录下(可以将configmap看成一个目录,因为每个key都是一个文件)的文件所覆盖,因此workspace中只有configmap中的info和info2文件。如果不想被覆盖,则要以文件的方式进行挂载,如pod2.yaml中所示,注意mountPath和subPath的写法,subPath此时指的就是configMap中的key,也就是文件名。

    img

    img

    2. items字段的作用

    假如不想以key名作为配置文件名可以引入items 字段,在其中逐个指定要用相对路径path替换的key:

         volumes:
          - name: config
            configMap:
              name: configmap
              items:
              - key: info         # 原文件名(key的名称)
                path: userinfo    # 修改之后的文件名(key的名称)
              - key: info2
                path: userinfo2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    items还有一个作用,就是只有items下的key对应的文件会被挂载到容器中。

    比如pod1.yaml中不想把info和info2都挂载到workspace目录下,而只需要挂载info到workspace目录下,则可以将pod1.yaml的volumes字段修改为:

         volumes:
          - name: config
            configMap:
              name: configmap
              items:
              - key: info         
                path: info         
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    参考:

    k8s configMap 中 subPath 字段和 items 字段

    k8s官网 卷 - 使用 subPath

    Kubernetes subPath | 容器原目录下的文件全被覆盖了,什么鬼?

    Kubernetes的ConfigMap详解

    k8s官网 ConfigMap

  • 相关阅读:
    redisson分布式锁
    MySQL模块---查询和插入数据
    字符串|459.重复的子字符串
    【机器学习】划分训练集和测试集的方法
    代码随想录算法训练营第五十一天|309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费
    【Paddle2ONNX】为 Paddle2ONNX 升级自适应ONNX IR Version功能
    CleanMyMac磁盘空间内存瘦身清理软件使用教程
    selenium自动化测试过程中接口的调用信息
    跨域问题讨论
    【深度学习】卷积神经网络(LeNet)【文章重新修改中】
  • 原文地址:https://blog.csdn.net/a772304419/article/details/125910287