【云原生】k8s中volumeMounts.subPath的巧妙用法

一、概述

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

官方文档:https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/#using-subpath

二、使用场景

  1. 一个共享卷, 挂载多个路径。
  2. ConfigMap或Secret挂载到特定目录的特定路径, 而 该目录下已经有其他文件且不希望被覆盖掉。

三、共享卷中使用, 挂载多个路径

作为configmap/secret使用时,subPath代表configmap/secret的子路径。

【示例1】挂载目录,hostPath

apiVersion: v1
kind: Pod
metadata:
  name: my-lamp-site
spec:
    nodeName: local-168-182-110 # 为了测试方便,指定调度机器
    containers:
    - name: mysql
      image: mysql
      env:
      - name: MYSQL_ROOT_PASSWORD
        value: "rootpasswd"
      volumeMounts:
      - mountPath: /var/lib/mysql #挂载到容器的某个路径下
        name: site-data #挂载设备的名字,与volumes[*].name 需要对应
        subPath: mysql # volumes path中的子路径(会自动在volumes path目录下创建mysql空目录)
    - name: php
      image: php:7.0-apache
      volumeMounts:
      - mountPath: /var/www/html #挂载到容器的某个路径下
        name: site-data # volumes path中的子路径(会自动在volumes path目录下创建site-data【空目录】)
        subPath: html
    volumes:
      - name: nginx #和上面保持一致 这是本地的文件路径,上面是容器内部的路径
        hostPath:
          path: /opt/k8s/subPath/lamp #此路径需要实现创建

【示例2】挂载目录,pvc

StorageClass
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
pvc
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: my-lamp-site-data
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: local-storage
  selector:
    matchLabels:
      name: local-lamp-pv

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-test2
spec:
  replicas: 1
  selector:
    matchLabels:
     app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      nodeName: local-168-182-110 # 为了测试方便,指定调度机器
      containers:
      - name: nginx
        image: docker.io/library/nginx:latest
        volumeMounts:
        - name: nginx-cm # 与volumes.name一致
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
      volumes:
      - name: nginx-cm
        configMap:
          name: nginx-conf # configMap名称

【示例1】Secret

`bash
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: admin
password: MWYyZDFlMmU2N2Rm

Original: https://www.cnblogs.com/liugp/p/16651760.html
Author: 大数据老司机
Title: 【云原生】k8s中volumeMounts.subPath的巧妙用法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/562635/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球