一.subpath简单说明

在Pod中共享卷以供多方使用是很有用的。VolumeMounts.subPath属性可用于指定所引用的卷内的子路径,而不是其根路径。

二.subpath使用场景

  • 1个Pod中可以有多个容器,这里将不同容器的路径挂载在存储卷volume的子路径,这种场景需要使用到subpath。
  • volume支持将configMap/secret挂载到容器的路径,但是会覆盖容器路径下原有的文件。如何支持选定configmap/secret的key-value挂载到容器中,且不会覆盖掉原目录下的文件,这个时候可以用subpath。

2.1 存储卷挂载

# 这里我们提前创建好一个PVC-CLAIM名称为pvc-subpath
[root@k8s001 subpath]# cat pvc.yaml
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-subpath
labels:
release: stable
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: /mnt/yuhaohao # 这个是宿主机真实存在的目录
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-subpath
namespace: default
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
[root@k8s001 subpath]# kubectl apply -f pvc.yaml
[root@k8s001 ~]# cat subpath.yaml
[root@k8s001 subpath]# cat subpath.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-subpath-yuhaohao
spec:
containers:
- name: redis-container
image: redis
volumeMounts:
- mountPath: /var/lib/redis # 容器1的挂载目录
name: subpath-volume # 这里指定pvc的volume名称
subPath: redispvc # 存储卷pvc-subpath要挂载的/mnt/yuhaohao的子目录
- name: nginx-container
image: nginx
volumeMounts:
- mountPath: /var/www/nginx # 容器2的挂载目录
name: subpath-volume # 这里指定pvc的volume名称
subPath: nginxpvc # 存储卷pvc-subpath要挂载的/mnt/yuhaohao的子目录
volumes:
- name: subpath-volume
persistentVolumeClaim:
claimName: pvc-subpath # PVC的名字
[root@k8s-master zhanglei]# kubectl create -f subpath.yaml
[root@k8s001 subpath]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-subpath-yuhaohao 2/2 Running 0 106s
[root@k8s001 yuhaohao]# pwd
/mnt/yuhaohao
[root@k8s001 yuhaohao]# ls
nginxpvc redispvc

2.2 configmap挂载

2.2.1 创建configmap

[root@k8s001 subpath]# cat configmap.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap-subpath
namespace: default
data:
example.property.1: hello # key-value键值对
example.property.2: world
example.property.file: |-
property.1=value-1
property.2=value-2
property.3=value-3
[root@k8s001 subpath]# kubectl apply -f configmap.yaml
configmap/configmap-subpath created
[root@k8s001 subpath]# kubectl get cm
NAME DATA AGE
configmap-subpath 3 35s
[root@k8s001 subpath]# cat pod-configmap.yaml
apiVersion: v1
kind: Pod
metadata:
name: configmap-subpath-test
labels:
purpose: configmap-subpath-test
spec:
containers:
- name: configmap-subpath-test
image: nginx
volumeMounts:
- name: config-volume
mountPath: /etc/nginx/example.property.1 # 容器挂载的目录路径为容器的/etc/nginx,文件名为example.property.1
subPath: example.property.1 # 将key名称作为文件名,hello作为文件内容
volumes:
- name: config-volume
configMap:
name: configmap-subpath # 指定使用哪个CM
[root@k8s001 subpath]# kubectl apply -f pod-configmap.yaml
pod/configmap-subpath-test created
[root@k8s001 subpath]# kubectl get pod
NAME READY STATUS RESTARTS AGE
configmap-subpath-test 1/1 Running 0 7s
[root@k8s001 subpath]# kubectl exec configmap-subpath-test cat /etc/nginx/example.property.1
hello

参考链接:https://www.cnblogs.com/gdut1425/p/13112176.html

kubernetes之subpath的使用的更多相关文章

  1. kubernetes之configmap,深度解析mountPath,subPath,key,path的关系和作用

    参考:https://www.cnblogs.com/breezey/p/6582082.html 我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库, ...

  2. Kubernetes volumes简介

    容器中的磁盘文件生命周期比较短暂,在一些比较复杂的容器应用中会产生一些问题.一.容器crash后,kubelet会重启该容器,但这些文件会丢失掉.二.pod中的多个容器经常需要共享文件.因此,Kube ...

  3. kubernetes之监控Operator部署Prometheus(三)

    第一章和第二章中我们配置Prometheus的成本非常高,而且也非常麻烦.但是我们要考虑Prometheus.AlertManager 这些组件服务本身的高可用的话,成本就更高了,当然我们也完全可以用 ...

  4. kubernetes之监控Prometheus实战--prometheus介绍--获取监控(一)

    Prometheus介绍 Prometheus是一个最初在SoundCloud上构建的开源监控系统 .它现在是一个独立的开源项目,为了强调这一点,并说明项目的治理结构,Prometheus 于2016 ...

  5. kubernetes系列之ConfigMap使用方式

    作用理解 核心用途就是容器和配置的分离解耦. 如启用一个mysql容器,mysql容器重要的文件有两部分,一部分为存储数据文件,一部分为配置文件my.cnf,存储数据可以用持久存储实现和容器的分离解耦 ...

  6. Kubernetes之存储

    存储卷概述 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题.首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态) ...

  7. Kubernetes中的Configmap和Secret

    本文的试验环境为CentOS 7.3,Kubernetes集群为1.11.2,安装步骤参见kubeadm安装kubernetes V1.11.1 集群 应用场景:镜像往往是一个应用的基础,还有很多需要 ...

  8. K8S学习笔记之Kubernetes数据持久化方案

    在开始介绍k8s持久化存储前,我们有必要了解一下k8s的emptydir和hostpath.configmap以及secret的机制和用途. 0x00 Emptydir EmptyDir是一个空目录, ...

  9. 微服务开发有道之把项目迁移到Kubernetes上的5个小技巧

    我们将在本文中提供5个诀窍帮你将项目迁移到Kubernetes上,这些诀窍来源于过去12个月中OpenFaas社区的经验.下文的内容与Kubernetes 1.8兼容,并且已经应用于OpenFaaS ...

  10. kubernetes 实战5_命令_Assign Pods to Nodes&Configure a Pod to Use a ConfigMap

    Assign Pods to Nodes how to assign a Kubernetes Pod to a particular node in a Kubernetes cluster. Ad ...

随机推荐

  1. Go语言修改字符串

    Go 语言的字符串无法直接修改每一个字符元素,只能通过重新构造新的字符串并赋值给原来的字符串变量实现.请参考下面的代码: angel := "Heros never die" an ...

  2. 【QT】解决生成的exe文件出现“无法定位程序入口”或“找不到xxx.dll”的问题

    [QT]解决生成的exe文件出现"无法定位程序入口"或"找不到xxx.dll"的问题 零.问题 使用QT编译好项目后,想直接在文件资源管理器中运行exe程序或想 ...

  3. SQLServer中事务处理

    --将当前库存记录insert医废转移单中 --declare @Warehouse nvarchar(100); declare @Warehouse_JJRID nvarchar(100); de ...

  4. Browser-use:基于 Python 的智能浏览器自动化 AI 工具调研与实战

    Browser-use:基于 Python 的智能浏览器自动化 AI 工具调研与实战 一.概述 Browser-use 是一个旨在将 AI "智能体"(Agents)与真实浏览器进 ...

  5. Mybatis-Plus中的@TableName 和 table-prefix

    简介 本文介绍Mybatis-Plus中的@TableName 和 table-prefix的使用. 介绍 在 MyBatis-Plus 中,@TableName 注解和 table-prefix 配 ...

  6. HL7消息编辑器的使用手册

    REDISANT 提供互联网与物联网开发测试套件 # 互联网与中间件: Redis Assistant ZooKeeper Assistant Kafka Assistant RocketMQ Ass ...

  7. px转rem适配方案之postcss-pxtorem

    一.安装 npm install postcss-pxtorem --save-dev 二.增加postcss.config.js文件 在目录文件下增加postcss.config.js并添加相关配置 ...

  8. 【SQL周周练】给你无酸纸、变色油墨,你能伪造多少美金?

    大家好,我是"蒋点数分",多年以来一直从事数据分析工作.从今天开始,与大家持续分享关于数据分析的学习内容. 本文是第 2 篇,也是[SQL 周周练]系列的第 2 篇.该系列是挑选或 ...

  9. 【记录】飞书多维表格|连接多选的结果 List 形成字符串(没有 TEXTJOIN 和 INDEX 和 ARRAYFORMULA)

    前言 当我使用 TEXTJOIN 或者 ARRAYFORMULA 的时候,它都显示没有.我找了一下文档也没找到解决办法.结果我研究了一下多维表格的设计,详见官方文档:多维表格公式字段概述,才发现它有 ...

  10. 【经验】Word 2021|如何在Word里做出和Markdown中一样漂亮的引用样式(结尾附成品)

    文章目录 写在最前 方法以及参数 1 打开样式窗口 2 设置一些基本操作 3 打开格式窗口 4 修改样式 最后一步!保持间隔 成品的介绍(一些自卖自夸)+获取链接(不想看做法的话直接下载) 写在最前 ...