K8s subPath

原文地址:https://alphahinex.github.io/2021/01/31/k8s-subpath/

cover

description: "卷 内 子路径"
date: 2021.01.31 10:34
categories:
- K8s
tags: [K8s, DevOps]
keywords: subPath, volumeMount, volume


定义

在 K8s 中,VolumeMount 是用来挂载定义好的存储卷的。

其中有个属性 subPath 是这样描述的:

Field Description
subPath
string
Path within the volume from which the container's volume should be mounted. Defaults to "" (volume's root).

subPath 所定义的路径,指的是 卷(Volume)内的子路径,用于将卷内 subPath 所对应的目录或文件,挂载到容器的挂载点。不指定此参数时,默认是将卷的根路径中内容进行挂载。

使用场景

挂载一个存储卷中的多个路径

假设一个容器有多个路径需要挂载,如 YouTrack 需要挂载 dataconflogsbackups 四个路径。

或由于某些原因,创建出来的存储卷根路径中不是空的,但容器要求所挂载的路径中不能有其他内容,如 mysql5.7 创建有状态服务问题。

此时就有了 subPath 的用武之地。

以上面 YouTrack 为例,存储卷相关配置如下:

volumeMounts:
- name: volume-d3gekc
  mountPath: /opt/youtrack/data
  subPath: youtrack/data
- name: volume-d3gekc
  mountPath: /opt/youtrack/conf
  subPath: youtrack/conf
- name: volume-d3gekc
  mountPath: /opt/youtrack/logs
  subPath: youtrack/logs
- name: volume-d3gekc
  mountPath: /opt/youtrack/backups
  subPath: youtrack/backups

可以仅创建一个存储卷,然后将 YouTrack 持久化所需的四个路径,通过 subPath 挂载到该卷的不同子路径中。

挂载 ConfigMap 中的一个文件

在 K8s ConfigMap 一文中,我们也提到了 subPath 的用法,可以用来将 ConfigMap 中指定的 key 挂载到对应的挂载点,如:

volumeMounts:
- name: nginx-config-vol
  mountPath: /etc/nginx/nginx.conf # 也可挂载到文件
  subPath: nginx.conf # 挂载到文件时,需设置子路径

即将名为 nginx-config-vol 的 volume 中的 nginx.conf key 对应内容,以文件形式挂载到容器中 /etc/nginx/nginx.conf 路径。

需注意:在 ConfigMap 中使用 subPath 将影响 ConfigMap 内容变化时的自动更新。

你可能感兴趣的:(K8s subPath)