12.4. 一般的な問題および懸念事項
このセクションでは、移行時の問題を引き起こす可能性のある懸念事項および一般的な問題を説明します。
12.4.1. ボリュームの直接移行が完了しない リンクのコピーリンクがクリップボードにコピーされました!
ボリュームの直接移行が完了しない場合、ターゲットクラスターにソースクラスターと同じ node-selector アノテーションが含まれていない場合があります。
Migration Toolkit for Containers (MTC) は、Security Context Constraints およびスケジューリング要件を保持するためにすべてのアノテーションで namespace を移行します。ボリュームの直接移行の際に、MTC はソースクラスターから移行された namespace のターゲットクラスターで Rsync 転送 Pod を作成します。ターゲットクラスター namespace にソースクラスター namespace と同じアノテーションがない場合、Rsync 転送 Pod はスケジュールできません。Rsync Pod は Pending 状態のままになります。
以下の手順に従って、この問題を特定し、修正できます。
手順
MigMigrationCR のステータスを確認します。oc describe migmigration <pod> -n openshift-migration
$ oc describe migmigration <pod> -n openshift-migrationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力には、以下のようなステータス情報が含まれます。
出力例
Some or all transfer pods are not running for more than 10 mins on destination cluster
Some or all transfer pods are not running for more than 10 mins on destination clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow ソースクラスターで、移行した namespace の詳細を取得します。
oc get namespace <namespace> -o yaml
$ oc get namespace <namespace> -o yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 移行した namespace を指定します。
ターゲットクラスターで、移行した namespace を編集します。
oc edit namespace <namespace>
$ oc edit namespace <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例のように、欠落している
openshift.io/node-selectorアノテーションを移行した namespace に追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 移行計画を再度実行します。
12.4.2. エラーメッセージおよび解決 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、MTC (Migration Toolkit for Containers) で発生する可能性のある一般的なエラーメッセージと、それらの根本的な原因を解決する方法を説明します。
12.4.2.1. MTC コンソールへの初回アクセス時に CA 証明書エラーが表示されます。 リンクのコピーリンクがクリップボードにコピーされました!
MTC コンソールへの初回アクセスを試みる際に CA certificate error が表示される場合、クラスターのいずれかでの自己署名 CA 証明書の使用が原因である可能性があります。
この問題を解決するには、エラーメッセージに表示される oauth-authorization-server URL に移動し、証明書を受け入れます。この問題を永続的に解決するには、Web ブラウザーの信頼ストアに証明書を追加します。
証明書を受け入れた後に Unauthorized メッセージが表示される場合は、MTC コンソールに移動し、Web ページを更新します。
12.4.2.2. MTC コンソールの OAuth タイムアウトエラー リンクのコピーリンクがクリップボードにコピーされました!
自己署名証明書を受け入れた後に connection has timed out メッセージが MTC コンソールに表示される場合、以下の原因が考えられます。
- OAuth サーバーへのネットワークアクセスが中断された。
- OpenShift Container Platform コンソールへのネットワークアクセスが中断された。
-
oauth-authorization-serverURL へのアクセスをブロックするプロキシー設定。詳細は、MTC console inaccessible because of OAuth timeout error を参照してください。
タイムアウトの原因を特定できます。
- ブラウザーの Web インスペクターで MTC コンソールの Web ページを検査します。
-
Migration UIPod ログでエラーの有無を確認します。
12.4.2.3. 不明な認証局によって署名された証明書に関するエラー リンクのコピーリンクがクリップボードにコピーされました!
自己署名証明書を使用して MTC のクラスターまたはレプリケーションリポジトリーを保護する場合、証明書の検証が失敗し、Certificate signed by unknown authority というエラーメッセージが表示されることがあります。
カスタム CA 証明書バンドルファイルを作成し、クラスターまたはレプリケーションリポジトリーの追加時に MTC の Web コンソールでこれをアップロードできます。
手順
リモートエンドポイントから CA 証明書をダウンロードし、これを CA バンドルファイルとして保存します。
echo -n | openssl s_client -connect <host_FQDN>:<port> \ | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <ca_bundle.cert>
$ echo -n | openssl s_client -connect <host_FQDN>:<port> \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <ca_bundle.cert>
12.4.2.4. Velero Pod ログのバックアップストレージの場所に関するエラー リンクのコピーリンクがクリップボードにコピーされました!
Velero Backup カスタムリソースに、存在しないバックアップストレージロケーション (BSL) が含まれる場合、Velero Pod ログには以下のエラーメッセージが表示される可能性があります。
oc logs <Velero_Pod> -n openshift-migration
$ oc logs <Velero_Pod> -n openshift-migration
出力例
level=error msg="Error checking repository for stale locks" error="error getting backup storage location: BackupStorageLocation.velero.io \"ts-dpa-1\" not found" error.file="/remote-source/src/github.com/vmware-tanzu/velero/pkg/restic/repository_manager.go:259"
level=error msg="Error checking repository for stale locks" error="error getting backup storage location: BackupStorageLocation.velero.io \"ts-dpa-1\" not found" error.file="/remote-source/src/github.com/vmware-tanzu/velero/pkg/restic/repository_manager.go:259"
これらのエラーメッセージは無視できます。BSL がなくても、移行は失敗しません。
12.4.2.5. Velero Pod ログの Pod ボリュームバックアップのタイムアウトエラー リンクのコピーリンクがクリップボードにコピーされました!
Restic のタイムアウトにより移行が失敗する場合、以下のエラーが Velero Pod ログに表示されます。
level=error msg="Error backing up item" backup=velero/monitoring error="timed out waiting for all PodVolumeBackups to complete" error.file="/go/src/github.com/heptio/velero/pkg/restic/backupper.go:165" error.function="github.com/heptio/velero/pkg/restic.(*backupper).BackupPodVolumes" group=v1
level=error msg="Error backing up item" backup=velero/monitoring error="timed out waiting for all PodVolumeBackups to complete" error.file="/go/src/github.com/heptio/velero/pkg/restic/backupper.go:165" error.function="github.com/heptio/velero/pkg/restic.(*backupper).BackupPodVolumes" group=v1
restic_timeout のデフォルト値は 1 時間です。大規模な移行では、このパラメーターの値を大きくすることができます。値を高くすると、エラーメッセージが返されるタイミングが遅れる可能性があることに注意してください。
手順
-
OpenShift Container Platform Web コンソールで、Operators
Installed Operators に移動します。 - Migration Toolkit for Containers Operator をクリックします。
- MigrationController タブで、migration-controller をクリックします。
YAML タブで、以下のパラメーター値を更新します。
spec: restic_timeout: 1h
spec: restic_timeout: 1h1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 有効な単位は
h(時間)、m(分)、およびs(秒) です (例:3h30m15s)。
- Save をクリックします。
12.4.2.6. MigMigration カスタムリソースの Restic 検証エラー リンクのコピーリンクがクリップボードにコピーされました!
ファイルシステムデータのコピー方法を使用して永続ボリュームを移行する際にデータ検証が失敗すると、以下のエラーが MigMigration CR に表示されます。
出力例
データ検証エラーによって移行プロセスが失敗することはありません。
Restore CR を確認して、データ検証エラーのソースを特定できます。
手順
- ターゲットクラスターにログインします。
RestoreCR を表示します。oc describe <registry-example-migration-rvwcm> -n openshift-migration
$ oc describe <registry-example-migration-rvwcm> -n openshift-migrationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力では、
PodVolumeRestoreエラーのある永続ボリュームを特定できます。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PodVolumeRestoreCR を表示します。oc describe <migration-example-rvwcm-98t49>
$ oc describe <migration-example-rvwcm-98t49>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力では、エラーをログに記録した
ResticPod を特定できます。出力例
completionTimestamp: 2020-05-01T20:49:12Z errors: 1 resticErrors: 1 ... resticPod: <restic-nr2v5>
completionTimestamp: 2020-05-01T20:49:12Z errors: 1 resticErrors: 1 ... resticPod: <restic-nr2v5>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ResticPod ログを表示し、エラーを見つけます。oc logs -f <restic-nr2v5>
$ oc logs -f <restic-nr2v5>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.4.2.7. root_squash を有効にして NFS ストレージから移行する場合の Restic パーミッションエラー リンクのコピーリンクがクリップボードにコピーされました!
NFS ストレージからデータを移行していて、root_squash が有効にされている場合、Restic は nfsnobody にマップされ、これには移行を実行するパーミッションがありません。Restic Pod ログには以下のエラーが表示されます。
出力例
backup=openshift-migration/<backup_id> controller=pod-volume-backup error="fork/exec /usr/bin/restic: permission denied" error.file="/go/src/github.com/vmware-tanzu/velero/pkg/controller/pod_volume_backup_controller.go:280" error.function="github.com/vmware-tanzu/velero/pkg/controller.(*podVolumeBackupController).processBackup" logSource="pkg/controller/pod_volume_backup_controller.go:280" name=<backup_id> namespace=openshift-migration
backup=openshift-migration/<backup_id> controller=pod-volume-backup error="fork/exec /usr/bin/restic: permission denied" error.file="/go/src/github.com/vmware-tanzu/velero/pkg/controller/pod_volume_backup_controller.go:280" error.function="github.com/vmware-tanzu/velero/pkg/controller.(*podVolumeBackupController).processBackup" logSource="pkg/controller/pod_volume_backup_controller.go:280" name=<backup_id> namespace=openshift-migration
Restic の補助グループを作成し、グループ ID を MigrationController CR マニフェストに追加して、この問題を解決することができます。
手順
- NFS ストレージで Restic の補助グループを作成します。
-
NFS ディレクトリーに
setgidビットを設定して、グループの所有権が継承されるようにします。 restic_supplemental_groupsパラメーターを、ソースおよびターゲットクラスターのMigrationControllerCR マニフェストに追加します。spec: restic_supplemental_groups: <group_id>
spec: restic_supplemental_groups: <group_id>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 補助グループ ID を指定します。
-
ResticPod が再起動し、変更が適用されるまで待機します。
12.4.3. OpenShift Container Platform で実行しているワークロードに、spc_t を使用して SELinux の再ラベル回避策を自動的に適用 リンクのコピーリンクがクリップボードにコピーされました!
Migration Toolkit for Containers (MTC) を使用して namespace とそれに関連付けられた大量のボリュームを移行しようとすると、rsync-server がフリーズし、問題のトラブルシューティングに必要な詳細情報が得られなくなる可能性があります。
12.4.3.1. SELinux の再ラベル回避策をスキップする必要があるかどうかを診断する リンクのコピーリンクがクリップボードにコピーされました!
Direct Volume Migration (DVM) の rsync-server が実行しているノードの kubelet ログで、Unable to attach or mount volumes for pod…timed out waiting for the condition というエラーを検索します。
kubelet ログの例
kubenswrapper[3879]: W0326 16:30:36.749224 3879 volume_linux.go:49] Setting volume ownership for /var/lib/kubelet/pods/8905d88e-6531-4d65-9c2a-eff11dc7eb29/volumes/kubernetes.io~csi/pvc-287d1988-3fd9-4517-a0c7-22539acd31e6/mount and fsGroup set. If the volume has a lot of files then setting volume ownership could be slow, see https://github.com/kubernetes/kubernetes/issues/69699 kubenswrapper[3879]: E0326 16:32:02.706363 3879 kubelet.go:1841] "Unable to attach or mount volumes for pod; skipping pod" err="unmounted volumes=[8db9d5b032dab17d4ea9495af12e085a], unattached volumes=[crane2-rsync-server-secret 8db9d5b032dab17d4ea9495af12e085a kube-api-access-dlbd2 crane2-stunnel-server-config crane2-stunnel-server-secret crane2-rsync-server-config]: timed out waiting for the condition" pod="caboodle-preprod/rsync-server" kubenswrapper[3879]: E0326 16:32:02.706496 3879 pod_workers.go:965] "Error syncing pod, skipping" err="unmounted volumes=[8db9d5b032dab17d4ea9495af12e085a], unattached volumes=[crane2-rsync-server-secret 8db9d5b032dab17d4ea9495af12e085a kube-api-access-dlbd2 crane2-stunnel-server-config crane2-stunnel-server-secret crane2-rsync-server-config]: timed out waiting for the condition" pod="caboodle-preprod/rsync-server" podUID=8905d88e-6531-4d65-9c2a-eff11dc7eb29
kubenswrapper[3879]: W0326 16:30:36.749224 3879 volume_linux.go:49] Setting volume ownership for /var/lib/kubelet/pods/8905d88e-6531-4d65-9c2a-eff11dc7eb29/volumes/kubernetes.io~csi/pvc-287d1988-3fd9-4517-a0c7-22539acd31e6/mount and fsGroup set. If the volume has a lot of files then setting volume ownership could be slow, see https://github.com/kubernetes/kubernetes/issues/69699
kubenswrapper[3879]: E0326 16:32:02.706363 3879 kubelet.go:1841] "Unable to attach or mount volumes for pod; skipping pod" err="unmounted volumes=[8db9d5b032dab17d4ea9495af12e085a], unattached volumes=[crane2-rsync-server-secret 8db9d5b032dab17d4ea9495af12e085a kube-api-access-dlbd2 crane2-stunnel-server-config crane2-stunnel-server-secret crane2-rsync-server-config]: timed out waiting for the condition" pod="caboodle-preprod/rsync-server"
kubenswrapper[3879]: E0326 16:32:02.706496 3879 pod_workers.go:965] "Error syncing pod, skipping" err="unmounted volumes=[8db9d5b032dab17d4ea9495af12e085a], unattached volumes=[crane2-rsync-server-secret 8db9d5b032dab17d4ea9495af12e085a kube-api-access-dlbd2 crane2-stunnel-server-config crane2-stunnel-server-secret crane2-rsync-server-config]: timed out waiting for the condition" pod="caboodle-preprod/rsync-server" podUID=8905d88e-6531-4d65-9c2a-eff11dc7eb29
12.4.3.2. SELinux の再ラベル回避策をスキップして解決する リンクのコピーリンクがクリップボードにコピーされました!
この問題を解決するには、MigrationController カスタムリソース (CR) を使用して、ソースと宛先の両方の MigClusters で migration_rsync_super_privileged パラメーターを true に設定します。
MigrationController CR の例
- 1
migration_rsync_super_privilegedパラメーターの値は、Rsync Pod を スーパー特権 コンテナー (spc_t selinux context) として実行するかどうかを示します。有効な設定はtrueまたはfalseです。