问题描述
请参见下面的输出。令我感到困惑的是,状态已绑定,但该卷在AWS中不存在。我正在使用Kubernetes 1.17
我还检查了是否没有POD使用此PVC(另外使用https://github.com/yashbhutwala/kubectl-df-pv来描述以下命令)
任何想法-这怎么可能?如果通过AWS CLI(或GUI Web UI)手动删除了该卷-这是否意味着Kubernetes无法正确处理这种情况?
k get pvc -n metrics
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
grafana-persistent-storage Bound pvc-1395291c-d89b-11e9-8a64-0a4976158cfe 1Gi RWO gp2 398d
➜ k describe pv pvc-1395291c-d89b-11e9-8a64-0a4976158cfe
Name: pvc-1395291c-d89b-11e9-8a64-0a4976158cfe
Labels: failure-domain.beta.kubernetes.io/region=eu-central-1
failure-domain.beta.kubernetes.io/zone=eu-central-1c
Annotations: kubernetes.io/createdby: aws-ebs-dynamic-provisioner
pv.kubernetes.io/bound-by-controller: yes
pv.kubernetes.io/provisioned-by: kubernetes.io/aws-ebs
Finalizers: [kubernetes.io/pv-protection]
StorageClass: gp2
Status: Bound
Claim: metrics/grafana-persistent-storage
Reclaim Policy: Delete
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 1Gi
Node Affinity:
Required Terms:
Term 0: failure-domain.beta.kubernetes.io/zone in [eu-central-1c]
failure-domain.beta.kubernetes.io/region in [eu-central-1]
Message:
Source:
Type: AWSElasticBlockStore (a Persistent Disk resource in AWS)
VolumeID: aws://eu-central-1c/vol-0b92b7db07b87b3e8
FSType: ext4
Partition: 0
ReadOnly: false
Events: <none>
➜ aws ec2 describe-volumes --volume-ids vol-0b92b7db07b87b3e8
An error occurred (InvalidVolume.NotFound) when calling the DescribeVolumes operation: The volume 'vol-0b92b7db07b87b3e8' does not exist.
➜ env | grep AWS
AWS_ACCESS_KEY_ID=xxx
AWS_SECRET_ACCESS_KEY=yyy
AWS_DEFAULT_REGION=eu-central-1
AWS_DEFAULT_OUTPUT=table
➜ kubectl version
'Tipz:' k version
Client Version: version.Info{Major:"1",Minor:"17",GitVersion:"v1.17.3",GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213",GitTreeState:"clean",BuildDate:"2020-02-11T18:14:22Z",GoVersion:"go1.13.6",Compiler:"gc",Platform:"linux/amd64"}
Server Version: version.Info{Major:"1",Minor:"17+",GitVersion:"v1.17.9-eks-4c6976",GitCommit:"4c6976793196d70bc5cd29d56ce5440c9473648e",BuildDate:"2020-07-17T18:46:04Z",GoVersion:"go1.13.9",Platform:"linux/amd64"}
解决方法
您应该使用Amazon EBS CSI driver而不是树内Amazon EBS storage provisioner。通过创建存储类来使用动态配置
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
,
由K8s永久卷引用卷时,完全有可能从AWS控制台删除卷!但是,仅当没有Pod安装它们时。
如果Pod正在安装有问题的PV的PVC,则不可能从AWS控制台删除,因为正在使用(附加)存储。
因此,换句话说,已删除存储中仅存在PVC和PV并不会导致K8失败这些资源。