스토리지 문제 해결

이 문서에서는 스토리지 문제를 해결하는 방법을 설명합니다.

볼륨이 연결되지 않음

이 문제는 가상 디스크가 잘못된 가상 머신에 연결되면 발생할 수 있으며 원인은 Kubernetes 1.12의 문제 #32727일 수 있습니다.

gkectl diagnose cluster 출력은 다음과 같습니다.

Checking cluster object...PASS
Checking machine objects...PASS
Checking control plane pods...PASS
Checking gke-connect pods...PASS
Checking kube-system pods...PASS
Checking gke-system pods...PASS
Checking storage...FAIL
    PersistentVolume pvc-776459c3-d350-11e9-9db8-e297f465bc84: virtual disk "[datastore_nfs] kubevols/kubernetes-dynamic-pvc-776459c3-d350-11e9-9db8-e297f465bc84.vmdk" IS attached to machine "gsl-test-user-9b46dbf9b-9wdj7" but IS NOT listed in the Node.Status
1 storage errors

하나 이상의 Pod가 ContainerCreating 상태로 멈춰 있고 다음과 같은 경고가 표시됩니다.

Events:
  Type     Reason              Age               From                     Message
  ----     ------              ----              ----                     -------
  Warning  FailedAttachVolume  6s (x6 over 31s)  attachdetach-controller  AttachVolume.Attach failed for volume "pvc-776459c3-d350-11e9-9db8-e297f465bc84" : Failed to add disk 'scsi0:6'.

이 문제를 해결하려면 다음 단계를 따르세요.

가상 디스크가 잘못된 가상 머신에 연결되어 있으면 이를 수동으로 분리해야 할 수 있습니다.

  1. 노드를 드레이닝합니다. 안전한 노드 드레이닝을 참조하세요. kubectl drain 명령어에 --ignore-daemonsets--delete-local-data 플래그를 포함할 수 있습니다.

  2. VM을 끕니다.

  3. vCenter에서 VM 하드웨어 구성을 수정하여 볼륨을 삭제합니다.

  4. VM을 켭니다.

  5. 노드를 차단 해제합니다.

볼륨이 사라짐

이 문제는 가상 디스크가 영구 삭제되면 발생할 수 있습니다. 이 문제는 작업자가 가상 디스크 또는 가상 디스크가 연결된 가상 머신을 수동으로 삭제하면 발생할 수 있습니다. VMDK 파일과 관련하여 '찾을 수 없음' 오류가 표시되는 경우 이는 가상 디스크가 영구 삭제되었기 때문일 수 있습니다.

gkectl diagnose cluster 출력은 다음과 같습니다.

Checking cluster object...PASS
Checking machine objects...PASS
Checking control plane pods...PASS
Checking gke-connect pods...PASS
Checking kube-system pods...PASS
Checking gke-system pods...PASS
Checking storage...FAIL
    PersistentVolume pvc-52161704-d350-11e9-9db8-e297f465bc84: virtual disk "[datastore_nfs] kubevols/kubernetes-dynamic-pvc-52161704-d350-11e9-9db8-e297f465bc84.vmdk" IS NOT found
1 storage errors

하나 이상의 Pod가 ContainerCreating 상태로 멈춰 있습니다.

Events:
  Type     Reason              Age                   From                                    Message
  ----     ------              ----                  ----                                    -------
  Warning  FailedAttachVolume  71s (x28 over 42m)    attachdetach-controller                 AttachVolume.Attach failed for volume "pvc-52161704-d350-11e9-9db8-e297f465bc84" : File []/vmfs/volumes/43416d29-03095e58/kubevols/
  kubernetes-dynamic-pvc-52161704-d350-11e9-9db8-e297f465bc84.vmdk was not found

이 문제가 발생하지 않도록 하려면 사용자 클러스터 크기 조절클러스터 업그레이드의 설명대로 가상 머신을 관리합니다.

이 문제가 해결되도록 다음과 같은 관련 Kubernetes 리소스를 수동으로 삭제해야 할 수 있습니다.

  1. kubectl delete pvc [PVC_NAME]을 실행하여 PV를 참조한 PVC를 삭제합니다.

  2. kubectl delete pod [POD_NAME]을 실행하여 PVC를 참조한 Pod를 삭제합니다.

  3. 2단계를 반복합니다. 자세한 내용은 Kubernetes 문제 74374를 참조하세요.

vSphere CSI 볼륨이 분리되지 않음

이 문제는 vSphere 사용자에게 CNS > Searchable 권한이 부여되지 않으면 발생합니다.

FailedAttachVolume 경고와 함께 Pod가 ContainerCreating 단계에 멈춰 있는 경우 이는 다른 노드에서의 분리 실패가 원인일 수 있습니다.

CSI 분리 오류를 확인하려면 다음을 실행합니다.

kubectl get volumeattachments -o=custom-columns=NAME:metadata.name,DETACH_ERROR:status.detachError.message

출력은 다음과 비슷합니다.

NAME                                                                   DETACH_ERROR
csi-0e80d9be14dc09a49e1997cc17fc69dd8ce58254bd48d0d8e26a554d930a91e5   rpc error: code = Internal desc = QueryVolume failed for volumeID: "57549b5d-0ad3-48a9-aeca-42e64a773469". ServerFaultCode: NoPermission
csi-164d56e3286e954befdf0f5a82d59031dbfd50709c927a0e6ccf21d1fa60192d   
csi-8d9c3d0439f413fa9e176c63f5cc92bd67a33a1b76919d42c20347d52c57435c   
csi-e40d65005bc64c45735e91d7f7e54b2481a2bd41f5df7cc219a2c03608e8e7a8   

이 문제를 해결하려면 vcenter 사용자 계정CNS > Searchable 권한을 추가합니다. 분리 작업은 성공할 때까지 자동으로 재시도됩니다.

ESXi 호스트에서 vSphere CSI 드라이버가 지원되지 않음

이 문제는 vSphere 클러스터의 ESXi 호스트가 ESXi 6.7U3보다 낮은 버전을 실행할 때 발생합니다.

gkectl check-config의 출력에 다음 경고가 포함됩니다.

The vSphere CSI driver is not supported on current ESXi host versions.
CSI requires ESXi 6.7U3 or above. See logs for ESXi version details.

이 문제를 해결하려면 ESXi 호스트를 6.7U3 이상 버전으로 업그레이드하세요.

CSI 볼륨 만들기가 NotSupported 오류로 인해 실패함

이 문제는 vSphere 클러스터의 ESXi 호스트가 ESXi 6.7U3보다 낮은 버전을 실행할 때 발생합니다.

kubectl describe pvc의 출력에 다음 오류가 포함됩니다.

Failed to provision volume with StorageClass : rpc error:
code = Internal desc = Failed to create volume. Error: CnsFault error:
CNS: Failed to create disk.:Fault cause: vmodl.fault.NotSupported

이 문제를 해결하려면 ESXi 호스트를 6.7U3 이상 버전으로 업그레이드하세요.

vSphere CSI 볼륨 연결 실패

오픈소스 vSphere CSI 드라이버에서 이 알려진 문제는 노드가 종료되거나, 삭제되거나, 실패할 때 발생합니다.

kubectl describe pod 출력은 다음과 같습니다.

Events:
 Type    Reason                 From                     Message
 ----    ------             ... ----                     -------
 Warning FailedAttachVolume ... attachdetach-controller  Multi-Attach error for volume
                                                         "pvc-xxxxx"
                                                         Volume is already exclusively attached to one
                                                         node and can't be attached to another

이 문제를 해결하려면 다음 단계를 따르세요.

  1. 앞의 출력에서 PersistentVolumeClaim(PVC) 이름을 확인하고 PVC와 연결된 VolumeAttachments를 찾습니다. 예를 들면 다음과 같습니다.

    kubectl get volumeattachments | grep pvc-xxxxx
    

    출력에 VolumeAttachments의 이름이 표시됩니다. 예를 들면 다음과 같습니다.

    csi-yyyyy   csi.vsphere.vmware.com   pvc-xxxxx   node-zzzzz ...
    
  2. VolumeAttachment를 설명합니다. 예를 들면 다음과 같습니다.

    kubectl describe volumeattachments csi-yyyyy | grep "Deletion Timestamp"
    

    출력에서 삭제 타임스탬프를 기록해 둡니다.

    Deletion Timestamp:   2021-03-10T22:14:58Z
    
  3. 삭제 타임스탬프로 지정된 시간까지 기다린 후 VolumeAttachment를 강제로 삭제합니다. 이렇게 하려면 VolumeAttachment 객체를 수정하고 파이널라이저를 삭제합니다. 예를 들면 다음과 같습니다.

    kubectl edit volumeattachment csi-yyyyy
     Finalizers:
      external-attacher/csi-vsphere-vmware-com