mongot プロセスは、MongoDB Search および Vector Search インデックスを専用の Persistent Volume に保存します。Kubernetes 演算子は、そのストレージを自動的に拡張しません。Kubernetes 演算子 1.9 以降では、mongot Persistent Volume Claims を拡張し、拡張されたボリュームサイズを反映するように MongoDBSearch リソースを更新できます。他のリソースのストレージを増やす方法については、「永続ボリュームのストレージを増やす」を参照してください。
前提条件
mongotボリュームが接続されたままのボリューム展開をサポートする CSV(Container Storage Interface)ドライバーと、そのドライバーを表し、 を に設定する StorageClassallowVolumeExpansiontrueを使用してプロビジョニングされる永続的なボリューム要求。ファイルシステムが展開をサポートしていることを確認します。この手順では、コントローラーがボリュームを展開する前にボリュームをデタッチする必要があるストレージバックエンドには対応していません。正常なソースデータベース、MongoDB Searchおよびベクトル検索の配置、そしてバックアップまたはリカバリ計画。ソースデータベースのバックアップを構成するには、「MongoDB データベース バックアップの構成」を参照してください。Searchで何をバックアップすべきかを学ぶには、「
mongot配置 Frequently Asked Questions」を参照してください。Kubernetes 演算子またはMongoDBSearchリソースの同時拡大やアップグレードを伴わないメンテナンスウィンドウ。Kubernetes 演算子のレプリカを復元したり、Searchストレージの設定を元に戻したりする可能性のあるオートメーション(例:GitOps同期)を一時停止します。GitでMongoDBSearchリソースをマネージドしている場合は、同期を再開する前に新しいサイズをコミットしてください。演算子を停止すると、それが管理するすべてのリソースの調整が一時停止されます。
Persistent Volume Claimsのパッチ適用、MongoDBSearchリソースの編集、Kubernetes演算子配置の増やす、およびstatefulSetsとPodsを削除する権限。
マルチクラスター配置
この手順の間、MongoDBSearchリソース、mongot statefulSetsとそのPersistent Volume Claims、およびKubernetes演算子の配置に対してコマンドを実行します。マルチクラスター配置では、これらのターゲットは異なるクラスターに配置できます。次の表を使用して、各コマンドのコンテキストと、停止および再開する演算子を決定します。
配置 | MongoDBSearch リソースコンテキスト | StatefulSetおよびPersistent Volume Claimコンテキスト | 停止および再開する演算子 |
|---|---|---|---|
シングルクラスター | ワークロードクラスター | 同じクラスター | ローカル演算子 |
中央マルチクラスターKubernetes 演算子 | 中央クラスター | 影響を受ける各ノードクラスター | 中央演算子 |
ノードクラスターごとのKubernetes 演算子 | 各ノードクラスターのローカルSearchリソース | 同じノードクラスター | 影響を受ける各ノードのSearch演算子 |
ストレージの拡張
以下の手順で、レプリカセットのSearchストレージを1Giから2Giに拡張します。各 StatefulSet を、そのクラスターエントリの name および明示的な index と照合します。clusters 配列内のエントリの位置とは照合しません。
一致する shardOverrides[].persistence 設定が、クラスターの persistence 設定を置き換えます。設定した場合は、そこでサイズを変更してください。spec.clusters[].statefulSet で volumeClaimTemplates をオーバーライドした場合は、そこでサイズを変更してください。そのオーバーライドは persistence よりも優先されます。
警告
既存のMongoDBSearchリソースとそのPersistent Volume Claimsを維持したままストレージのみを増やし、mongotを縮小しないでください。StatefulSet定義のみを削除し、--cascade=orphanオプションを使用して、Kubernetes 演算子の停止中にmongotPodsとそのクレームがそのまま残るようにしてください。
mongot StatefulSet とデータ要求を特定します。
MongoDBSearch リソースの mongot statefulSets を一覧表示します。
kubectl --context <member-context> -n <namespace> \ get sts -l mongodb.com/search-name=<search-name>
デフォルトの data クレームテンプレートでは、各レプリカは data-<statefulset-name>-<ordinal> という名前のクレームを使用します。シャーディングされたクラスターソースの場合、各クラスターには各シャードに対して 1 つの StatefulSet があります。クレームテンプレートまたはボリュームマウントをカスタマイズした場合は、代わりに各 Pod がマウントするクレームを確認してください。
各データクレームを詳しく説明してください。
前のステップで特定した各クレームについて、次のコマンドを実行します。
kubectl --context <member-context> -n <namespace> \ patch pvc <pvc-name> --type=merge \ -p '{"spec":{"resources":{"requests":{"storage":"2Gi"}}}}'
各クレームがstatus.capacity.storageまたはFileSystemResizePending条件で少なくとも要求されたサイズ(この例では2Gi)を報告するまで待機します。
kubectl --context <member-context> -n <namespace> \ get pvc <pvc-name> -o yaml
展開にストレージバックエンドのドキュメントに記載されているタイムアウトよりも時間がかかる場合は、続行する前にCSIイベントを調査してください。
kubectl --context <member-context> -n <namespace> \ describe pvc <pvc-name>
担当するKubernetes 演算子の配置を停止します。
各演算子の元のレプリカ数を記録します。
kubectl --context <operator-context> -n <operator-namespace> \ get deployment <operator-name> \ -o jsonpath='{.spec.replicas}{"\n"}'
演算子をゼロに増やすし、その Pods が削除されるのを待ちます。
kubectl --context <operator-context> -n <operator-namespace> \ scale deployment <operator-name> --replicas=0 kubectl --context <operator-context> -n <operator-namespace> \ wait --for=delete pod --timeout=300s \ -l app.kubernetes.io/name=<operator-name>
mongotではなく、演算子を増やす。Helm チャートは、演算子の配置に mongodb-kubernetes-operator という名前を付け、その Pods に app.kubernetes.io/name: mongodb-kubernetes-operator を設定します。インストールがカスタマイズされている場合は、この例に示すチャートラベルの代わりに、配置の実際のポッドセレクターを使用してください。続行する前に、終了中の Pods を含め、すべての責任ある演算子 Pods を停止します。個別のソースデータベース演算子を停止しても、ノード検索演算子は一時停止されません。
StatefulSet定義のみを除く。
ステップ 1 で特定した各 StatefulSet に対して、次のコマンドを実行します。
kubectl --context <member-context> -n <namespace> \ delete sts <statefulset-name> --cascade=orphan \ --timeout=300s
各StatefulSetが存在しないことを確認します。その一方で、既存のmongot PodsとPersistent Volume Claimsは、削除タイムスタンプなしでそのまま残ります。MongoDBSearchリソースを削除したり、mongotを縮小したりしないでください。
既存のSearchリソースを更新します。
kubectl --context <search-resource-context> -n <namespace> \ edit mongodbsearch <search-name>
影響を受けるクラスターエントリの persistence.single.storage 値を変更します。
persistence: single: storage: 2Gi
Kubernetes演算子をノードクラスターごとに配置する構成では、対応する設定をすべてのローカルSearchリソースで更新してください。
既存のストレージクラス、クラスターエントリ、インデックス、レプリカ、およびその他の設定は保持されます。クラスターエントリを削除すると、そのクラスターのSearchリソースと要求が削除される可能性があります。
Searchリソースを読み戻し、新しい有効サイズが保持されていることを確認します。ターゲットの statefulSets は、演算子を再開するまで存在しない状態である必要があります。
演算子を再開します。
各演算子自身の記録されたレプリカ数を復元します。
kubectl --context <operator-context> -n <operator-namespace> \ scale deployment <operator-name> \ --replicas=<original-replicas> kubectl --context <operator-context> -n <operator-namespace> \ rollout status deployment/<operator-name> --timeout=600s
各 StatefulSet が拡張された data クレームテンプレートで再表示されるのを待ちます。新しい StatefulSet は、既存の Pods とクレームを採用します。
ファイルシステムで必要な場合は、mongot ポッドを再起動します。
FileSystemResizePendingの状態が続く場合は、影響を受けるmongot Podsを1つずつ削除してください:
kubectl --context <member-context> -n <namespace> \ delete pod <mongot-pod-name> --timeout=300s kubectl --context <member-context> -n <namespace> \ wait --for=condition=Ready pod/<mongot-pod-name> \ --timeout=600s
準備完了コマンドを実行する前に、置換 Pod が存在することを確認してください。置換が準備完了し、条件がクリアされた後にのみ、次の Pod を再起動します。展開がオンラインで完了した場合は、この手順をスキップします。
注意
Podを直接削除すると、PodDisruptionBudgetがバイパスされます。単一の mongot レプリカは、再起動中にリクエストを勤めることはできません。この手順では、ダウンタイムゼロを保証するものではありません。
ストレージとSearchの準備状況を確認します。
各 Persistent Volume Claim が少なくとも要求されたキャパシティーを報告していること、期待されるすべての mongot Pods が準備完了状態であること、および各 Search リソースが調整後に Running フェーズに達していることを確認します。
展開のトラブルシューティング
演算子が停止している間にステップが失敗した場合は、Searchリソース、そのPod、およびクレームをそのまま保持してください。有効なストレージ設定を修正してから、一時停止したすべての演算子を元のレプリカ数に復元します。構成を修正する前に再開した場合は、クレームを縮小または削除するのではなく、後で手順を完了してください。
Pod またはクレームが削除され始めた場合は、それ以上の削除を停止し、Kubernetes またはストレージ管理者に問い合わせてください。回避策として finalizers を除くことや PV.spec.capacity を編集することはしないでください。
詳細
他の Kubernetes 演算子 リソースのストレージを増やす方法については、「永続ボリュームのストレージを増やす」を参照してください。
mongotストレージ設定を検討するには、spec.clusters[].persistence を参照してください。設定。MongoDB Searchリソース設定について学ぶには、「MongoDB Searchとベクトル検索の設定」を参照してください。