首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WaitForFirstConsumer PersistentVolumeClaim等待在绑定之前创建第一个使用者

WaitForFirstConsumer PersistentVolumeClaim等待在绑定之前创建第一个使用者
EN

Stack Overflow用户
提问于 2019-03-07 13:04:24
回答 9查看 49.5K关注 0票数 20

我在一个节点中设置了一个新的k8s,这是受污染的。但是,当我试图创建一个简单的PersistentVolume时,不能成功地创建PostgreSQL。

下面有一些详细的信息。

StorageClass是从官方页面:https://kubernetes.io/docs/concepts/storage/storage-classes/#local复制的。

代码语言:javascript
运行
复制
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

StatefulSet是:

代码语言:javascript
运行
复制
kind: StatefulSet
apiVersion: apps/v1beta1
metadata:
  name: postgres
spec:
  serviceName: postgres
  replicas: 1
  ...
  volumeClaimTemplates:
    - metadata:
        name: postgres-data
      spec:
        storageClassName: local-storage
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi

关于正在运行的StorageClass

代码语言:javascript
运行
复制
$ kubectl describe storageclasses.storage.k8s.io
Name:            local-storage
IsDefaultClass:  No
Annotations:     kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"name":"local-storage"},"provisioner":"kubernetes.io/no-provisioner","volumeBindingMode":"WaitForFirstConsumer"}

Provisioner:           kubernetes.io/no-provisioner
Parameters:            <none>
AllowVolumeExpansion:  <unset>
MountOptions:          <none>
ReclaimPolicy:         Delete
VolumeBindingMode:     WaitForFirstConsumer
Events:                <none>

关于正在运行的PersistentVolumeClaim

代码语言:javascript
运行
复制
$ kubectl describe pvc
Name:          postgres-data-postgres-0
Namespace:     default
StorageClass:  local-storage
Status:        Pending
Volume:
Labels:        app=postgres
Annotations:   <none>
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode:    Filesystem
Events:
  Type       Reason                Age                            From                         Message
  ----       ------                ----                           ----                         -------
  Normal     WaitForFirstConsumer  <invalid> (x2 over <invalid>)  persistentvolume-controller  waiting for first consumer to be created before binding

K8s版本:

代码语言:javascript
运行
复制
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.4", GitCommit:"c27b913fddd1a6c480c229191a087698aa92f0b1", GitTreeState:"clean", BuildDate:"2019-02-28T13:37:52Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.1", GitCommit:"eec55b9ba98609a46fee712359c7b5b365bdd920", GitTreeState:"clean", BuildDate:"2018-12-13T10:31:33Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"}
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2019-03-09 01:30:06

该应用程序正在等待Pod,而Pod则在等待PersistentVolumePersistentVolumeClaim。但是,PersistentVolume应该在使用之前由用户准备。

我以前的YAML缺少这样的PersistentVolume

代码语言:javascript
运行
复制
kind: PersistentVolume
apiVersion: v1
metadata:
  name: postgres-data
  labels:
    type: local
spec:
  storageClassName: local-storage
  capacity:
    storage: 1Gi
  local:
    path: /data/postgres
  persistentVolumeReclaimPolicy: Retain
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
          - key: app
            operator: In
            values:
              - postgres

应该在使用之前准备本地路径/data/postgres。Kubernetes不会自动创建它。

票数 16
EN

Stack Overflow用户

发布于 2020-10-19 21:20:07

我自己就遇到了这个问题,并且完全被抛出循环,直到我意识到StorageClassVolumeBindingMode被设置为WaitForFirstConsumer副我的目标值Immediate。这个值是不变的,所以您必须:

  1. 获取存储类yaml: storageclasses.storage.k8s.io gp2 -o yaml > gp2.yaml 或者您也可以从这里的医生复制示例(确保元数据名称匹配)。以下是我所配置的内容: apiVersion: storage.k8s.io/v1种类: StorageClass元数据: name: gp2 provisioner: kubernetes.io/aws参数:类型: gp2 reclaimPolicy: Delete allowVolumeExpansion: true mountOptions:- debug volumeBindingMode: ebs
  2. 并删除旧的StorageClass,然后再用新的volumeBindingMode设置为Immediate重新创建它。

注意: EKS可能需要来创建像EBS或EFS这样的云资源。假设EBS,您应该对arn:aws:iam::aws:policy/AmazonEKSClusterPolicy很在行。

在这样做之后,您应该没有创建和使用动态配置PVs的问题。

票数 7
EN

Stack Overflow用户

发布于 2021-01-20 12:33:05

对我来说,问题是PV和PVC中的accessModes字段不匹配。PVC要求RWX/ReadWriteMany,而PV提供RWO/ReadWriteOnce

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55044486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档