缺少AWS卷但在kubernetes中“绑定”了PVC

问题描述

请参见下面的输出。令我感到困惑的是,状态已绑定,但该卷在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失败这些资源。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...