このページでは、自己管理型のレプリカセットまたはシャーディングされたクラスターを仮想マシンからKubernetes 演算子配下のKubernetesに移行する際に発生する可能性のある問題(プラグインのインポート失敗、ドライ実行するや接続の問題、認証の不一致、検証エラーなど)の診断方法を説明します。移行ワークフローの経歴については、「自己管理型配置のKubernetesへの移行する」を参照してください。
移行のどこにいますか?
まず、status.conditions[type=Migrating] 条件の reason フィールドを読み取ります。
理由 | ステータス | 意味 |
|---|---|---|
|
| ドライラン アノテーションが設定されています。 |
|
| 目的のKubernetesノード数が、最後に調整された数を超えています。 |
|
|
|
|
| 外部ノードは存在しますが、何も変わっていません。これも最初の調整時の理由です。 |
|
| すべての外部ノードが削除されました。 |
優先順位は 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.keyFileKubernetes 演算子が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以外の LDAPbindMethodは、移行ではサポートされていません。
ノードの不均一性
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 演算子は接続バリデーター ジョブを作成できません。
接続の失敗
バリデーター ジョブ 終了コード | 条件ステータス | 理由 | 意味 |
|---|---|---|---|
ジョブが実行中です |
|
|
|
|
|
| すべての外部ノードは到達可能であり認証済みです。 |
|
|
| 認証情報、認証メカニズム、または不足している |
|
|
| DNS、TLS、タイムアウト、または到達不能なノード。ジョブPodのログを確認します。 |
|
|
| 未分類の障害。ジョブ Pod ログを確認する。 |
ジョブの開始前に発生する失敗は、OperatorImageUnknown、BuildStatefulSetOptions、AgentCertSecretFailed、AgentCertSubject の理由を使用します。
Kubernetes 演算子は、外部ノードがなくなると、status.conditions から NetworkConnectivityVerified 状態を完全に除きます。
ジョブ前の失敗
Kubernetes 演算子は、接続検証ジョブが開始する前に、次のいずれかの理由により失敗する可能性があります:
OperatorImageUnknownBuildStatefulSetOptionsAgentCertSecretFailedAgentCertSubject
TLS CA ミスマッチ
Kubernetesノードの証明書は、仮想マシンのノードの証明書に署名した認証局と同じ認証局によって発行される必要があります。そうでない場合、仮想マシンとKubernetesノード間の接続検証とレプリケーションは失敗します。
memberConfig 問題点
spec.memberConfigspec.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。
次に、テクニカル サポートに問い合わせてください。