我的目标是使用volumeClaimsTemplate在StatefulSet中创建一个在卷内创建的文件夹(荚名)。
一个例子是:
我正在努力获得副本,为自己创建新的文件夹。对如何做到这一点的任何帮助都将不胜感激。
发布于 2020-07-28 10:39:44
volumeClaimTemplates是允许豆荚引用的声明列表。StatefulSet控制器负责将网络标识映射到声明中,以维护吊舱的标识。此列表中的每个声明必须在模板中的一个容器中至少有一个匹配(按名称) volumeMount。此列表中的声明优先于模板中具有相同名称的任何卷。
这意味着使用volumeClaimTemplates,您可以动态地从存储类请求PVC。
如果我们使用这个yaml作为例子:
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "standard"
resources:
requests:
storage: 1Gi一旦你部署好你的豆荚,你就会注意到你的豆荚正在被创建,并且在创建过程中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对持久性卷的独占使用。这意味着,如果我们单独查看各卷,就会发现每一卷都分配给了一个特定的荚:
➜ ~ 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相结合,将以荚命名的目录挂载到指定的路径中。
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这里有更多关于带有展开env变量的子路径如何工作的信息。
使用
subPathExpr字段从向下的API环境变量构造subPath目录名。此特性要求启用VolumeSubpathEnvExpansion特征门。默认情况下,从Kubernetes 1.15开始启用它。subPath和subPathExpr属性是相互排斥的。
如果你有任何问题,请告诉我。
https://stackoverflow.com/questions/63076923
复制相似问题