卷中每个 pod 的动态卷配置文件夹?
Dynamic volume provisioning folder per pod in a volume?
我的目标是使用 StatefulSet 中的 volumeClaimsTemplate 在卷内为每个 pod 创建一个文件夹(pod 名称)。
例如:
- PersistentVolume = "/数据"
- Pods:
- pod-0 =“/data/pod-0”
- pod-1 =“/data/pod-1”
我正在努力让副本为自己创建新文件夹。任何有关如何执行此操作的帮助将不胜感激。
volumeClaimTemplates
is a list of claims that pods are allowed to
reference. The StatefulSet controller is responsible for mapping
network identities to claims in a way that maintains the identity of a
pod. Every claim in this list must have at least one matching (by
name) volumeMount in one container in the template. A claim in this
list takes precedence over any volumes in the template, with the same
name.
这意味着使用 volumeClaimTemplates
您可以动态地从存储 class 请求 PVC。
如果我们以这个yaml
为例:
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "standard"
resources:
requests:
storage: 1Gi
部署 pods 后,您会注意到正在创建 pods,并且在创建过程中请求了 PVC
。 PVC
是以下约定中的名称:
volumeClaimTemplate
姓名+Pod-name
+Ordinal-number
所以如果你以上面的yaml为例,你将收到三个PVC(假设有3个副本):
NAME STATUS VOLUME
www-web-0 Bound pvc-12d77135...
www-web-1 Bound pvc-08724947...
www-web-2 Bound pvc-50ac9f96
值得一提的是,Persistent Volume Claims
表示特定 Pod 对 Persistent Volume 的独占使用。
这意味着如果我们单独查看卷,我们会发现每个卷都分配给了一个特定的 pod:
➜ ~ pwd
/tmp/hostpath-provisioner/pvc-08724947...
➜ ~ ls
web-1
➜ ~ pwd
/tmp/hostpath-provisioner/pvc-50ac9f96...
➜ ~ ls
web-2
在测试时我确实实现了你的目标,但我必须手动创建 persistentvolumes
并且它们必须指向相同的本地路径:
local:
path: /home/docker/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- minikube
这与 subPathExpr
结合将以 pods 命名的目录安装到指定路径中。
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
subPathExpr: $(NAME)
env:
- name: NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
结果(web
是部署的名称):
➜ ~ pwd
/home/docker/data
➜ ~ pwd
web-0 web-1 web-2
这里有更多关于 subpath with expanded env variables 工作原理的信息。
Use the subPathExpr
field to construct subPath
directory names from Downward API environment variables. This feature requires the VolumeSubpathEnvExpansion
feature gate to be enabled. It is enabled by default starting with Kubernetes 1.15. The subPath
and subPathExpr
properties are mutually exclusive.
如果您有任何问题,请告诉我。
我的目标是使用 StatefulSet 中的 volumeClaimsTemplate 在卷内为每个 pod 创建一个文件夹(pod 名称)。
例如:
- PersistentVolume = "/数据"
- Pods:
- pod-0 =“/data/pod-0”
- pod-1 =“/data/pod-1”
我正在努力让副本为自己创建新文件夹。任何有关如何执行此操作的帮助将不胜感激。
volumeClaimTemplates
is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.
这意味着使用 volumeClaimTemplates
您可以动态地从存储 class 请求 PVC。
如果我们以这个yaml
为例:
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "standard"
resources:
requests:
storage: 1Gi
部署 pods 后,您会注意到正在创建 pods,并且在创建过程中请求了 PVC
。 PVC
是以下约定中的名称:
volumeClaimTemplate
姓名+Pod-name
+Ordinal-number
所以如果你以上面的yaml为例,你将收到三个PVC(假设有3个副本):
NAME STATUS VOLUME
www-web-0 Bound pvc-12d77135...
www-web-1 Bound pvc-08724947...
www-web-2 Bound pvc-50ac9f96
值得一提的是,Persistent Volume Claims
表示特定 Pod 对 Persistent Volume 的独占使用。
这意味着如果我们单独查看卷,我们会发现每个卷都分配给了一个特定的 pod:
➜ ~ pwd
/tmp/hostpath-provisioner/pvc-08724947...
➜ ~ ls
web-1
➜ ~ pwd
/tmp/hostpath-provisioner/pvc-50ac9f96...
➜ ~ ls
web-2
在测试时我确实实现了你的目标,但我必须手动创建 persistentvolumes
并且它们必须指向相同的本地路径:
local:
path: /home/docker/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- minikube
这与 subPathExpr
结合将以 pods 命名的目录安装到指定路径中。
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
subPathExpr: $(NAME)
env:
- name: NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
结果(web
是部署的名称):
➜ ~ pwd
/home/docker/data
➜ ~ pwd
web-0 web-1 web-2
这里有更多关于 subpath with expanded env variables 工作原理的信息。
Use the
subPathExpr
field to constructsubPath
directory names from Downward API environment variables. This feature requires theVolumeSubpathEnvExpansion
feature gate to be enabled. It is enabled by default starting with Kubernetes 1.15. ThesubPath
andsubPathExpr
properties are mutually exclusive.
如果您有任何问题,请告诉我。