我有一个PetSet with
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做类似的事情呢?我的意思是我不想把它们全部固定在一个故障领域。但由于某种原因,卷声明模板不会为同一个失败域中的一只宠物创建所有卷。
想法?
答案 0 :(得分:0)
您可以创建存储类并在其中添加失败区域。例如,创建一个这样的存储类:
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
答案 1 :(得分:0)
PV创建不是StatefulSet代码的一部分,因此对于给定的pod,它不会“知道”它们都需要位于同一个故障域中。
卷配置器中有一段代码recognises PetSet-style names并散列基本名称,然后将该数字作为偏移量。
因此,具有相同基本名称的卷会跨区域分布 - 但是这里我们有多个卷名称,因此它们会以不同方式进行散列,而-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,但可能不适合您的用例