문제 해결하기

Migrate for Anthos 1.7 사용 시 문제가 발생할 경우 도움이 될 수 있는 문제 해결 단계에 대해 알아보세요.

컨테이너에서 셸 명령어 실행

bash 셸을 사용하거나 PowerShell의 kubectl exec 명령어를 사용하여 컨테이너에 액세스할 수 있습니다.

  1. kubectl describe pods를 사용하여 연결하려는 클러스터에서 Pod의 이름을 찾습니다.

    다음 예시에서 명령어는 suitecrm-0 Pod를 나열합니다.

    kubectl describe pods | grep Name
    
    Name:               suitecrm-0
  2. 다음 메서드 중 하나를 사용하여 셸 명령어를 실행합니다.
    • kubectl exec를 사용하여 명령어를 실행할 수 있는 bash 명령어 셸을 엽니다.
      kubectl exec -it pod-name -- /bin/bash

      다음 예시에서는 suitecrm-0 Pod에 대한 셸을 가져옵니다.

      kubectl exec -it suitecrm-0 -- /bin/bash
    • kubectl exec를 사용하여 명령어를 직접 실행할 수 있습니다.
      kubectl exec -it pod-name -- /bin/bash -c "command(s)"

      다음 예시에서는 suitecrm-0 Pod의 루트 디렉터리를 나열합니다.

      kubectl exec -it suitecrm-0 -- /bin/bash -c "ls /"

자세한 내용은 Kubernetes 문서를 참조하세요.

Kubernetes 리소스 디버깅

다음 페이지에서 추가 도움말을 볼 수 있습니다.

RESOURCE_OPERATION_RATE_EXCEEDED 오류가 마이그레이션 상태 또는 로그에 표시됨

RESOURCE_OPERATION_RATE_EXCEEDED 오류는 마이그레이션의 소스 플랫폼이 Compute Engine이고 Compute Engine VM을 마이그레이션할 때 디스크 스냅샷 한도를 초과하면 발생합니다.

마이그레이션 과정에서 Migrate for Anthos는 소스 플랫폼에서 실행되는 VM에서 디스크 이미지 스냅샷을 만듭니다. Compute Engine VM에 대해 최대 10분 간격 또는 시간 당 6번만 디스크 스냅샷을 만들 수 있습니다 . 이 오류는 해당 한도를 초과했음을 의미합니다.

이 한도에 도달하지 않으려면 Compute Engine VM과 동일한 영역에 마이그레이션 클러스터를 만드는 것이 좋습니다. 클러스터가 VM과 동일한 영역에 있는 경우 Migrate for Anthos는 스냅샷을 만드는 대신 디스크를 클론할 수 있습니다. 이는 더 효율적인 프로세스로, 스냅샷 한도를 우회합니다.

다음을 참고하세요.

/etc/fstab에 나열된 기기가 마운트되지 않음

기본적으로 시스템은 /etc/fstab을 파싱하고 나열된 모든 기기를 필수 마운트 지점에 마운트합니다. 기기가 인식되지 않거나 마운트되지 않으면 워크로드 pod가 준비 상태가 되지 않습니다.

예를 들어 지속성이 보장되지 않는 이페머럴 디스크가 있는 Amazon EC2의 소스 Linux VM을 살펴보겠습니다. 이러한 디스크는 대상에 스트리밍되지 않으므로 컨테이너를 마운트할 때 실패합니다.

이 경우 다음과 같은 메시지가 표시될 수 있습니다.

Unable to locate resolve [X] fstab entries: …
Error: Failed mount -o defaults /dev/mapper/mpathe-part /rootfs/mnt/ephemeral

이 문제는 다음 방법 중 하나로 해결할 수 있습니다.

  • Linux VM에서 /etc/fstab을 수정하여 기기 마운트 명령어를 삭제합니다.
  • 마운트 실패를 건너뛰고 계속 진행하도록 시스템을 구성하기 위해 HC_INIT_SKIP_MOUNT_FAILURES 환경 변수를 설정합니다.

HC_INIT_SKIP_MOUNT_FAILURES 환경 변수를 설정하는 방법은 다음과 같습니다.

  1. 마이그레이션 처리 클러스터의 마이그레이션 네임스페이스 v2k-system에서 configmap을 만듭니다. 예를 들어 jobs-config.yaml이라는 파일에 configmap을 정의합니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: jobs-config
      namespace: v2k-system
    data:
      environment: |
        HC_INIT_SKIP_MOUNT_FAILURES = true
    
  2. configmap을 클러스터에 적용합니다.

    kubectl apply -f jobs-config.yaml
  3. configmap을 보려면 다음 명령어를 사용합니다.

    kubectl describe configmaps -n v2k-system
  4. 마이그레이션 계획을 수정하여 configmap을 추가합니다. 마이그레이션 계획은 마이그레이션을 만들 때 생성한 yaml 파일입니다. 마이그레이션 계획 수정에 대한 자세한 내용은 마이그레이션 계획 맞춤설정을 참조하세요.

    마이그레이션 계획에서 configs 섹션을 수정하여 configmap을 추가합니다.

    configs:
      jobsConfig:
        name: jobs-config
    
  5. 수정사항을 저장한 다음 마이그레이션 실행에 설명된 대로 마이그레이션을 실행합니다.

AppArmor로 인해 배포된 컨테이너의 기능에 장애가 있음

AppArmor를 사용하면 시스템 관리자가 커스텀 프로필을 사용하여 배포된 컨테이너의 기능을 제한할 수 있습니다. 일부 경우에는 기능을 맞춤설정하기 위해 배포된 컨테이너에 프로필을 적용해야 할 수 있습니다.

AppArmor 프로필을 맞춤설정하려면 다음 안내를 따르세요.

  1. 마이그레이션된 컨테이너를 배포할 클러스터에서 프로필을 만듭니다. 자세한 내용은 AppArmor를 참조하세요.

  2. deployment_spec.yaml 파일을 수정하여 AppArmor 프로필 이름으로 HC_APPARMOR_PROFILE 환경 변수를 추가합니다.

    spec:
      containers:
      - image: gcr.io/my-project/my-container:v1.0.0
        name: my-container
        env:
        - name: HC_APPARMOR_PROFILE
          value: "apparmor-profile-name"
        securityContext:
          privileged: true
    ...
    

    deployment_spec.yaml 수정에 대한 자세한 내용은 생성된 배포 파일 검토를 참조하세요.

FailedAttachVolume 오류가 마이그레이션 상태 또는 로그에 표시됨 (미리보기)

마이그레이션을 수행하기 위해 AWS의 Anthos 클러스터를 사용하여 마이그레이션을 수행하는 경우 마이그레이션 상태 또는 로그에 다음 메시지와 함께 FailedAttachVolume 오류가 표시될 수 있습니다.

"The encrypted volume was unable to access the KMS master key"

이 오류는 AWS VM이 암호화된 디스크를 사용하고 액세스를 올바르게 구성하지 않았음을 의미합니다. 자세한 내용은 AWS 처리 클러스터를 사용하여 Linux VM을 마이그레이션하기 위한 기본 요건을 참조하세요.

ProvisioningFailed 오류가 마이그레이션 상태 또는 로그에 표시됨(미리보기)

마이그레이션을 수행하기 위해 AWS의 Anthos 클러스터를 사용하여 마이그레이션을 수행하는 경우 마이그레이션 상태 또는 로그에 다음 메시지와 함께 ProvisioningFailed 오류가 표시될 수 있습니다.

"ProvisioningFailed - "Could not create volume V_ID"

이 오류는 데이터를 새 암호화된 볼륨으로 내보내려고 할 때 클러스터에 암호화 키에 대한 액세스 권한이 없어서 EBS 디스크를 만들지 못하는 경우에 발생할 수 있습니다. 자세한 내용은 AWS 처리 클러스터를 사용하여 Linux VM을 마이그레이션하기 위한 기본 요건을 참조하세요.

개인 맞춤 지원을 원하는 경우

Migrate for Anthos를 사용하여 마이그레이션하는 고객은 유료 지원을 받을 수 있습니다. 지원이 필요하면 문의하세요.

Google Cloud 지원팀에 정보 제공

Sysreport는 빠른 문제 해결을 위해 Migrate for Anthos 지원팀에 클러스터 구성에 대한 정보를 제공합니다.

Cloud Shell에서 스크립트에 액세스할 수 있습니다.

  1. Cloud Shell 열기
  2. 그런 다음 collect_sysreport.sh 스크립트를 실행합니다.
    /google/migrate/anthos/collect_sysreport.sh [-n NAMESPACE] [-o OUTPUT_DIRECTORY] [-m MIGRATION]

각 항목의 의미는 다음과 같습니다.

  • [NAMESPACE]: (선택사항) Migrate for Anthos가 배포된 네임스페이스입니다(기본값: v2k-system).
  • [OUTPUT_DIRECTORY]: (선택사항) Sysreport를 저장할 디렉터리의 경로입니다(기본값: $HOME).
  • [MIGRATION]: (선택사항) 마이그레이션을 위해 수집된 추가 정보입니다.

이 스크립트는 Google Cloud 지원팀에 제공할 anthos-migrate-logs.TIMESTAMP.tar.xz를 만듭니다.

기본적으로 스크립트는 다음을 수집합니다.

  • Migrate for Anthos CSI 컨트롤러 및 CSI 노드의 로그
  • Migrate for Anthos CSI 노드 호스트의 Syslog
  • Migrate for Anthos 컨트롤러의 로그
  • 클러스터의 모든 Migrate for Anthos 항목
  • 마이그레이션을 지정하고 마이그레이션에서 기본 아티팩트 저장소를 사용하는 경우 Cloud Storage 또는 S3 버킷에서 마이그레이션 아티팩트를 수집합니다.
  • 다음의 출력:
    • kubectl cluster-info
    • kubectl get nodes; kubectl describe node
    • kubectl version
    • kubectl top node
  • 워크로드의 로그
  • 다음의 출력:
    • ps aux
    • netstat -tlnp
    • iptables -t nat -L
    • fstab
    • kubectl get pod
    • kubectl describe pod
    • kubectl top pod --all-namespaces --containers
    • kubectl cluster-info dump
    • kubectl api-resources -o wide
    • kubectl top pod --all-namespaces --containers
    • kubectl api-resources -o wide
    • kubectl get componentstatuses --all-namespaces
    • kubectl get endpoints --all-namespaces
    • kubectl get events --all-namespaces
    • kubectl describe limits --all-namespaces
    • kubectl get namespaces
    • kubectl describe pvc --all-namespaces
    • kubectl describe pv --all-namespaces
    • kubectl describe quota --all-namespaces
    • kubectl describe sa --all-namespaces
    • kubectl describe services --all-namespaces
    • kubectl describe services --all-namespaces
    • kubectl get ingresses --all-namespaces
    • kubectl describe networkpolicies --all-namespaces
    • kubectl get podsecuritypolicies --all-namespaces
    • kubectl get clusterrolebindings --all-namespaces
    • kubectl describe storageclasses --all-namespaces
    • kubectl describe volumeattachments --all-namespaces