トラブルシューティング

Migrate for Anthos 1.7.5 を使用して問題が発生した場合に役立つトラブルシューティング手順の概要について説明します。

コンテナでのシェルコマンドの実行

kubectl exec コマンドを使用して、bash シェルまたは PowerShell からコンテナにアクセスします。

  1. kubectl describe pods を使用して、接続するクラスタ内の Pod の名前を確認します。

    次の例では、コマンドで suitecrm-0 ポッドが表示されます。

    kubectl describe pods | grep Name
    
    Name:               suitecrm-0
  2. 次のいずれかの方法でシェルコマンドを実行します。
    • kubectl exec を使用して、コマンドを実行できる bash コマンドシェルを開きます。
      kubectl exec -it pod-name -- /bin/bash

      以下の例では、シェルを suitecrm-0 ポッドに移動します。

      kubectl exec -it suitecrm-0 -- /bin/bash
    • kubectl exec を使用して、コマンドを直接実行します。
      kubectl exec -it pod-name -- /bin/bash -c "command(s)"

      次の例は、suitecrm-0 ポッドのルート ディレクトリを示しています。

      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 分に 1 回または 1 時間に 6 回しか作成できません。このエラーは、この上限を超えていることを示します。

この上限を超えないようにするため、Compute Engine VM と同じゾーンに移行クラスタを作成することをおすすめします。クラスタが VM と同じゾーンにある場合、Migrate for Anthos は、スナップショットを作成せずにディスクのクローンを作成できます。これは効率的なプロセスで、スナップショットの上限も回避できます。

詳しくは、以下を参照してください。

/etc/fstab にあるデバイスのマウントに失敗する

デフォルトでは、システムは /etc/fstab を解析し、リストにあるすべてのデバイスを必要なマウント ポイントにマウントします。デバイスが認識されないか、マウントされないと、ワークロード Pod は準備完了状態になりません。

たとえば、Amazon EC2 の移行元 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. 次のコマンドを使用して、構成マップを表示します。

    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 にお問い合わせください

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