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

MongoDBSearchをパブリックプレビューから GA に移行する

このガイドでは、Kubernetes 演算子 を MongoDBSearch の一般提供(GA)リリースにアップグレードした後に既存の MongoDBSearch 配置を再作成するために行う必要な変更について説明します。

重要

この移行はインプレースアップグレードではなく、移行中は検索は実行されません。Kubernetes 演算子は、検索配置をゼロから再構築します。新しい配置の準備が整い、データの再インデックス化が完了するまで、MongoDB Search およびベクトル検索クエリ($search および $vectorSearch 集計ステージ)は使用できません。このガイドを使用して、GA Kubernetes 演算子でパブリック プレビュー配置の同等の構成を再作成します。実行中の配置を中断せずにアップグレードすることはできません。

このガイドでは、"パブリック プレビュー" は GA 前の MongoDBSearch のリリースを意味します。MongoDBSearch カスタム リソースには、常に 1 つの API バージョン v1 があるため、Kubernetes と Kubernetes 演算子のどちらも古いフィールド値を自動的に変換しません。このガイドのすべての変更を、手動で 1 度、既存のマニフェストに適用する必要があります。

このガイドでは、新しい GA 機能や任意フィールドは説明していません。セクションが既存のマニフェストに適用されない場合は、スキップしてください。

GAは、サポートされる最小のmongotバージョンである1.70.1を強制します。MongoDBSearchリソースで1.70.1よりも前のspec.versionが明示的にピン留めされている場合、アップグレード後にreconciliationが失敗し、サポートされていないバージョンであることを示すエラーが発生します。spec.version を設定しない場合、Kubernetes Operator が独自のデフォルト(この GA リリース時点では 1.70.1)を適用するため、アクションを実行する必要はありません。

アップグレードする前に、ピン留めているバージョンがある場合は、そのバージョンを確認してください。

kubectl get mongodbsearch <name> -n <namespace> -o jsonpath='{.spec.version}'

コマンドで 1.70.1 以前のバージョンが表示される場合は、次のセクションのマニフェストの変更の一部として spec.version1.70.1 以降に更新します。

Public Preview MongoDBSearch カスタムリソースには spec.clusters フィールドがありませんでした。GA では spec.clusters が必要となり、spec のトップレベルにあったいくつかのフィールドは spec.clusters[0] 内にのみ存在するようになりました。すべての既存のマニフェストには、トポロジーに関わらず、同じ機械的な編集が 1 度だけ必要です。

このセクションの例では、mongodb 名前空間の my-search という名前の MongoDBSearch リソースを使用します。リソースの名前と名前空間を置き換えます。

1

6 つのトップレベル spec フィールドが spec.clusters[0] 内に移動します。

パブリック プレビュー パス
GA パス

spec.replicas

spec.clusters[0].replicas

spec.persistence

spec.clusters[0].persistence

spec.resourceRequirements

spec.clusters[0].resourceRequirements

spec.statefulSet

spec.clusters[0].statefulSet

spec.loadBalancer

spec.clusters[0].loadBalancer

spec.jvmFlags

spec.clusters[0].jvmFlags

spec.clusters にエントリが 1 つだけある場合、これはすべてのパブリックプレビューワークロードに該当しますが、spec.clusters[0].name または spec.clusters[0].index を設定する必要はありません。

logLevel, securitysourceversionautoEmbeddingは変更されず、specのトップ レベルに留まります。

次のパブリック プレビュー構成:

apiVersion: mongodb.com/v1
kind: MongoDBSearch
metadata:
name: my-search
namespace: mongodb
spec:
source:
mongodbResourceRef:
name: my-replica-set
replicas: 3
persistence:
single:
storage: 20Gi
resourceRequirements:
requests:
cpu: "1"
memory: 2Gi
limits:
cpu: "2"
memory: 4Gi
statefulSet:
spec:
template:
spec:
nodeSelector:
disktype: ssd
loadBalancer:
managed:
replicas: 2
jvmFlags:
- "-Xmx2g"

GA では次の構成になります。

apiVersion: mongodb.com/v1
kind: MongoDBSearch
metadata:
name: my-search
namespace: mongodb
spec:
source:
mongodbResourceRef:
name: my-replica-set
clusters:
- replicas: 3
persistence:
single:
storage: 20Gi
resourceRequirements:
requests:
cpu: "1"
memory: 2Gi
limits:
cpu: "2"
memory: 4Gi
statefulSet:
spec:
template:
spec:
nodeSelector:
disktype: ssd
loadBalancer:
managed:
replicas: 2
jvmFlags:
- "-Xmx2g"

重要

この手順をスキップすると、Kubernetes API サーバーはパブリック プレビュー マニフェストを完全に拒否します。spec.clusters はデフォルトのない必須フィールドであるため、延遅されたりサイレントなりではなく、直ちに受け入れに失敗します。

2

この変更は名前の変更にとどまりません。GA では Prometheus メトリクスエンドポイントがデフォルトで有効になりますが、パブリックプレビューでは明示的に spec.prometheus を設定しない限り無効になっていました。

spec.prometheus を既に設定している場合は、そのまま移動します。

パブリック プレビュー:

spec:
prometheus:
port: 9946

GA:

spec:
observability:
prometheus:
port: 9946

spec.prometheus を設定しない場合、移動するものはありませんが、アップグレード後にポート 9946 で Prometheus スクレイプ ターゲットが表示されます。

重要

アップグレード後もメトリクスを無効にするには、次の項目を明示的に追加します。

spec:
observability:
prometheus:
mode: disabled
3

警告

この変更により、既存の TLS が切断され、自動フォールバックは行われません。MongoDBSearch リソースで spec.source.external.tls.ca で TLS CA が構成されていて、この手順をスキップすると、GA Kubernetes Operator が調整を開始した瞬間に外部 TLS が切断されます。このオペレーターは ConfigMap のみを読み取り、Secret へのフォールバックはありません。リソースで spec.source.external.tls.ca をまったく使用しない場合、この手順は適用されません。

フィールドパス spec.source.external.tls.ca.name は変更されません。変更されるのは、Kubernetes Operator がその名前で期待する Kubernetes オブジェクトの種類です。パブリックプレビューでは Secret、GA では ConfigMap です。どちらも同じキー ca.crt で CA 証明書を期待します。

パブリック プレビューでは、spec.source.external.tls.ca.nameSecret を指します。

apiVersion: v1
kind: Secret
metadata:
name: my-search-external-ca
namespace: mongodb
type: Opaque
stringData:
ca.crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

GA では、同じ名前は同じ ca.crt キーを持つ ConfigMap を参照する必要があります。

apiVersion: v1
kind: ConfigMap
metadata:
name: my-search-external-ca
namespace: mongodb
data:
ca.crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

参照されている MongoDBSearch リソースは変更されません。spec.source.external.tls.ca.name は依然として同じ名前を指しています。

apiVersion: mongodb.com/v1
kind: MongoDBSearch
metadata:
name: my-search
namespace: mongodb
spec:
source:
external:
hostAndPorts:
- mongodb-0.example.com:27017
tls:
ca:
name: my-search-external-ca

可能な場合は Kubernetes Operator をアップグレードする前または同時に ConfigMap を作成します。

kubectl create configmap my-search-external-ca \
--from-file=ca.crt=./ca.crt \
--namespace mongodb

前述の例に示すように、古いSecretの名前を再利用することも、新しい名前を選択することもできます。Kubernetes Operator は、古い Secret を読み取らなくなりました。外部TLSが再度機能することを確認してから、削除してください。

このセクションでは、Kubernetes Operator がマネージする基礎となる Kubernetes オブジェクトに何が起こるか、およびその後に確認することとクリーンアップすることを説明します。変更される内容は、MongoDBSearch リソースがレプリカセットから同期されるか、シャーディングされたクラスターかによって異なります。

ほとんどの演算子マネージドリソースは、GA で同じ名前を維持します。Kubernetes Operator は、次の調整でこれらのリソースをインプレースで更新します。アクションを実行する必要はありません。

MongoDBSearchリソースがレプリカセット(シャーディングされていない)ソースから同期する場合、GA Kubernetes Operatorは初めてMongoDBSearchリソースを調整すると、新しい名前で3つのリソースを再作成します。Kubernetes 演算子は古いオブジェクトを採用、名前変更、または削除しません。この動作は設計によるものです。

次の表では、前のセクションの my-search リソース例を使用しています。

Resource
パブリック プレビュー名
GA 名

mongot StatefulSet

my-search-search

my-search-search-0

mongot headless Service

my-search-search-svc

my-search-search-0-svc

mongot config ConfigMap

my-search-search-config

my-search-search-0-config

この変更には、次のような実用的な効果があります。

  • 新しい StatefulSet は空の状態で起動します。ポッドに新しい PersistentVolumeClaims が設定されるため、mongot はゼロから再インデックスされます。これには、データセットのサイズに応じて時間がかかる場合があります。

  • 古い StatefulSet の Pod は引き続き実行されます。Kubernetes 演算子は、それらを増やしません。古い StatefulSet を削除するまで、mongot Pod のコンピュートが double 実行されます。

  • 古い StatefulSet の PVC と古い ConfigMap はオーファン化されます。もはや読み取られることはありませんが、削除されることもありません。

  • ヘッドレスサービスの DNS 名の変更については、アクションは必要ありません。ロード バランサーがない場合、Kubernetes 演算子は各調整で同期ソース接続文字列を書き換えます。マネージドロード バランサーまたはマネージドでないロード バランサーを使用する場合、このサービスは接続パスの一部ではありません。

重要

Kubernetes Operator は古いオブジェクトを自動的に削除することはありません。新しい StatefulSet が正常に動作していることを確認した後(検証を参照)、古いリソースを削除するて、無期限に倍増したコンピュートの料金を支払うことを避けます。このクリーンアップは必須の手順であり、任意の手順ではありません。

1

最初に新しい StatefulSet が正常であることを確認し (「検証」を参照)、次に次のコマンドを実行します。

kubectl delete statefulset my-search-search -n mongodb
kubectl delete service my-search-search-svc -n mongodb
kubectl delete configmap my-search-search-config -n mongodb
2

StatefulSet を削除しても PVC は削除されないため、別々に削除します。

# Preview the PVCs to delete:
PVCS=$(kubectl get pvc -n mongodb -o name \
| grep -E 'data-my-search-search-[0-9]+$')
echo "$PVCS"
# After confirming, delete exactly what you previewed:
echo "$PVCS" | xargs kubectl delete -n mongodb

古い PVC は data-my-search-search-<ordinal> に一致します(例: data-my-search-search-0)。data-my-search-search-0-<ordinal> に一致するものは削除しないでください(例: data-my-search-search-0-0)。これらは新しい StatefulSet に属します。

MongoDBSearch リソースがシャーディングされたクラスターソースから同期する場合、パブリックプレビューと GA ではシャードごとのリソース名は同じです。Kubernetes Operator は新しい名前で再作成しません。その代わり、インプレースで更新します。

Resource
パブリック プレビューと GA の名前(変更なし)

シャードごとのmongot StatefulSet

my-search-search-0-<shard-name>

シャードごとの mongot ヘッドレス サービス

my-search-search-0-<shard-name>-svc

Per-shard mongot config ConfigMap

my-search-search-0-<shard-name>-config

シャードごとのプロキシ サービス

my-search-search-0-<shard-name>-proxy-svc

シャードごとの TLS 証明書を使用する場合は、1 つの例外が適用されます。Kubernetes Operator は、提供された TLS Secret から証明書とキーをシャードごとの演算子マネージド Secret に統合し、その Secret を新しい名前で再作成します。

Resource
パブリック プレビュー名
GA 名

シャードごとの TLS 演算子と統合されたシークレット

<shard-name>-search-certificate-key

my-search-search-0-<shard-name>-certificate-key

提供する TLS シークレットの名前は変更されません。この演算子マネージド シークレットのみ名前が変更されます。Kubernetes Operator は古いシークレットを削除しません。古いシークレットはオーファンになります。新しいシークレットが存在し、そのシャードで TLS が機能することを確認してから、古いシークレットを手動で削除する。

Kubernetes 演算子をアップグレードし、マニフェストの変更を適用した後、古いリソースを削除する前に、このチェックリストを完了してください。

  • kubectl get mongodbsearch <name> -n <namespace> -o yamlspec.clusters が入力されており、残っているトップレベルの replicaspersistenceresourceRequirementsstatefulSetloadBalancerjvmFlagsprometheus フィールドがないことを確認します。

  • 単一クラスター配置の新しいmongot StatefulSetである<name>-search-0のすべてのポッドがRunningReadyであることを確認します。

  • 古いStatefulSetから何かを削除する前に、mongotが新しいポッド上で再インデックス作成を完了したことを確認してください。mongotのPodの準備状況だけでなく、ログやインデックスの状態を確認して完了しているかを確認してください。

  • Prometheus スクレイピングを使用する場合は、スクレイプ構成またはダッシュボードに新しいデフォルトで有効になった動作が反映されていることを確認します。つまり、メトリクスが表示されるか、明示的な mode: disabled 設定によってメトリクスが無効のままになります。

  • spec.source.external を TLS と一緒に使用する場合は、spec.source.external.tls.ca.name で参照される CA ConfigMap が存在し、有効な ca.crt キーを含んでいること、および mongot の外部 MongoDB 配置への接続が正常であることを確認します。

  • レプリカセット ソースの場合は、古い <name>-search<name>-search-svc<name>-search-config オブジェクトとそのオーファン PVC を特定して削除するしたことを確認します。シャーディングされたソースの場合は、古いシャードごとの TLS Secrets を削除したことを確認します。

アップグレードの一部がこのガイドの記述と一致しない場合、またはこのガイドでカバーされていない問題が発生した場合は、MongoDB サポートにお問い合わせください。シークレットが隠されたMongoDBSearchマニフェスト、アップグレード元のKubernetes Operatorバージョンとアップグレード先のKubernetes Operatorバージョン、および次の出力を含めてください。

kubectl describe mongodbsearch <name> -n <namespace>