문제 해결

이 페이지에는 몇 가지 일반적인 문제 및 오류의 문제 해결 단계가 포함되어 있습니다.

FAILED 인스턴스

FAILED 상태는 인스턴스 데이터가 손실되었으며 인스턴스를 삭제해야 함을 의미합니다.

FAILED 상태의 Parallelstore 인스턴스는 삭제될 때까지 계속 요금이 청구됩니다.

인스턴스의 상태를 가져오려면 인스턴스 관리: 인스턴스 검색의 안내를 따르세요.

인스턴스를 삭제하려면 인스턴스 관리: 인스턴스 삭제를 참고하세요.

dfuse 마운트 또는 네트워크 테스트 중 시간 초과

Parallelstore 인스턴스를 마운트할 때 dfuse -m 명령어의 시간 초과가 발생하거나 self_test 또는 daos health net-test와 같은 네트워크 테스트 명령어의 시간 초과가 발생하는 경우 네트워크 연결 문제일 수 있습니다.

Parallelstore 서버 연결을 확인하려면 다음을 실행합니다.

self_test --use-daos-agent-env -r 1

테스트에서 연결 문제가 보고되면 다음 두 가지 이유가 있을 수 있습니다.

DAOS 에이전트가 설정 중에 잘못된 네트워크 인터페이스를 선택했을 수 있습니다.

access_points 목록의 IP에 연결할 수 없는 네트워크 인터페이스는 제외해야 할 수 있습니다.

  1. ifconfig를 실행하여 사용 가능한 네트워크 인터페이스를 나열합니다. 출력 예시에는 eth0, docker0, ens8, lo와 같은 여러 네트워크 인터페이스가 표시될 수 있습니다.

  2. daos_agent를 중지합니다.

  3. /etc/daos/daos_agent.yml를 수정하여 원치 않는 네트워크 인터페이스를 제외합니다. exclude_fabric_ifaces 줄의 주석 처리를 삭제하고 값을 업데이트합니다. 포함하는 항목은 상황에 따라 다릅니다. 예를 들면 다음과 같습니다.

    exclude_fabric_ifaces: ["docker0", "ens8", "lo"]
    
  4. daos_agent를 다시 시작합니다.

인스턴스 또는 클라이언트 IP 주소가 내부 IP 주소와 충돌함

Parallelstore 인스턴스 및 클라이언트는 172.17.0.0/16 서브넷 범위의 IP 주소를 사용할 수 없습니다. 자세한 내용은 알려진 문제를 참고하세요.

인스턴스에 사용되지 않은 용량이 있는 경우 ENOSPC

인스턴스에서 최소 또는 균형 스트리핑 (기본값)을 사용하는 경우 기존 파일이 인스턴스의 모든 용량을 사용하지 않더라도 ENOSPC 오류가 발생할 수 있습니다. 이는 일반적으로 8GiB를 초과하는 대용량 파일을 쓸 때 또는 Cloud Storage에서 이러한 파일을 가져올 때 발생할 수 있습니다.

최대 파일 스트리핑을 사용하여 이러한 오류의 가능성을 줄입니다.

Google Kubernetes Engine 문제 해결

다음 섹션에서는 몇 가지 일반적인 문제와 해결 단계를 보여줍니다.

워크로드 Pod의 Transport endpoint is not connected

이 오류는 dfuse 종료로 인해 발생합니다. 대부분의 경우 메모리 부족으로 인해 dfuse가 종료되었습니다. 포드 주석 gke-parallelstore/[cpu-limit|memory-limit]를 사용하여 Parallelstore 사이드카 컨테이너에 더 많은 리소스를 할당합니다. 사이드카에 할당할 메모리 양을 모르는 경우 gke-parallelstore/memory-limit: "0"를 설정하여 사이드카 메모리 제한을 삭제할 수 있습니다. 이는 Standard 클러스터에서만 작동합니다. Autopilot 클러스터에서는 0 값을 사용하여 사이드카 컨테이너 리소스 한도 및 요청을 설정 해제할 수 없습니다. 사이드카 컨테이너에 더 큰 리소스 한도를 명시적으로 설정해야 합니다.

주석을 수정한 후에는 워크로드 포드를 다시 시작해야 합니다. 실행 중인 워크로드에 주석을 추가해도 리소스 할당은 동적으로 수정되지 않습니다.

포드 이벤트 경고

워크로드 포드를 시작할 수 없는 경우 포드 이벤트를 확인합니다.

kubectl describe pod POD_NAME -n NAMESPACE

다음은 일반적인 오류에 대한 해결 방법입니다.

CSI 드라이버 사용 설정 문제

일반적인 CSI 드라이버 사용 설정 오류는 다음과 같습니다.

MountVolume.MountDevice failed for volume "volume" : kubernetes.io/csi:
attacher.MountDevice failed to create newCsiDriverClient:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers
MountVolume.SetUp failed for volume "volume" : kubernetes.io/csi:
mounter.SetUpAt failed to get CSI client:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers

이러한 경고는 CSI 드라이버가 사용 설정되지 않았거나 실행되고 있지 않음을 나타냅니다.

클러스터를 확장, 업데이트 또는 업그레이드한 직후라면 이 경고는 정상이며 일시적입니다. 클러스터 작업 후 CSI 드라이버 포드가 작동하는 데 몇 분 정도 걸립니다.

그렇지 않으면 클러스터에서 CSI 드라이버가 사용 설정되어 있는지 확인합니다. 자세한 내용은 CSI 드라이버 사용 설정을 참고하세요. CSI가 사용 설정된 경우 각 노드에 parallelstore-csi-node-id라는 이름의 포드가 표시되고 실행 중입니다.

AttachVolume.Attach 실패

포드가 노드에 예약되면 볼륨이 노드에 연결되고 노드 마운트를 사용하는 경우 마운터 포드가 생성됩니다.

이는 컨트롤러에서 발생하며 attachdetach-controller의 AttachVolume 단계가 포함됩니다.

오류 코드 포드 이벤트 경고 솔루션
InvalidArgument
  • AttachVolume.Attach failed for volume "volume" : rpc error: code = InvalidArgument desc = an error occurred while preparing mount options: invalid mount options
잘못된 마운트 플래그가 PersistentVolume 또는 StorageClass에 전달됩니다. 자세한 내용은 지원되는 dfuse 마운트 옵션을 확인하세요.
NotFound
  • AttachVolume.Attach failed for volume "volume" : rpc error: code = NotFound desc = failed to get instance "instance"
Parallelstore 인스턴스가 존재하지 않습니다. PersistentVolume의 volumeHandle이 올바른 형식인지 확인합니다.

MountVolume.MountDevice 실패

볼륨이 노드에 연결되면 볼륨이 노드에 스테이징됩니다.

이는 노드에서 발생하며 kubelet의 MountVolume.MountDevice 단계가 포함됩니다.

오류 코드 포드 이벤트 경고 솔루션
FailedPrecondition
  • MountVolume.MountDevice failed for volume "volume" : rpc error: code = FailedPrecondition desc = mounter pod "pod" expected to exist but was not found
이 오류는 일반적으로 마운터 팟이 수동으로 삭제되어 발생합니다. PVC를 사용하는 모든 워크로드를 삭제하고 다시 배포합니다. 이렇게 하면 새 마운터 포드가 생성됩니다.
DeadlineExceeded
  • MountVolume.MountDevice failed for volume "volume": rpc error: code = DeadlineExceeded desc = context deadline exceeded
Parallelstore 인스턴스에 연결하는 중에 문제가 발생했습니다. VPC 네트워크액세스 포인트가 올바르게 구성되었는지 확인합니다.

MountVolume.SetUp 실패

볼륨이 노드에 스테이징되면 볼륨이 마운트되어 포드의 컨테이너에 제공됩니다. 이는 노드에서 발생하며 kubelet의 MountVolume.SetUp 단계가 포함됩니다.

광고 모음 마운트

오류 코드 포드 이벤트 경고 솔루션
ResourceExhausted
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = ResourceExhausted desc = the sidecar container failed with error: signal: killed
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = ResourceExhausted desc = the sidecar container terminated due to OOMKilled, exit code: 137
dfuse 프로세스가 종료되었습니다. 이는 일반적으로 메모리 부족 (OOM) 조건으로 인해 발생합니다. gke-parallelstore/memory-limit 주석을 사용하여 사이드카 컨테이너 메모리 한도를 늘리는 것이 좋습니다.

parallelstore-sidecar에 할당할 메모리 양을 잘 모르겠다면 Parallelstore에서 적용하는 메모리 제한을 없애기 위해 gke-parallelstore/memory-limit: "0"를 설정하는 것이 좋습니다.

취소됨
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = NodePublishVolume request is aborted due to rate limit
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = An operation with the given volume key key already exists
속도 제한 또는 기존 작업으로 인해 볼륨 마운트 작업이 중단되었습니다. 이 경고는 정상이며 일시적으로 표시됩니다.
InvalidArgument MountVolume.SetUp failed for volume "volume" : rpc error: code = InvalidArgument desc = StorageClass 또는 PersistentVolume에 잘못된 인수를 제공한 경우 오류 로그에 잘못된 인수가 있는 필드가 표시됩니다. 동적 프로비저닝의 경우 스토리지 클래스를 선택합니다. 정적 프로비저닝의 경우 영구 볼륨을 선택합니다.
FailedPrecondition MountVolume.SetUp failed for volume "volume" : rpc error: code = FailedPrecondition desc = can not find the sidecar container in Pod spec Parallelstore 사이드카 컨테이너가 삽입되지 않았습니다. gke-parallelstore/volumes: "true" 포드 주석이 올바르게 설정되어 있는지 확인합니다.

노드 마운트

오류 코드 포드 이벤트 경고 솔루션
취소됨
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = NodePublishVolume request is aborted due to rate limit
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = An operation with the given volume key key already exists
비율 제한 또는 기존 작업으로 인해 볼륨 마운트 작업이 중단되었습니다. 이 경고는 정상이며 일시적으로 표시됩니다.
InvalidArgument MountVolume.SetUp failed for volume "volume" : rpc error: code = InvalidArgument desc = StorageClass 또는 영구 볼륨에 잘못된 인수를 제공한 경우 오류 로그에 잘못된 인수가 있는 필드가 표시됩니다. 동적 프로비저닝의 경우 스토리지 클래스를 선택합니다. 정적 프로비저닝의 경우 영구 볼륨을 선택합니다.
FailedPrecondition MountVolume.SetUp failed for volume "volume" : rpc error: code = FailedPrecondition desc = mounter pod expected to exist but was not found Parallelstore 마운터 pod가 존재하지 않습니다. 마운터 Pod가 실수로 삭제된 경우 모든 워크로드를 다시 만들어 재생성을 유도합니다.
DeadlineExceeded MountVolume.SetUp failed for volume "volume" : rpc error: code = DeadlineExceeded desc = timeout waiting for mounter pod gRPC server to become available 마운터 Pod의 gRPC 서버가 시작되지 않았습니다. 마운터 포드의 로그에 오류가 있는지 확인합니다.

VPC 네트워크 문제 해결

서비스 servicenetworking.googleapis.com의 피어링을 추가할 권한이 거부되었습니다.

ERROR: (gcloud.services.vpc-peerings.connect) User [$(USER)] does not have 
permission to access services instance [servicenetworking.googleapis.com]
(or it may not exist): Permission denied to add peering for service
'servicenetworking.googleapis.com'.

이 오류는 사용자 계정에 servicenetworking.services.addPeering IAM 권한이 없음을 의미합니다.

계정에 다음 역할 중 하나를 추가하는 방법에 관한 안내는 IAM으로 액세스 제어를 참고하세요.

  • roles/compute.networkAdmin 또는
  • roles/servicenetworking.networksAdmin

CreateConnection에서 할당된 범위를 수정할 수 없음

ERROR: (gcloud.services.vpc-peerings.connect) The operation
"operations/[operation_id]" resulted in a failure "Cannot modify allocated
ranges in CreateConnection. Please use UpdateConnection.

이 네트워크에 이미 다른 IP 범위로 VPC 피어링을 만든 경우 이 오류가 반환됩니다. 다음과 같은 두 가지 문제 해결 방법이 있습니다.

기존 IP 범위를 대체합니다.

gcloud services vpc-peerings update \
  --network=NETWORK_NAME \
  --ranges=IP_RANGE_NAME \
  --service=servicenetworking.googleapis.com \
  --force

또는 기존 연결에 새 IP 범위를 추가합니다.

  1. 피어링의 기존 IP 범위 목록을 가져옵니다.

    EXISTING_RANGES=$(
      gcloud services vpc-peerings list \
        --network=NETWORK_NAME \
        --service=servicenetworking.googleapis.com \
        --format="value(reservedPeeringRanges.list())"
    )
    
  2. 그런 다음 피어링에 새 범위를 추가합니다.

    gcloud services vpc-peerings update \
      --network=NETWORK_NAME \
      --ranges=$EXISTING_RANGES,IP_RANGE_NAME \
      --service=servicenetworking.googleapis.com
    

IP 주소 범위 소진

문제: 범위 소진 오류로 인스턴스 생성이 실패함

ERROR: (gcloud.alpha.Parallelstore.instances.create) FAILED_PRECONDITION: Invalid
resource state for "NETWORK_RANGES_NOT_AVAILABLE": IP address range exhausted

해결 방법: VPC 가이드에 따라 IP 범위를 다시 만들거나 기존 IP 범위를 확장합니다.

Parallelstore 인스턴스를 다시 만드는 경우 IP 범위를 확장하는 대신 다시 만들어야 합니다.