MongoDB Ops ManagerとMongoDBデータベースリソースが実行されるポッド内のコンテナは、配置に適用される template または podTemplate 設定を使用して変更できます。
MongoDB database:
spec.podSpec.podTemplateMongoDB Ops Manager :
spec.statefulSet.spec.template
template または podTemplate に追加できるフィールドを確認するには、Kubernetes のドキュメント を参照してください。
templateまたはpodTemplateを使用してコンテナを作成すると、Kubernetes Operator は、 containers配列内の各コンテナに対して指定したnameに基づいて、コンテナの作成を異なる方法で処理します。
nameフィールドが該当するリソースイメージの名前と一致する場合、 Kubernetes Operator は、 または が適用されるポッド内のMongoDB Ops ManagerまたはMongoDBデータベースコンテナを更新します。templatepodTemplateMongoDB Ops Manager :
mongodb-enterprise-ops-managerバックアップデーモン サービス:
mongodb-backup-daemonMongoDB database:
mongodb-enterprise-databaseアプリケーションデータベース:
mongodb-enterprise-appdb
nameフィールドが適用されるリソースイメージの名前と一致しない場合、 Kubernetes Operator はtemplateまたはpodTemplateが適用される各ポッドに新しいコンテナを作成します。
MongoDB Kubernetes リソースのボリューム マウントの定義
ポッド内のコンテナ内のディスク上のファイルは、コンテナのクラッシュや再起動に耐えられません。spec.podSpec.podTemplate設定を使用すると、Ped の有効期間中にMongoDBデータベースリソースにデータを永続化するためのボリューム マウントを追加できます。
MongoDB データベース リソースのボリューム マウントを作成するには、次の手順に従います。
MongoDB データベースのリソース定義を更新して、Kubernetes Operator が作成するデータベースポッドにコンテナのボリュームマウントを含めます。
例
ボリュームマウントを定義するには、
spec.podSpec.podTemplateを使用します。podSpec: podTemplate: spec: containers: - name: mongodb-enterprise-database volumeMounts: - mountPath: </new/mount/path> name: survives-restart volumes: - name: survives-restart emptyDir: {} 更新されたリソース定義を適用します。
kubectl apply -f <database-resource-conf>.yaml -n <metadata.namespace>
InitContainer を使用して MongoDB Kubernetes リソース Docker イメージを調整
MongoDB リソースDockerイメージは RHEL で実行され、RHEL のデフォルトのシステム構成を使用します。リソースコンテナ内の基礎となる RHELMongoDB システム構成を調整するには、次のいずれかの設定を使用して特権付き InitContainer 初期化コンテナを追加します。
spec.podSpec.podTemplate: 特権 InitContainer を MongoDB database リソース コンテナに追加します。spec.statefulSet.spec.template: 特権 InitContainer をMongoDB Ops Managerリソース コンテナに追加します。
例
MongoDB database リソース Docker イメージは、 7200の RHEL デフォルトのkeepalive時間を使用します。 MongoDB では、データベース配置に120のkeepalive時間を短縮することを推奨しています。
クライアントとデータベース リソース間の通信でネットワーク タイムアウトやソケット エラーが発生した場合は、データベース リソース Docker イメージでkeepalive時間を調整できます。
Tip
TCP キープアライブ時間は MongoDB デプロイに影響しますか。 (MongoDB マニュアル)
MongoDB データベース リソース コンテナの Docker イメージを調整するには、次の手順に従います。
MongoDB データベース リソースの定義を更新して、Kubernetes Operator が作成するデータベース ポッドに特権を持つ InitContainer を追加します。
例
spec.podSpec.podTemplateのkeepalive値を推奨値120に変更します。spec: podSpec: podTemplate: spec: initContainers: - name: "adjust-tcp-keepalive" image: "busybox:latest" securityContext: privileged: true command: ["sysctl", "-w", "net.ipv4.tcp_keepalive_time=120"] 更新されたリソース定義を適用します。
kubectl apply -f <database-resource-conf>.yaml -n <metadata.namespace>
Kubernetes は、 Kubernetes Operator が MongoDBリソース定義を使用して作成する各ポッドに特権を持つ InitContainer を追加します。
データベースリソースポッド内の実行中のコンテナに対してシェルセッションを開き、変更を確認します。
例
前のkeepaliveの例に従うには、次のコマンドを呼び出して現在のkeepalive値を取得します。
kubectl exec -n <metadata.namespace> -it <pod-name> -- cat /proc/sys/net/ipv4/tcp_keepalive_time 120
Tip
「オペレーティング システム構成」を参照してMongoDB 。
Dockerfile テンプレートによるカスタム イメージの構築
MongoDB Dockerfile テンプレートを変更して、ユースケースに適したカスタム Kubernetes Operator イメージを作成できます。 カスタム イメージを作成するには、次のものが必要です。
MongoDB テンプレートから変更されたカスタム Dockerfile。
MongoDB が提供するテンプレートのコンテキスト イメージ。
MongoDB Dockerfile Templates
コンテナイメージのビルドに使用される Dockerfile は、 MongoDB Enterprise Kubernetes Githubリポジトリ から一般に入手できます。
Dockerfile ディレクトリは、リソース名、バージョン、ディストリビューションによって整理されています。
├── <resource name> │ └── <image version> │ └── <base distribution> │ └── Dockerfile template
使用するテンプレートを独自の Dockerfile にコピーし、必要に応じて変更します。
コンテキストイメージ
MongoDB Dockerfile テンプレートからイメージを構築するには、そのコンテキスト イメージを指定する必要があります。
各 Docker テンプレートには、元のイメージと同じ Quay レジストリから取得可能な 1 つのコンテキスト イメージが関連付けられています。コンテキスト イメージには常に quay.io/mongodb/<resource-name>:<image-version>-context という形式でタグ付けされます。
コンテキスト イメージをdocker buildに提供するには、 --build-argオプションを使用して、 imagebase変数を Query.io タグに設定します。ここでは、 <resource-name>と<image-version>が Dockerfile テンプレートと一致します。
例
任意のディストリビューションに対してmongodb-enterprise-databaseバージョン 2.0.0 のイメージを構築する場合は、次の要素を含めます。
--build-arg imagebase=quay.io/mongodb/mongodb-enterprise-database:2.0.0-context
docker build 例
mongodb-enterprise-operatorバージョン 1.9.1 の Ubuntu ディストリビューションは、デフォルトでubuntu:1604に基づいています。 この例では、その基本 Dockerfile テンプレートはubuntu:1804を使用するように変更され、 myDockerfileとして保存されます。
次のコマンドはカスタム イメージをビルドし、そのタグに1.9.1-ubuntu-1804を付与します。
cat myDockerfile | docker build --build-arg imagebase=quay.io/mongodb/mongodb-enterprise-operator:1.9.1-context \ --tag mongodb-enterprise-operator:1.9.1-ubuntu-1804 -
注意
ビルドコンテキストとしてローカルディレクトリを提供する代わりに、 cat myDockerfileの出力を読み取るには、 docker buildの末尾にハイフン( - )を含めます。
Tip
docker build の詳細については、Docker のドキュメントを参照してください。