【问题标题】:Mount two persistent volume claims in one deployment cause error在一个部署中挂载两个持久卷声明会导致错误
【发布时间】:2018-12-16 00:58:48
【问题描述】:

我创建了两个 PersistentVolumeClaims(一个用于 redis,一个用于持久日志)并尝试在单个部署中安装两者,但在创建部署后,我收到以下错误:

nodes are available: 3 node(s) didn't match node selector, 4 node(s) had no available volume zone.

但是,只要我从部署 yaml 文件中删除一个 PVC,它就可以正常工作。我正在使用 Kubernetes 引擎在 Google Cloud Platform 上运行它。

pvc1:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-log
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 20Gi
  storageClassName: standard

PVC2:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-redis
spec:
  accessModes:
    - ReadWriteOnce
volumeMode: Filesystem
resources:
  requests:
    storage: 20Gi
storageClassName: standard

部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: 'prod-deployment'
spec:
  replicas: 1
template:
  metadata:
    labels:
      app: foo
      release: canary
      environment: production
  spec:
    containers:
      - name: api-server
        image: 'foo:latest'
        volumeMounts:
          - mountPath: /logs
            name: log-storage
      - name: redis
        image: 'redis'
        volumeMounts:
          - mountPath: /data
            name: redis-data
    volumes:
      - name: redis-data
        persistentVolumeClaim:
          claimName: pvc-redis
      - name: log-storage
        persistentVolumeClaim:
          claimName: pvc-log

【问题讨论】:

    标签: kubernetes google-kubernetes-engine


    【解决方案1】:

    这类似于this。这很可能是由于 PVC 试图在您没有节点的可用区上创建卷。您可以尝试将标准 StorageClass 限制为仅具有 Kubernetes 节点的可用区。像这样的:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: standard
    provisioner: kubernetes.io/gce-pd
    parameters:
      type: pd-standard
    allowedTopologies:
    - matchLabelExpressions:
      - key: failure-domain.beta.kubernetes.io/zone
        values:
        - us-central1-a
        - us-central1-b
    

    【讨论】:

      【解决方案2】:

      调度程序拒绝“NoVolumeZoneConflict”谓词,这是声明: https://github.com/kubernetes/kubernetes/blob/master/pkg/scheduler/algorithm/predicates/predicates.go#L564(因为我没有找到更好的文档,但我认为代码中的注释对此非常清楚)。

      正如 Rico 所说,您必须直接通过 storageclass 或 pv 来限制 pod 中卷的卷区域,但不推荐。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-27
        • 1970-01-01
        • 1970-01-01
        • 2017-03-14
        • 2017-06-05
        • 2019-02-01
        • 1970-01-01
        • 2020-05-28
        相关资源
        最近更新 更多