![](/img/trans.png)
[英]How to use existing PVC in statefulSet definition in Kubernetes?
[英]PVC template and failure-domain.beta.kubernetes.io/zone
我有一个PetSet
volumeClaimTemplates:
- metadata:
name: content
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
- metadata:
name: database
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
- metadata:
name: file
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
- metadata:
name: repository
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
如果我用动态卷配置进行注释,它将在随机可用性区域中创建卷声明和卷,而宠物将无法启动,因为在此示例中,每只宠物实际上需要四个大小为2Gi的卷才能进行实际调度。 如果我手动创建卷,则可以将它们标记为failure-domain.beta.kubernetes.io/zone:例如us-east-1d ,通过这种方式,我可以使用按故障域匹配标签的选择器来创建PVC。 但是,如何使用volumeClaimTemplates做类似的事情? 我的意思是我不想将它们全部固定在一个故障域上。 但是由于某种原因,卷声明模板不会在同一故障域中为一只宠物创建所有卷。
想法?
您可以创建一个存储类并在其中添加故障区域。 例如,创建这样的存储类:
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: gp2storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
zone: us-east-1b
encrypted: "true"
在上面的示例中,我们在AWS的us-east-1b
区域中创建PV。 然后在您的模板中引用该存储类:
volumeClaimTemplates:
- metadata:
name: data
annotations:
volume.beta.kubernetes.io/storage-class: default
PV创建不是StatefulSet代码的一部分,因此对于给定的Pod,它不“知道”它们都必须位于同一故障域中。
卷供应器中有一段代码可以识别PetSet样式的名称并哈希基本名称,然后将该数字用作偏移量。
因此,具有相同基本名称的卷会散布在区域中-但是这里我们有多个卷名,因此它们的散列方式不同,因此-0
会散布在多个区域中
如果这是必需的,那么最好在跟踪器中提出有关此问题的方法
但是,您是否考虑过执行以下操作?
apiVersion: apps/v1alpha1
kind: PetSet
spec:
template:
spec:
containers:
-
volumeMounts:
- name: contentdatabasefilerepository
mountPath: /var/www/content
subPath: content
- name: contentdatabasefilerepository
mountPath: /var/database
subPath: database
volumeClaimTemplates:
- metadata:
name: contentdatabasefilerepository
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 8Gi
每个宠物只有一个卷,但是您可以在多个位置挂载它的子路径。 尽管这不会将每个目录限制为2Gi,所以可能不适合您的用例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.