Pod 有未绑定的持续声明

当我推进我的部署,由于某些原因,我得到了我的吊舱的错误:

Pod 有未绑定的持续声明

以下是我的 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
222769 次浏览

您必须定义一个 持续音量,提供供 持续数量索赔使用的磁盘空间。

当使用 storageClass库伯内特将启用 “动态容量供应”,这是不与本地文件系统工作。


解决你的问题:

  • 提供符合索赔要求的 持续音量(大小 > = 100Mi)
  • 持续数量索赔中删除 storageClass或者为其提供一个空值("")
  • 从集群中删除 存储类

这些片段是如何组合在一起的?

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

持续数量索赔用于在部署应用程序的同时提供存储约束。

持续音量提供集群范围的卷实例(“ bound”)。一个持久卷将绑定到 索赔。但是,由于该声明的多个实例可能在多个节点上运行,所以该卷可能是由多个节点构成的 访问

没有存储类的持久卷被认为是 静电干扰

a 存储类旁边的“动态卷供应” 允许集群根据需要供应持久卷。 为了实现这一点,给定的存储提供程序必须支持 供应-这允许集群在出现不满意的 持续数量索赔时请求“新”持续音量的供应。


示例持久化卷

为了找到如何指定的东西,你最好看看 你的库伯内版本的 API,所以下面的例子是从 API-K8S 1.17的参考文献构建的:

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

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


其他资源:

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

你的休眠舱 期望什么类型的存储类?

聚氯乙烯的定义 历史记录: 卷声明模板—— > storageClassName: “标准”

PV Spec —— > storageClassName: “ standard”

如果您使用的农场主 k3s 库伯内特分布,设置 storageClassNamelocal-path,如 医生中所述

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-path-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 2Gi

要在其他发行版上使用它,请使用 https://github.com/rancher/local-path-provisioner

在可能的情况下,问题是,在 PersistentVolumeClaim声明中指定的 PersistentVolume名称错误。

但可能还有其他原因,确保:

  1. PVC中指定的 volumeName名称与 PV名称匹配
  2. PVC中指定的 storageClassName名称与 PV名称匹配
  3. 已为资源分配了足够的容量大小
  4. You PVPVC的访问模式是一致的
  5. PV的数目匹配 PVC

详细说明请阅读此 文章