Kubernets——subPath介绍


前言

  subPath做为volumeMounts的配置参数实现了指定所引用的卷内的子路径,而不是其根路径。即在单个共享卷以供多个pod方使用是很有用的。


一、subPath

  subPath字段允许在PVC的挂载路径中指定一个子目录,而不是将整个PVC的内容直接挂载到Pod的目录中。这样,可以更灵活地控制Pod中使用哪些文件和目录。
  volume支持将configMap/secret挂载到容器的路径,但是会覆盖容器路径下原有的文件。如何支持选定configmap/secret的key-value挂载到容器中,且不会覆盖掉原目录下的文件,这个时候可以用subpath。

二、使用

  请注意,在使用subPath时,确保存储卷的内容与指定的子路径匹配,否则Pod可能会启动失败或出现其他问题。
  使用subPath指令,当挂载的卷(volumes)存在subPath(文件或目录),则卷不会自动创建subPath(目录);当卷(volumes)存在subPath(文件)是实现挂载文件的关键,否则就是挂载目录。

1、基础使用

下面是一个示例,演示如何使用subPath字段将PVC的特定子目录挂载到Pod中:
	apiVersion: v1  
	kind: PersistentVolumeClaim  
	metadata:  
	  name: my-pvc  
	spec:  
	  storageClassName: ""  
	  accessModes:  
	    - ReadWriteOnce  
	  resources:  
	    requests:  
	      storage: 1Gi
创建一个Pod(假设名称为my-pod),并将my-pvc下的test目录挂载到Pod的/app/data目录下:
	apiVersion: v1  
	kind: Pod  
	metadata:  
	  name: my-pod  
	spec:  
	  containers:  
	    - name: my-container  
	      image: my-image  
	      volumeMounts:  
	        - name: my-volume  
	          mountPath: /app/data  
	          subPath: test  # 子路径  
	  volumes:  
	    - name: my-volume  
	      persistentVolumeClaim:  
	        claimName: my-pvc

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

  使用 subPathExpr 字段可以基于 downward API 环境变量来构造 subPath 目录名。 subPath 和 subPathExpr 属性是互斥的。

	apiVersion: v1
	kind: Pod
	metadata:
	  name: pod1
	spec:
	  containers:
	  - name: container1
	    env:
	    - name: POD_NAME
	      valueFrom:
	        fieldRef:
	          apiVersion: v1
	          fieldPath: metadata.name
	    image: busybox:1.28
	    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


总结

  以上就是在K8S中subPath的基础使用,在部分场景中,我们可以通过使用subPath实现deployment应用挂载在持久存储中。有问题欢迎留言指导。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 Kubernetes 中,你可以通过在 Deployment 或者 StatefulSet 中配置一个 "subPath" 来实现 subpath。 在 Deployment 中使用 subPath 的示例配置如下: ``` apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: template: spec: containers: - name: my-container volumeMounts: - name: my-volume mountPath: /path/to/mount subPath: my-subpath volumes: - name: my-volume configMap: name: my-configmap ``` 在 StatefulSet 中使用 subPath 的示例配置如下: ``` apiVersion: apps/v1 kind: StatefulSet metadata: name: my-statefulset spec: template: spec: containers: - name: my-container volumeMounts: - name: my-volume mountPath: /path/to/mount subPath: my-subpath volumes: - name: my-volume configMap: name: my-configmap ``` 其中,"subPath" 应该指向 configMap 中需要挂载的目录或文件的路径。 需要注意的是,这个只适用于 configMap 与 Secret 这两种 volume。 ### 回答2: K8s(Kubernetes)的Subpath是一种配置方式,用于将容器内的特定路径挂载到Pod的特定路径上。接下来我将用300字回答如何配置K8s的Subpath。 首先,要使用Subpath,需要在Pod的配置文件中的“volumes”部分定义一个Volume,并指定其类型和相关配置。例如,可以定义一个ConfigMap类型的Volume,通过将容器内的文件或目录路径挂载到Pod的某个路径上,实现文件共享和持久化。 接下来,在同一个Pod配置文件中的“volumeMounts”部分,将定义的Volume挂载到容器内的特定路径上。同样需要指定路径和相关配置。例如,可以将Volume挂载到容器内的/mounted_path路径上。 最后,确保在Pod的配置文件中,将定义的Volume和对应的VolumeMounts以及容器的其他相关配置相连接。 以下为示例配置: ``` apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: myimage volumeMounts: - name: myvolume mountPath: /mounted_path readOnly: true # 是否设置只读 volumes: - name: myvolume configMap: name: myconfigmap ``` 在上述示例中,定义了一个名为myvolume的Volume,类型为ConfigMap,将myconfigmap映射到Pod中。然后,在容器mycontainer中,将myvolume挂载到/mounted_path路径上,并设置为只读。 通过这样配置,容器内的特定路径和Pod的特定路径就能进行映射,可以实现文件的共享和持久化,便于资源的管理和访问。 总结起来,使用Subpath配置,需要在Pod的配置文件中定义Volume和VolumeMounts,并确保将它们连接到容器的相关路径上。这样就能实现容器内某个路径的挂载到Pod的特定路径上,方便文件的管理和访问。 ### 回答3: 在Kubernetes中,SubPath用于将容器中的单个文件或目录挂载到容器中的特定路径上。在进行SubPath配置时,需要在容器的卷挂载配置中添加subPath字段,并指定宿主机的文件或目录路径。 首先,在Pod的配置文件中,定义一个Volume,指定它的类型和名称。例如,可以使用emptyDir作为Volume类型,名称为"myvolume": ```yaml ... volumes: - name: myvolume emptyDir: {} ... ``` 接下来,在容器的卷挂载配置中,使用上面定义的Volume,并添加subPath字段来指定容器内挂载点的路径。例如,将宿主机上的"/data/myfile.txt"文件挂载到容器内的"/app/data"目录下: ```yaml ... volumeMounts: - name: myvolume mountPath: /app/data subPath: myfile.txt ... ``` 完成上述配置后,当Pod启动时,"/data/myfile.txt"文件将会被挂载到容器内的"/app/data/myfile.txt"路径上。 需要注意的是,subPath只能用于将单个文件或目录挂载到容器中,无法将多个文件或目录挂载到同一个路径上。此外,修改subPath字段的值可能会导致Pod重新启动,以确保卷的正确挂载和文件的可访问性。 总结起来,通过在Pod的Volumes定义中创建一个Volume,并在容器的VolumeMounts中指定subPath字段,可以配置Kubernetes中的SubPath。这样可以将宿主机上的文件或目录挂载到容器中指定的路径上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值