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

如果我用动态卷配置注释它,它将在随机可用区创建卷声明和卷,并且宠物将无法启动,因为在本例中,每个宠物需要实际调度4个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上的zone 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,但可能不适合您的用例

最新更新