11.4. 一般的な問題および懸念事項
このセクションでは、移行時の問題を引き起こす可能性のある懸念事項および一般的な問題を説明します。
11.4.1. ボリュームの直接移行が完了しない
ボリュームの直接移行が完了しない場合、ターゲットクラスターにソースクラスターと同じ node-selector
アノテーションが含まれていない場合があります。
Migration Toolkit for Containers (MTC) は、SCC (Security Context Constraints) およびスケジューリング要件を保持するためにすべてのアノテーションで namespace を移行します。ボリュームの直接移行の際に、MTC はソースクラスターから移行された namespace のターゲットクラスターで Rsync 転送 Pod を作成します。ターゲットクラスター namespace にソースクラスター namespace と同じアノテーションがない場合、Rsync 転送 Pod はスケジュールできません。Rsync Pod は Pending
状態のままになります。
以下の手順に従って、この問題を特定し、修正できます。
手順
MigMigration
CR のステータスを確認します。$ oc describe migmigration <pod> -n openshift-migration
出力には、以下のようなステータス情報が含まれます。
出力例
Some or all transfer pods are not running for more than 10 mins on destination cluster
ソースクラスターで、移行した namespace の詳細を取得します。
$ oc get namespace <namespace> -o yaml 1
- 1
- 移行した namespace を指定します。
ターゲットクラスターで、移行した namespace を編集します。
$ oc edit namespace <namespace>
以下の例のように、欠落している
openshift.io/node-selector
アノテーションを移行した namespace に追加します。apiVersion: v1 kind: Namespace metadata: annotations: openshift.io/node-selector: "region=east" ...
- 移行計画を再度実行します。
11.4.2. エラーメッセージおよび解決
このセクションでは、MTC (Migration Toolkit for Containers) で発生する可能性のある一般的なエラーメッセージと、それらの根本的な原因を解決する方法を説明します。
11.4.2.1. MTC コンソールへの初回アクセス時に CA 証明書エラーが表示されます。
MTC コンソールへの初回アクセスを試みる際に CA certificate error
が表示される場合、クラスターのいずれかでの自己署名 CA 証明書の使用が原因である可能性があります。
この問題を解決するには、エラーメッセージに表示される oauth-authorization-server
URL に移動し、証明書を受け入れます。この問題を永続的に解決するには、Web ブラウザーの信頼ストアに証明書を追加します。
証明書を受け入れた後に Unauthorized
メッセージが表示される場合は、MTC コンソールに移動し、Web ページを更新します。
11.4.2.2. MTC コンソールの OAuth タイムアウトエラー
自己署名証明書を受け入れた後に connection has timed out
メッセージが MTC コンソールに表示される場合、以下の原因が考えられます。
- OAuth サーバーへのネットワークアクセスが中断された。
- OpenShift Container Platform Web コンソールへのネットワークアクセスが中断された。
-
oauth-authorization-server
URL へのアクセスをブロックするプロキシー設定。詳細は、MTC console inaccessible because of OAuth timeout error を参照してください。
タイムアウトの原因を特定できます。
- ブラウザーの Web インスペクターで MTC コンソールの Web ページを検査します。
-
Migration UI
Pod ログでエラーの有無を確認します。
11.4.2.3. 不明な認証局エラーで署名された証明書
自己署名証明書を使用して Migration Toolkit for Containers (MTC) のクラスターまたはレプリケーションリポジトリーのセキュリティーを保護する場合、証明書の検証は Certificate signed by unknown authority
というエラーメッセージを出して失敗する可能性があります。
カスタム CA 証明書バンドルファイルを作成し、クラスターまたはレプリケーションリポジトリーの追加時に MTC の Web コンソールでこれをアップロードできます。
手順
リモートエンドポイントから CA 証明書をダウンロードし、これを CA バンドルファイルとして保存します。
$ echo -n | openssl s_client -connect <host_FQDN>:<port> \ 1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <ca_bundle.cert> 2
11.4.2.4. Velero Pod ログのバックアップストレージの場所に関するエラー
Velero
Backup
カスタムリソースに、存在しないバックアップストレージロケーション (BSL) が含まれる場合、Velero
Pod ログには以下のエラーメッセージが表示される可能性があります。
$ 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"
これらのエラーメッセージは無視できます。BSL がなくても、移行は失敗しません。
11.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
restic_timeout
のデフォルト値は 1 時間です。大規模な移行では、このパラメーターの値を大きくすることができます。値を高くすると、エラーメッセージが返されるタイミングが遅れる可能性があることに注意してください。
手順
-
OpenShift Container Platform Web コンソールで、Operators
Installed Operators に移動します。 - Migration Toolkit for Containers Operator をクリックします。
- MigrationController タブで、migration-controller をクリックします。
YAML タブで、以下のパラメーター値を更新します。
spec: restic_timeout: 1h 1
- 1
- 有効な単位は
h
(時間)、m
(分)、およびs
(秒) です (例:3h30m15s
)。
- Save をクリックします。
11.4.2.6. MigMigration カスタムリソースの Restic 検証エラー
ファイルシステムデータのコピー方法を使用して永続ボリュームを移行する際にデータ検証が失敗すると、以下のエラーが MigMigration
CR に表示されます。
出力例
status: conditions: - category: Warn durable: true lastTransitionTime: 2020-04-16T20:35:16Z message: There were verify errors found in 1 Restic volume restores. See restore `<registry-example-migration-rvwcm>` for details 1 status: "True" type: ResticVerifyErrors 2
データ検証エラーによって移行プロセスが失敗することはありません。
Restore
CR を確認して、データ検証エラーのソースを特定できます。
手順
- ターゲットクラスターにログインします。
Restore
CR を表示します。$ oc describe <registry-example-migration-rvwcm> -n openshift-migration
出力では、
PodVolumeRestore
エラーのある永続ボリュームを特定できます。出力例
status: phase: Completed podVolumeRestoreErrors: - kind: PodVolumeRestore name: <registry-example-migration-rvwcm-98t49> namespace: openshift-migration podVolumeRestoreResticErrors: - kind: PodVolumeRestore name: <registry-example-migration-rvwcm-98t49> namespace: openshift-migration
PodVolumeRestore
CR を表示します。$ oc describe <migration-example-rvwcm-98t49>
出力では、エラーをログに記録した
Restic
Pod を特定できます。出力例
completionTimestamp: 2020-05-01T20:49:12Z errors: 1 resticErrors: 1 ... resticPod: <restic-nr2v5>
Restic
Pod ログを表示し、エラーを見つけます。$ oc logs -f <restic-nr2v5>
11.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
Restic の補助グループを作成し、グループ ID を MigrationController
CR マニフェストに追加して、この問題を解決することができます。
手順
- NFS ストレージで Restic の補助グループを作成します。
-
NFS ディレクトリーに
setgid
ビットを設定して、グループの所有権が継承されるようにします。 restic_supplemental_groups
パラメーターを、ソースおよびターゲットクラスターのMigrationController
CR マニフェストに追加します。spec: restic_supplemental_groups: <group_id> 1
- 1
- 補助グループ ID を指定します。
-
Restic
Pod が再起動し、変更が適用されるまで待機します。
11.4.3. OpenShift Container Platform で実行しているワークロードに、spc_t
を使用して SELinux の再ラベル回避策を自動的に適用
Migration Toolkit for Containers (MTC) を使用して namespace とそれに関連付けられた大量のボリュームを移行しようとすると、rsync-server
がフリーズし、問題のトラブルシューティングに必要な詳細情報が得られなくなる可能性があります。
11.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
11.4.3.2. SELinux の再ラベル回避策をスキップして解決する
この問題を解決するには、MigrationController
カスタムリソース (CR) を使用して、ソースと宛先の両方の MigClusters
で migration_rsync_super_privileged
パラメーターを true
に設定します。
MigrationController CR の例
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: migration-controller
namespace: openshift-migration
spec:
migration_rsync_super_privileged: true 1
azure_resource_group: ""
cluster_name: host
mig_namespace_limit: "10"
mig_pod_limit: "100"
mig_pv_limit: "100"
migration_controller: true
migration_log_reader: true
migration_ui: true
migration_velero: true
olm_managed: true
restic_timeout: 1h
version: 1.8.3
- 1
migration_rsync_super_privileged
パラメーターの値は、Rsync Pod を スーパー特権 コンテナー (spc_t selinux context
) として実行するかどうかを示します。有効な設定はtrue
またはfalse
です。