【发布时间】:2018-10-23 23:15:52
【问题描述】:
基本上,我正在创建一个带有 2 个 pod(单个主机集群)的 StatefulSet 部署,我希望每个 pod 都能够挂载到主机中的基本文件夹以及它下面的子文件夹:
基础文件夹挂载:/mnt/disks/ssd
Pod#1 - /mnt/disks/ssd/pod-1
Pod#2 - /mnt/disks/ssd/pod-2
我只设法将第一个 pod 挂载到基本文件夹,但无法挂载第二个文件夹(因为该卷已被占用)
这是音量:
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-local-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
local:
path: /mnt/disks/ssd
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- ubuntukuber
这是有状态集中的用法:
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: app
namespace: test-ns
spec:
serviceName: app
replicas: 2
....
....
volumeMounts:
- name: data
mountPath: /var/lib/app/data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "local-storage"
resources:
requests:
storage: 2Gi
所以,我基本上希望每个副本都使用自己的子文件夹 - 如何实现它?
== 编辑 ==
我已经取得了一些进展,我可以使用以下 YAML 将多个副本挂载到同一个挂载中(我尝试在其上执行此操作的应用程序是 rabbitmq - 所以我将应用程序名称保留为是)
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-local
namespace: test-rabbitmq
labels:
type: local
spec:
storageClassName: local
capacity:
storage: 6Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/disks"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: hostpath-pvc
namespace: test-rabbitmq
spec:
storageClassName: local
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
selector:
matchLabels:
type: local
---
在 StatefulSet 中,我声明了这个卷:
volumes:
- name: rabbitmq-data
persistentVolumeClaim:
claimName: hostpath-pvc
并安装“rabbitmq-data”。
两个 pod 都挂载到同一个文件夹,但不会创建子文件夹 - 这不是什么可怕的情况,因为默认情况下有 rabbitmq 的子文件夹 - 我会尝试将它扩展到每个 pod 以使用子文件夹
【问题讨论】:
标签: docker kubernetes volume