第7章 既知の問題
このセクションでは、Red Hat OpenShift Data Foundation 4.13 の既知の問題について説明します。
7.1. 障害復旧
フェイルオーバーアクションは、RPC エラー still in use を表示し、Pod で失敗した RADOS ブロックデバイスのイメージマウントを報告する。
障害復旧 (DR) で保護されるワークロードをフェイルオーバーすると、フェイルオーバーしたクラスター上のボリュームを使用している Pod が、RADOS ブロックデバイス (RBD) イメージがまだ使用中であることを報告する時に停止する可能性があります。これにより、Pod が長時間 (最大数時間) 起動できなくなります。
フェイルオーバーアクションは、RPC エラー fsck を表示し、Pod で失敗した RADOS ブロックデバイスのイメージマウントを報告する。
障害復旧 (DR) で保護されるワークロードをフェイルオーバーすると、ボリュームにファイルシステムの整合性チェック (fsck) エラーがあると示すボリュームマウントエラーにより、Pod が起動しない可能性があります。これにより、ワークロードはフェイルオーバークラスターにフェイルオーバーできなくなります。
マネージドクラスターのアプリケーション namespace が作成される
アプリケーション namespace は、Disaster Recovery(DR) 関連の事前デプロイアクションのために RHACM マネージドクラスターに存在する必要があるため、アプリケーションが ACM ハブクラスターにデプロイされるときに事前に作成されます。ただし、アプリケーションがハブクラスターで削除され、対応する namespace がマネージドクラスターで削除された場合、それらはマネージドクラスターに再表示されます。
回避策:
openshift-dr
は、ACM ハブのマネージドクラスター namespace に namespacemanifestwork
リソースを維持します。これらのリソースは、アプリケーションの削除後に削除する必要があります。たとえば、クラスター管理者として、ハブクラスターでoc delete manifestwork -n <managedCluster namespace> <drPlacementControl name>-<namespace>-ns-mw
のコマンドを実行します。
一部のイメージで RBD ミラースケジューリングが停止する
Ceph Manager デーモンは、さまざまな理由でブロックリストに登録されます。これにより、スケジュールされた RBD ミラースナップショットが、イメージがプライマリーであるクラスターでトリガーされなくなります。ミラーリングが有効になっている (つまり DR 保護されている) すべての RBD イメージは、
rbd mirror snapshot schedule status -p ocs-storagecluster-cephblockpool
を使用して調べたときにスケジュールを一覧表示しないため、ピアサイトにアクティブにミラーリングされません。回避策: イメージがプライマリーである管理対象クラスターで Ceph Manager のデプロイを再起動して、現在実行中のインスタンスに対するブロックリストを回避します。これは、次のように Ceph Manager のデプロイをスケールダウンしてからスケールアップすることで実行できます。
$ oc -n openshift-storage scale deployments/rook-ceph-mgr-a --replicas=0 $ oc -n openshift-storage scale deployments/rook-ceph-mgr-a --replicas=1
結果:
rbd mirror snapshot schedule status -p ocs-storagecluster-cephblockpool
を使用して調べると、DR が有効で、管理対象クラスターでプライマリーとして示されているイメージがミラーリングスケジュールの報告を開始します。
クラスターがストレッチモードの場合、ceph
df
が無効な MAX AVAIL 値を報告するRed Hat Ceph Storage クラスターのクラッシュルールに複数の実行ステップがある場合、
ceph df
レポートは、マップの使用可能な最大サイズを間違って表示します。この問題は、今後のリリースで修正される予定です。
Ceph が Globalnet によって割り当てられたグローバル IP を認識しない
Ceph は Globalnet によって割り当てられたグローバル IP を認識しないため、Globalnet を使用して重複するサービス CIDR を持つクラスター間で障害復旧ソリューションを設定することはできません。このため、サービス
CIDR
が重複している場合、障害復旧ソリューションは機能しません。
両方の DRPC が、同じ namespace で作成されたすべての永続ボリューム要求を保護する
複数の障害復旧 (DR) で保護されたワークロードをホストする namespace は、指定されていないハブクラスター上の同じ namespace 内の各 DRPlacementControl リソースの namespace にある永続ボリュームクレーム (PVC) をすべて保護し、その
spec.pvcSelector
フィールドを使用してワークロードに基づいて PVC を分離します。これにより、複数のワークロードにわたって DRPlacementControl
spec.pvcSelector
に一致する PVC が生成されます。あるいは、すべてのワークロードでセレクターが欠落している場合、レプリケーション管理が各 PVC を複数回管理し、個々の DRPlacementControl アクションに基づいてデータの破損または無効な操作を引き起こす可能性があります。回避策: ワークロードに属する PVC に一意のラベルを付け、選択したラベルを DRPlacementControl
spec.pvcSelector
として使用して、どの DRPlacementControl が namespace 内の PVC のどのサブセットを保護および管理するかを明確にします。ユーザーインターフェイスを使用して DRPlacementControl のspec.pvcSelector
フィールドを指定することはできません。したがって、そのようなアプリケーションの DRPlacementControl を削除し、コマンドラインを使用して作成する必要があります。結果: PVC は複数の DRPlacementControl リソースによって管理されなくなり、操作およびデータの不整合は発生しません。
MongoDB Pod は、
cephrbd
ボリュームのデータを読み取る許可エラーのため、CrashLoopBackoff
になっています異なるマネージドクラスターにまたがる Openshift プロジェクトには、異なるセキュリティーコンテキスト制約 (SCC) があり、特に指定された UID 範囲と
FSGroups
が異なります。これにより、特定のワークロード Pod とコンテナーが、ログ内のファイルシステムアクセスエラーが原因で、これらのプロジェクト内でフェイルオーバーの操作または再配置操作を開始できなくなります。回避策: ワークロードプロジェクトが同じプロジェクトレベルの SCC ラベルを持つすべてのマネージドクラスターで作成されていることを確認し、フェイルオーバーまたは再配置時に同じファイルシステムコンテキストを使用できるようにします。Pod は、ファイルシステム関連のアクセスエラーで DR 後のアクションに失敗しなくなりました。
再配置中にアプリケーションが Relocating 状態でスタックする
マルチクラウドオブジェクトゲートウェイでは、同じ名前または namespace の複数の永続ボリューム (PV) オブジェクトを同じパスの S3 ストアに追加できました。これにより、同一の
claimRef
を指す複数のバージョンが検出されたため、Ramen は PV を復元しません。回避策: S3 CLI または同等の機能を使用して、重複する PV オブジェクトを S3 ストアからクリーンアップします。タイムスタンプがフェイルオーバーまたは再配置の時刻に近いものだけを保持します。
結果: 復元操作が完了し、フェイルオーバーまたは再配置操作が次のステップに進みます。
ワークロードをピアクラスターにフェイルオーバーまたは再配置すると、フェイルオーバーまたは再配置元のクラスターがクリーンアップされるまで、
PeerReady
条件がtrue
に設定される障害復旧 (DR) アクションを開始した後、ワークロードがピアクラスターにフェイルオーバーまたは再配置される間、
PeerReady
条件は最初にtrue
に設定されます。その後、フェイルオーバーまたは再配置元のクラスターは、今後のアクションのためにクリーンアップされるまで、false
に設定されます。アクションを実行するためにDRPlacementControl
ステータス条件を見ているユーザーは、この中間的なPeerReady
状態を見て、ピアの準備ができていると認識し、アクションを実行する可能性があります。この場合、操作は保留中されるか失敗し、回復するためにユーザーの介入が必要になることがあります。回避策: アクションを実行する前に、
Available
とPeerReady
の両方の状態を調べます。ワークロードの DR 状態を正常にするために、両方がtrue
である必要があります。両方の状態が true のときにアクションを実行すれば、要求された操作が進行します。
障害復旧のワークロードが削除されたままになる
クラスターからワークロードを削除すると、対応する Pod が
FailedKillPod
などのイベントで終了しない場合があります。これにより、PVC
、VolumeReplication
、VolumeReplicationGroup
などの DR リソースに依存するガベージコレクションで遅延または障害が発生する可能性があります。また、古いリソースがまだガベージコレクションされていないため、クラスターへの同じワークロードの今後のデプロイもできなくなります。回避策: Pod が現在実行中で、終了状態でスタックしているワーカーノードを再起動します。これにより、Pod が正常に終了し、その後、関連する DR API リソースもガベージコレクションされます。
ブロックリスト登録により Pod がエラー状態で停止することがある
ネットワークの問題、または非常に過負荷/不均衡なクラスターが原因でブロックリスト登録が実行されると、テイルレイテンシーが急増します。このため、Pod は
CreateContainerError
でスタックし、次のメッセージが表示されます。Error: relabel failed /var/lib/kubelet/pods/cb27938e-f66f-401d-85f0-9eb5cf565ace/volumes/kubernetes.io~csi/pvc-86e7da91-29f9-4418-80a7-4ae7610bb613/mount: lsetxattr /var/lib/kubelet/pods/cb27938e-f66f-401d-85f0-9eb5cf565ace/volumes/kubernetes.io~csi/pvc-86e7da91-29f9-4418-80a7-4ae7610bb613/mount/#ib_16384_0.dblwr: read-only file system.
回避策: 次の手順に従って、これらの Pod がスケジュールされ、障害が発生しているノードを再起動します。
- 問題のあるノードを遮断してからドレインします。
- 問題のあるノードを再起動します。
問題のあるノードのコードの遮断を解除します。
マネージドクラスターが OpenShift Container Platform と OpenShift Data Foundation の異なるバージョン上にある場合、アプリケーションのフェイルオーバーが
Failover
状態でハングするOpenShift Data Foundation 4.13 を使用した障害復旧ソリューションは、永続ボリューム (PV) データに加えて永続ボリューム要求 (PVC) データを保護および復元します。プライマリークラスターが古い OpenShift Data Foundation バージョン上にあり、ターゲットクラスターが 4.13 に更新されている場合、S3 ストアに PVC データがないため、フェイルオーバーが停止します。
回避策: Disaster Recovery クラスターをアップグレードする場合は、最初にプライマリークラスターをアップグレードしてから、アップグレード後の手順を実行する必要があります。
DRPolicy が同じ namespace 内の複数のアプリケーションに適用されると、ボリュームレプリケーショングループが作成されない
namespace 内の他のアプリケーションと同じ場所に配置されているアプリケーション用に DRPlacementControl (DRPC) が作成される場合、DRPC にはアプリケーション用のラベルセレクターセットがありません。その後ラベルセレクターに変更が加えられた場合、OpenShift Data Foundation Hub コントローラーの検証アドミッション Webhook は変更を拒否します。
回避策: アドミッション Webhook がそのような変更を許可するように変更されるまでは、DRPC
validatingwebhookconfigurations
にパッチを適用して Webhook を削除できます。$ oc patch validatingwebhookconfigurations vdrplacementcontrol.kb.io-lq2kz --type=json --patch='[{"op": "remove", "path": "/webhooks"}]'
サブスクリプションベースのワークロードに関連付けられた特定の管理リソースが削除される
ハブのリカバリー中に、OpenShift Data Foudation で Red Hat Advanced Cluster Management バージョン 2.7.4 (またはそれ以降) の既知の問題が発生し、サブスクリプションベースのワークロードに関連付けられた特定の管理リソースが意図せず削除される可能性があります。現在、この問題には既知の回避策がありません。
ハブの回復後にピアの準備完了ステータスが
Unknown
と表示されるゾーン障害とハブの回復後、障害復旧の配置制御 (DRPC) 内のサブスクリプションおよびアプリケーションセットアプリケーションのピア準備完了ステータスが
Unknown
と表示されることがあります。これは表面上の問題であり、Ramen の通常の機能には影響せず、oc
コマンドを使用して表示したときの DRPC 出力の外観に限定されます。回避策: YAML 出力を使用して、正しいステータスを確認します。
$ oc get drpc -o yaml
7.1.1. DR アップグレード
このセクションでは、障害復旧環境での Red Hat OpenShift Data Foundation のバージョン 4.12 から 4.13 へのアップグレードに関連する問題と回避策について説明します。
アップグレード前に存在していたワークロードのフェイルオーバーまたは再配置がブロックされる
OpenShift Data Foundation Disaster Recovery ソリューションは、永続ボリューム (PV) データに加えて永続ボリューム要求 (PVC) データも保護します。アップグレード前に存在していたワークロードでは、PVC データがバックアップされていないため、フェイルオーバーまたは再配置がブロックされます。
回避策:
各ワークロードのプライマリークラスターで次の手順を実行して、OpenShift Data Foundation Disaster Recovery ソリューションが PV データに加えて PVC データを確実にバックアップするようにします。
ボリュームレプリケーショングループ (VRG) のステータスを編集します。
$ oc edit --subresource=status vrg -n <namespace> <name>
-
vrg.Status.ProtectedPVCs
条件ごとに、ClusterDataProtected ステータスをFalse
に設定します。これにより、S3 ストアにアプリケーション PVC が追加されます。 - Ramen Pod を 0 にスケールダウンしてから 1 に戻して再起動します。
-
すべての
vrg.Status.ProtectedPVCs
条件のClusterDataProtected
ステータスが再びTRUE
に変わるのを待って、S3 ストアにアプリケーション PVC が設定されていることを確認します。
フェイルオーバーまたは再配置操作を開始する場合は、次の手順を実行します。
フェイルオーバーまたは再配置操作を開始する前に、DRPC ステータスサブリソースを編集して、
status.preferredDecision.ClusterNamespace
フィールドをクリアします (まだ編集していない場合)。$ oc edit --subresource=status drpc -n <namespace> <name>
status.preferredDecision.ClusterNamespace
でキャッシュされた値が間違っているOpenShift Data Foundation がバージョン 4.12 から 4.13 にアップグレードされると、障害復旧配置制御 (DRPC) の
status.preferredDecision.ClusterNamespace
に誤った値がキャッシュされる可能性があります。その結果、DRPC はフェイルオーバーがすでに完了していることを検出せず、誤ってWaitForFencing
PROGRESSION に入ります。マネージドクラスターのワークロードは、この問題の影響を受けません。回避策:
-
影響を受ける DRPC を特定するには、CURRENTSTATE として
FailedOver
状態にあり、WaitForFencing
PROGRESSION でスタックしている DRPC がないか確認します。 間違った値をクリアするには、DRPC サブリソースを編集し、
status.PreferredCluster.ClusterNamespace
という行を削除します。$ oc edit --subresource=status drpc -n <namespace> <name>
DRPC ステータスを確認するには、PROGRESSION が
COMPLETED
状態であり、FailedOver
が CURRENTSTATE であるかどうかを確認します。
-
影響を受ける DRPC を特定するには、CURRENTSTATE として