Migrate for Anthos 1.7.5 を使用して問題が発生した場合に役立つトラブルシューティング手順の概要について説明します。
コンテナでのシェルコマンドの実行
kubectl exec
コマンドを使用して、bash
シェルまたは PowerShell からコンテナにアクセスします。
kubectl describe pods
を使用して、接続するクラスタ内の Pod の名前を確認します。次の例では、コマンドで suitecrm-0 ポッドが表示されます。
kubectl describe pods | grep Name Name: suitecrm-0
- 次のいずれかの方法でシェルコマンドを実行します。
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 リソースのデバッグ
詳しくは、次のページをご覧ください。
Google Kubernetes Engine で問題が発生した場合は、GKE のトラブルシューティング ページをご覧ください。
クラスタに関する問題が発生している場合は、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 は、スナップショットを作成せずにディスクのクローンを作成できます。これは効率的なプロセスで、スナップショットの上限も回避できます。
詳しくは、以下を参照してください。
クラスタの作成の詳細については、Google Cloud で Windows ワークロード用 処理クラスタを構成するをご覧ください。
上限の詳細については、こまめなスナップショットを効率的に作成するをご覧ください。
/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
環境変数を設定するには:
移行処理クラスタで、移行名前空間
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
configmap をクラスタに適用します。
kubectl apply -f jobs-config.yaml
次のコマンドを使用して、構成マップを表示します。
kubectl describe configmaps -n v2k-system
移行計画を編集して configmap を追加します。移行計画は、移行を作成したときに生成した yaml ファイルです。移行計画の編集の詳細については、移行計画のカスタマイズをご覧ください。
移行計画の
configs
セクションを編集して configmap を追加します。configs: jobsConfig: name: jobs-config
編集内容を保存してから、移行の実行の説明に従って移行を行います。
AppArmor によりデプロイ済みのコンテナの機能でエラーが発生する
AppArmor を使用すると、システム管理者はカスタム プロファイルを使用して、デプロイ済みのコンテナの機能を制限できます。機能をカスタマイズするために、デプロイ済みのコンテナへのプロファイルの適用が必要になる場合があります。
AppArmor プロファイルをカスタマイズするには:
移行するコンテナをデプロイするクラスタにプロファイルを作成します。詳細については、AppArmor のドキュメントをご覧ください。
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 からアクセスできます。
- Cloud Shell を開く
-
次に、
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