【问题标题】:pod has unbound PersistentVolumeClaimspod 有未绑定的 PersistentVolumeClaims
【发布时间】:2019-03-11 03:46:32
【问题描述】:

当我推送我的部署时,出于某种原因,我的 pod 上出现错误:

pod 有未绑定的 PersistentVolumeClaims

下面是我的 YAML:

这是在本地运行,而不是在任何云解决方案上。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.16.0 ()
  creationTimestamp: null
  labels:
    io.kompose.service: ckan
  name: ckan
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: ckan
    spec:
      containers:
        image: slckan/docker_ckan
        name: ckan
        ports:
        - containerPort: 5000
        resources: {}
        volumeMounts:
            - name: ckan-home
              mountPath: /usr/lib/ckan/
              subPath: ckan
      volumes:
      - name: ckan-home
        persistentVolumeClaim:
          claimName: ckan-pv-home-claim
      restartPolicy: Always
status: {}

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ckan-pv-home-claim
  labels:
    io.kompose.service: ckan
spec:
  storageClassName: ckan-home-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
  volumeMode: Filesystem
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: ckan-home-sc
provisioner: kubernetes.io/no-provisioner
mountOptions:
  - dir_mode=0755
  - file_mode=0755
  - uid=1000
  - gid=1000

【问题讨论】:

    标签: kubernetes persistent-storage


    【解决方案1】:

    您必须定义一个 PersistentVolume,以提供 PersistentVolumeClaim 消耗的磁盘空间。

    当使用storageClass 时,Kubernetes 将启用 "Dynamic Volume Provisioning",它不适用于本地文件系统。


    解决您的问题:

    • 提供一个满足声明约束的 PersistentVolume(大小 >= 100Mi)
    • PersistentVolumeClaim 中删除 storageClass 或为其提供一个空值 ("")
    • 从集群中删除 StorageClass

    这些部分如何组合在一起?

    在创建部署状态描述时,通常知道应用程序需要哪种类型的存储(数量、速度等)。
    为了使部署具有通用性,您希望避免对存储的硬依赖。 Kubernetes 的卷抽象允许您以标准化的方式提供和使用存储。

    PersistentVolumeClaim 用于在部署应用程序的同时提供存储约束。

    PersistentVolume 提供可供使用的集群范围的卷实例(“bound”)。一个 PersistentVolume 将绑定到 一个 声明。但由于该声明的多个实例可能在多个节点上运行,因此该卷可能是多个节点的accessed

    没有 StorageClass 的 PersistentVolume 被认为是静态

    "Dynamic Volume Provisioning"with StorageClass 一起允许集群按需配置 PersistentVolume。 为了完成这项工作,给定的存储提供程序必须支持provisioning - 这允许集群在不满足的 PersistentVolumeClaim 弹出时请求提供“新”PersistentVolume起来。


    持久卷示例

    为了找到如何指定的东西你最好看看API for your Kubernetes version,所以下面的例子是从API-Reference of K8S 1.17构建的:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: ckan-pv-home
      labels:
        type: local
    spec:
      capacity:
        storage: 100Mi
      hostPath:
        path: "/mnt/data/ckan"
    

    PersistentVolumeSpec 允许我们定义多个属性。 我选择了一个hostPath 卷,它将本地目录映射为卷的内容。容量允许资源调度程序根据资源需求识别此容量。


    其他资源:

    【讨论】:

    • 不能删除StorageClass,只需将存储类名的值替换为空字符串即可,如StorageClass: ""
    • PersistentVolume 应该如何定义?
    • @VictorZuanazzi 好问题 - 似乎文档略有变化,我添加了一个示例。一开始深入研究 API 非常困难。 Fortunatley 经常有从 API 文档到指南的交叉引用,反之亦然。我希望这可以帮助你继续。
    • 感谢@mrvol 的提示 - 我在描述中添加了该选项。
    【解决方案2】:

    我遇到了这个问题,但我意识到我正在使用“手动”StorageClass 类型创建我的 PV。

    你的吊舱 期望什么样的存储类?

    您的 PVC 定义 volumeClaimTemplates --> storageClassName : "standard"

    PV 规格 --> storageClassName : "标准"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-07
      • 2022-10-18
      • 2020-12-27
      • 2020-11-03
      • 2020-12-19
      • 2021-01-06
      • 2021-04-07
      • 2020-08-31
      相关资源
      最近更新 更多