kubernetes - 如何将 PV 和 PVC 用于*可靠的*持久卷?
问题描述
我按照这篇文章中的说明进行操作: 如何将持久卷声明与 gcePersistentDisk 绑定?
当我应用它时,我的 PVC 没有绑定到 PV,而是在事件列表中出现了这个错误:
14s 17s 2 test-pvc.155b8df6bac15b5b PersistentVolumeClaim Warning ProvisioningFailed persistentvolume-controller Failed to provision volume with StorageClass "standard": claim.Spec.Selector is not supported for dynamic provisioning on GCE
我发现了一个 github 帖子,其中提出了一些可以解决此问题的建议:
https://github.com/coreos/prometheus-operator/issues/323#issuecomment-299016953
但不幸的是,这并没有什么不同。
是否有一个通俗易懂的文档告诉我们如何使用 PV 和 PVC 来创建真正持久的卷?具体来说,您可以在哪里关闭 pv 和 pvc 并稍后恢复它们,然后取回所有内容?因为现在看来,如果您由于某种原因丢失了 PVC,您将失去与您的音量的连接,并且无法再次将其取回。
解决方案
默认值StorageClass
与gcePesistentDisk
. 像这样的东西会起作用:
$ cat <<EOF | kubectl create -f -
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: slow
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
replication-type: none
EOF
然后在你的 PVC 上:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
labels:
app: test
spec:
accessModes:
- ReadWriteOnce
storageClassName: "slow" <== specify the storageClass
resources:
requests:
storage: 2Gi
selector:
matchLabels:
app: test
您还可以将“慢”设置为默认值 storageClass
,在这种情况下您不必在 PVC 上指定它:
$ kubectl patch storageclass slow -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
推荐阅读
- c# - 微前端如何分解UI?
- arrays - 使用带内联输出的 jq 1.3 计算 JSON 数组的分组成员
- vue.js - 在初始应用程序加载时修改 vuex 的良好做法
- c# - 无法使用 C# 在 Sql Server 2017 中执行 Sql 脚本
- entity-framework - 创建替代键后如何更新其数据类型?
- awk - AWK 意外字符
- c - 是否有调用开发路径的子文件夹的多功能?
- php - PHP array_merge 覆盖自身
- go - 如何设置默认选择选项以使用 Golang 选择标签?
- string - 使用 BigQuery REGEXP_REPLACE 修改部分字符串