繁体   English   中英

PVC模板和failure-domain.beta.kubernetes.io/zone

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM