码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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

  • 相关阅读:
    东航携手抖音生活服务开启机票首播,推出国内、国际超值机票次卡
    【BLE蓝牙学习开发笔记】安利一款简单好用且高性价比的BLE蓝牙抓包器
    应届生写简历不如AI?HR招人到底看什么
    思维模型丨看先辈是如何学习的?
    Pass-中间件管理
    CSS3 飘动的云和热气球
    parallelStream/ForkJoinPool 详解
    《算法导论》14.3 区间树
    紫光同创FPGA 多路视频处理:图像缩放+视频拼接显示,OV7725采集,提供PDS工程源码和技术支持
    vue3—elementPlus如何单独修改页面中的某个下拉框样式
  • 原文地址:https://blog.csdn.net/a772304419/article/details/125910287
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号