我在一个节点中设置了一个新的k8s,这是受污染的。但是,当我试图创建一个简单的PersistentVolume
时,不能成功地创建PostgreSQL。
下面有一些详细的信息。
StorageClass
是从官方页面:https://kubernetes.io/docs/concepts/storage/storage-classes/#local复制的。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
StatefulSet
是:
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
$ 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
$ 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版本:
$ 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"}
发布于 2019-03-09 01:30:06
该应用程序正在等待Pod,而Pod则在等待PersistentVolume
的PersistentVolumeClaim
。但是,PersistentVolume
应该在使用之前由用户准备。
我以前的YAML缺少这样的PersistentVolume
:
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不会自动创建它。
发布于 2020-10-19 21:20:07
我自己就遇到了这个问题,并且完全被抛出循环,直到我意识到StorageClass
的VolumeBindingMode
被设置为WaitForFirstConsumer
副我的目标值Immediate
。这个值是不变的,所以您必须:
StorageClass
,然后再用新的volumeBindingMode
设置为Immediate
重新创建它。注意: EKS可能需要来创建像EBS或EFS这样的云资源。假设EBS,您应该对arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
很在行。
在这样做之后,您应该没有创建和使用动态配置PVs的问题。
发布于 2021-01-20 12:33:05
对我来说,问题是PV和PVC中的accessModes
字段不匹配。PVC要求RWX
/ReadWriteMany
,而PV提供RWO
/ReadWriteOnce
。
https://stackoverflow.com/questions/55044486
复制相似问题