首页 > 其他分享 >在 K8S Volume 中使用 subPath

在 K8S Volume 中使用 subPath

时间:2023-01-11 11:36:33浏览次数:60  
标签:volume name subPath site Volume mysql var K8S

使用 subPath

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

下面是一个使用同一共享卷的、内含 LAMP 栈(Linux Apache Mysql PHP)的 Pod 的示例。 HTML 内容被映射到卷的 html 文件夹,数据库将被存储在卷的 mysql 文件夹中:

apiVersion: v1
kind: Pod
metadata:
  name: my-lamp-site
spec:
    containers:
    - name: mysql
      image: mysql
      env:
      - name: MYSQL_ROOT_PASSWORD
        value: "rootpasswd"
      volumeMounts:
      - mountPath: /var/lib/mysql
        name: site-data
        subPath: mysql
    - name: php
      image: php:7.0-apache
      volumeMounts:
      - mountPath: /var/www/html
        name: site-data
        subPath: html
    volumes:
    - name: site-data
      persistentVolumeClaim:
        claimName: my-lamp-site-data

对上面的配置进行说明:

  1. volumeMounts 下面的name, 就是分配给这个pod的volume的名字site-data, mysql和php的html分别使用了它的子路径: mysqlhtml
  2. volumes 对于site-data这个volume, 是通过PVC的形式提供的, PVC的name为: my-lamp-site-data

使用带有扩展环境变量的 subPath

FEATURE STATE: Kubernetes v1.15 feature-state-beta.txt

使用 subPathExpr 字段从 Downward API 环境变量构造 subPath 目录名。 在使用此特性之前,必须启用 VolumeSubpathEnvExpansion 功能开关。 subPathsubPathExpr 属性是互斥的。

在这个示例中,Pod 基于 Downward API 中的 Pod 名称,使用 subPathExpr 在 hostPath 卷 /var/log/pods 中创建目录 pod1。 主机目录 /var/log/pods/pod1 挂载到了容器的 /logs 中。

apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: container1
    env:
    - name: POD_NAME
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: metadata.name
    image: busybox
    command: [ "sh", "-c", "while [ true ]; do echo 'Hello'; sleep 10; done | tee -a /logs/hello.txt" ]
    volumeMounts:
    - name: workdir1
      mountPath: /logs
      subPathExpr: $(POD_NAME)
  restartPolicy: Never
  volumes:
  - name: workdir1
    hostPath:
      path: /var/log/pods

说明:

  1. env中, 配置了POD_NAME这个环境变量, 这个变量的值来自于metadata.name, 即pod1
  2. subPathExpr: $(POD_NAME) 子路径为$(POD_NAME)这个变量, 就是pod1
  3. volume用的是hostPath, 实际路径为:/var/log/pods. 那么完整的path就是/var/log/pods/pod1

总结

subPath 还是挺实用的, 是个小功能, 但是确实能提交效率. 比如我昨天搭建的禅道的容器. 就是典型的LAMP: Linux + Apache + Mysql + PHP.

这些组件中,

  • Apachewww/html需要挂载
  • mysql的数据库需要挂载
  • php的应用数据需要挂载

如果没用subPath, 那么我得这么操作: (以nfs为例)

  1. nfs下手动创建3个子目录: html  mysql php
  2. 创建3个PV, 分别为: apache-volume mysql-volume php-volume
  3. 写3个PVC, 分别是: apache-claim mysql-claim php-claim. 而且2和3这两步最好一个pv+一个PVC来建. 避免bound乱了.
  4. 再修改Deployment 配置, 一个个挂载上去.

△ 算下来,10步.

用了subPath, 确实节省了工作量: (还是以nfs为例)

  1. 创建1个PV, 为: LAMP-volume
  2. 创建1个PVC, 为: LAMP-claim
  3. 再修改Deployment 配置, 挂载一个PVC, 用subPath区分.

△ 算下来, 3步.

标签:volume,name,subPath,site,Volume,mysql,var,K8S
From: https://blog.51cto.com/ewhisper/6001793

相关文章

  • 在 K8S Volume 中使用 subPath
    使用subPath有时,在单个Pod中共享卷以供多方使用是很有用的。volumeMounts.subPath属性可用于指定所引用的卷内的子路径,而不是其根路径。下面是一个使用同一共享卷的......
  • 【多用户】k8s多用户配置 kubeconfig
    K8S集群中的认证、授权与kubeconfig一、kubeconfig介绍-[appuser@k8s-master-1~]$cat/etc/kubernetes/kubeconfigapiVersion:v1kind:Configclusters:-name:shj......
  • Kubernetes(k8s) kubectl version常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • k8s cert-manager证书管理器
    k8scert-manager证书管理器1、安装cert-manager:helmrepoaddjetstackhttps://charts.jetstack.iohelmrepoupdatehelmpulljetstack/cert-manager--untarhelm......
  • ubuntu加入k8s1.24.4集群worker节点
    更新阿里云yumcat<<EOF|sudotee/etc/apt/sources.listdebhttp://mirrors.aliyun.com/ubuntu/focalmainrestricteduniversemultiverse#debhttps://mirrors.aliyu......
  • K8s 安装、部署与卸载(简单版本)
    安装了好几天,感觉网上大佬都是骗人的,后来又发现大佬们并没有骗人,只不过一些详细的地方没有细说,走了好多弯路啊o(╥﹏╥)o,后来慕课网找了视频才进入了正道,接下来搞个简单版本......
  • 云原生周刊 | 在 Grafana 中显示 K8s Service 之间的依赖关系
    开源项目推荐Caretta这个项目可以在Grafana监控面板中显示K8sService之间的依赖关系。底层使用的是eBPF,对应用无侵入。busuanzi这是一个基于Golang+Redis的......
  • k8s常用命令
    1、查看节点:kubectlgetnodes2、查看所有pod:kubectlgetpods-A,必须加-A,不然有些非默认的ns下的pod,看不到3、进入pod:kubectlexec-itpodName-nnamespace--/bin/s......
  • k8s强制删除crd(CustomResourceDefinition)
     kubectlpatchcrd/replicas.longhorn.io-p'{"metadata":{"finalizers":[]}}'--type=merge注意:红色部分为待删除的crd名称 ......
  • K8S 三种探针 ReadinessProbe、LivenessProbe和StartupProbe 之探索
    事件背景因为k8s中采用大量的异步机制、以及多种对象关系设计上的解耦,当应用实例数增加/删除、或者应用版本发生变化触发滚动升级时,系统并不能保证应用相关的service......