AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

Kubernetesへの移行のトラブルシューティング

このページでは、自己管理型のレプリカセットまたはシャーディングされたクラスターを仮想マシンからKubernetes 演算子配下のKubernetesに移行する際に発生する可能性のある問題(プラグインのインポート失敗、ドライ実行するや接続の問題、認証の不一致、検証エラーなど)の診断方法を説明します。移行ワークフローの経歴については、「自己管理型配置のKubernetesへの移行する」を参照してください。

まず、status.conditions[type=Migrating] 条件の reason フィールドを読み取ります。

理由
ステータス
意味

Validating

True

ドライラン アノテーションが設定されています。

Extending

True

目的のKubernetesノード数が、最後に調整された数を超えています。

Pruning

True

externalMembers の数が status.migrationObservedExternalMembersCount を下回りました。

InProgress

True

外部ノードは存在しますが、何も変わっていません。これも最初の調整時の理由です。

MigrationComplete

False

すべての外部ノードが削除されました。

優先順位は Validating > Extending > Pruning > InProgress です。Kubernetes 側の削除と拡大の両方を行うプルーンは Extending を報告します。これもまた、変更を1つずつ行う別の理由です。

Pruningとextendingを同時に行うことはできません。

移行の完了をスクリプトで処理するには、status.phaseをポーリングするのではなく、kubectl wait --for=condition=Migrating=Falseを使用してください。

  • 状態が Extending のままである場合、Kubernetes 演算子 が追加している Kubernetes ノードはまだプロビジョニング中です。目標状態に達するまで待機してください。

  • 理由が InProgress のままで、外部ノード数に変更がない場合、リソースへの最後の編集はノーオペレーションでした。Kubernetes 演算子 はアクションを必要とする変更を検出しませんでした。

kubectl mongodb migrate-to-mck プラグインは、リソースを生成する前にソースオートメーション設定を検証します。次の各ケースでは、不完全または不正なリソースを生成するのではなく、エラーで終了します。

  • MongoDB Ops ManagerまたはCloud Managerプロジェクトには、複数の配置があります。

  • このプロジェクトには、複数のシャーディングされたクラスターがあります。

  • プロジェクトには、シャーディングされたクラスターの一部ではないレプリカセットがあります。

  • プロジェクトには、レプリカセットやシャーディングされたクラスターはありません。このプラグインは、レプリカセットとシャーディングされたクラスターの配置のみを移行できます。

  • オートメーション設定にはプロセスがありません。

  • シャーディングされたクラスター内のシャードは、コンフィギュレーションサーバーと同じレプリカセットによってバックアップされています。この組み込みコンフィギュレーションサーバーのトポロジーは移行にはサポートされていません。

  • プラグインは、レプリカセット内で投票可能かつ優先順位の対象となるノードを見つけることができないため、そのレプリカセットのソースプロセスを特定できません。

  • プロセスは mongod または mongos 以外の processType を持っています。

プラグインは、Kubernetes 演算子 が期待する設定と一致しない場合に、次のオートメーション構成設定にフラグを立てます。

  • auth.keyFile Kubernetes 演算子が spec.downloadBase から引き出されるパスとは異なります。

  • auth.keyFileWindows が設定されています。

  • monitoringAgentConfig.logPath または、backupAgentConfig.logPath がデフォルト以外のパスに設定されている場合。

  • プロセスには、Kubernetes 演算子のデフォルトとは異なる authSchemaVersion があります。

  • auth.autoUser は、認証が有効な間は空です。

  • auth.autoUser そのデータベースの auth.usersWanted に一致するエントリがありません。一致するエントリがない場合、移行後にエージェントの認証が失敗します。

  • MONGODB-X509 エージェント認証には、オートメーション構成で tls.autoPEMKeyFilePath を設定する必要があります。詳細については、「spec.security.authentication.agents.autoPEMKeyFilePath」を参照してください。

  • simple 以外の LDAP bindMethod は、移行ではサポートされていません。

Kubernetes 演算子は、単一のソースプロセスからspec.additionalMongodConfigとspec.agent.mongod.systemLogを取得します。レプリカセットのノードの構成が異なる場合は、移行前にすべてのノードを検討して差異を調整してください。生成されたリソースは、すべてのKubernetesノードに1つの構成を適用します。

以下のプロセスごとのオートメーション設定は、新しいKubernetesノードには引き継がれません。移行する前に、それらの設定を計画してください。

  • secondaryDelaySecs

  • 非表示メンバー

  • buildIndexes: false

ソース配置に分析ノードまたは遅延ノードが含まれている場合は、開始する前に Kubernetes 内でそれらをどのように表現するかを計画してください。

その他に検討する項目:

  • このプラグインは無効なプロセスをスキップするため、外部ノードとしては表示されません。

  • TLSが設定されていないプロセスがある場合は、移行前に、既存の仮想マシン配置のMongoDB Ops ManagerまたはCloud Managerで、net.tls.modeをdisabledに設定してください。生成されたMongoDBリソースにはこれを設定しないでください。そうしないと、KubernetesノードのTLS設定がソースプロセスと一致せず、移行によって予期しない配置変更が発生します。

  • プロセスの logRotate または auditLogRotate 設定がプロジェクトレベルの構成と異なる場合、Kubernetes 演算子 はプロジェクトレベルの値を使用します。

mongodb.com/migrate-tool-version アノテーションは、リソースを生成した kubectl mongodb migrate-to-mck プラグインのバージョンを記録します。Kubernetes 演算子は、ドライ実行する中を含め、reconcile ごとにこのアノテーションを自身のバージョンと照合して検証します。バージョンに互換性がない場合は、互換性のあるプラグイン バージョンを使用してリソースを再生成してください。

<resourceName>-connectivity-check ジョブを削除します。次の調整で再作成されます。

ジョブが作成されない場合は、お使いの Kubernetes RBAC パーミッションに batch/jobs が含まれているかどうか確認してください。batch/jobs の許可がないため、Kubernetes 演算子は接続バリデーター ジョブを作成できません。

バリデーター ジョブ 終了コード
条件ステータス
理由
意味

ジョブが実行中です

Unknown

Running

status.phase は ConnectivityCheckRunning です。

0

True

NetworkValidationPassed

すべての外部ノードは到達可能であり認証済みです。

2

False

AuthenticationFailed

認証情報、認証メカニズム、または不足している__system@localロール。

3

False

NetworkFailed

DNS、TLS、タイムアウト、または到達不能なノード。ジョブPodのログを確認します。

1 またはその他

False

UnknownError

未分類の障害。ジョブ Pod ログを確認する。

ジョブの開始前に発生する失敗は、OperatorImageUnknown、BuildStatefulSetOptions、AgentCertSecretFailed、AgentCertSubject の理由を使用します。

Kubernetes 演算子は、外部ノードがなくなると、status.conditions から NetworkConnectivityVerified 状態を完全に除きます。

Kubernetes 演算子は、接続検証ジョブが開始する前に、次のいずれかの理由により失敗する可能性があります:

  • OperatorImageUnknown

  • BuildStatefulSetOptions

  • AgentCertSecretFailed

  • AgentCertSubject

Kubernetesノードの証明書は、仮想マシンのノードの証明書に署名した認証局と同じ認証局によって発行される必要があります。そうでない場合、仮想マシンとKubernetesノード間の接続検証とレプリケーションは失敗します。

  • spec.memberConfig spec.members よりエントリーが少ない。ノードごとに1つのエントリを追加してください。

  • Kubernetes 演算子は、シャーディングされたクラスターの最上位のspec.memberConfigフィールドを無視します。

警告

spec.memberConfig を設定するノード数を増やす前に

デフォルトでは、新しい Kubernetes ノードは投票ノードとして参加します。CRD デフォルトは votes: 1 と priority: "1" です。これらのデフォルトにより、同期中のノードは最初の同期が完了する前に選挙に参加できます。

MongoDB は、ノード数を増やす前に、votes: 0 と priority: "0" を使用して、新しい Kubernetes ノードごとに spec.memberConfig エントリを 1 つ書き込み (write)することを推奨します。これにより、まだ同期中のノードが選挙に勝つことができなくなります。votes は整数です。priority は string です。

リソース名またはレプリカセット名が長すぎるか、有効な RFC 1123 名ではありません。有効なKubernetes名を指定するには、spec.replicaSetNameOverrideまたは--resource-name-overrideを使用してください。

  • 検証は、実際の移行を開始した後だけでなく、ドライランアノテーション(mongodb.com/migration-dry-run)が設定されている間も実行される可能性があります。

  • 制限を超える変更が間接的に適用された場合、投票ノードの制限検証は admission time ではなく、reconcile 時に発生する可能性があります。

  • 1つの編集にあまりにも多くの変更をバッチすると、配置がクォーラムを失う可能性があります。変更は一度に1種類のみを行ってください。Kubernetes ノードの追加、外部ノードの削除、または投票と優先順位の変更など。

上記のセクションを実行しても問題が持続する場合は、サポートに問い合わせる前に次の情報を収集してください。

  • status.conditions を含む MongoDB リソース YAML:

    kubectl get mdb <resource-name> -n <namespace> -o yaml
  • 配置の MongoDBUser リソース。

  • Kubernetes 演算子のログ。

  • 接続バリデーター ジョブの pod ログ。

  • MongoDB Ops ManagerまたはCloud Managerのオートメーション設定JSON。

次に、テクニカル サポートに問い合わせてください。