重要
このセクションは、単一の Kubernetes クラスターの配置のみを対象としています。 MongoDB のマルチ Kubernetes クラスター配置については、概要を参照してください。
Kubernetes Operator 用 MongoDB Controllers は、Kubernetes API とツールを使用して、Kubernetes クラスター内で実行されている MongoDB クラスターを管理します。Kubernetes Operator は MongoDB Ops Manager と連携して動作します。このチュートリアルでは、Kubernetes 上に MongoDB Ops Manager を配置し、その後、Kubernetes 演算子 を使用して初めての MongoDB レプリカセットを配置して接続する方法を説明します。Kind を使用すると、クラスターをすばやくセットアップできます。詳細については、Kindを参照してください。
前提条件
このチュートリアルには次のものが必要です。
実行中の Kubernetes クラスター。
ローカル マシンにインストールされた Helm。
Docker Desktop で Kind を使用する場合は、Docker Desktop のリソース設定で、少なくとも 8 GB のメモリと 4 の CPU を割り当ててください。MongoDB Ops Manager には、アプリケーションに少なくとも 5 GB のメモリが必要です。アプリケーションデータベースと Kubernetes 演算子には、追加のリソースが必要です。
手順
MongoDB Helm Charts for Kubernetesリポジトリを Helm に追加します。
helm repo add mongodb https://mongodb.github.io/helm-charts
Kubernetes Operator 用のMongoDBドライバーのインストール
Helm とともにKubernetes Operator をインストールするには、リポジトリの手順を参照してください。
例
次のコマンドは、任意の --create-namespace オプションを使用して、mongodb名前空間にMongoDB Controls for Kubernetes Operator をインストールします。デフォルトでは 、 Kubernetes Operator は default名前空間を使用します。
helm install kubernetes-operator mongodb/mongodb-kubernetes --namespace mongodb --create-namespace
MongoDB Ops Manager 管理者認証情報シークレットを作成します。
MongoDB Ops Managerの初期アドミンユーザーの認証情報を含むシークレットを作成します。Kubernetes 演算子は、MongoDB Ops Manager リソースを配置する際に、このシークレットを使用して最初のアドミンユーザーを構成します。
プレースホルダーの値を好みの認証情報に置き換えて、次のコマンドを実行します。
kubectl create secret generic ops-manager-admin-secret \ --from-literal=Username="<admin-email>" \ --from-literal=Password="<admin-password>" \ --from-literal=FirstName="<first-name>" \ --from-literal=LastName="<last-name>"
注意
これらの認証情報は安全に保存してください。配置後に MongoDB Ops Manager UI にログインするには、これらの認証情報が必要です。
MongoDB Ops Managerリソースを配置します。
次の YAML ファイルをコピーして
ops-manager.yamlとして保存します。apiVersion: mongodb.com/v1 kind: MongoDBOpsManager metadata: name: ops-manager namespace: mongodb spec: replicas: 1 version: "8.0.0" adminCredentials: ops-manager-admin-secret externalConnectivity: type: NodePort configuration: mms.ignoreInitialUiSetup: "true" automation.versions.source: "mongodb" mms.fromEmailAddr: admin@example.com mms.replyToEmailAddr: admin@example.com mms.adminEmailAddr: admin@example.com mms.mail.transport: smtp mms.mail.hostname: localhost mms.mail.port: "25" backup: enabled: false applicationDatabase: topology: SingleCluster members: 3 version: "8.0.0" 詳細については、MongoDB Ops Manager リソース仕様を参照してください。
次のコマンドを実行します:
kubectl apply -f ops-manager.yaml
MongoDB Ops Manager リソースが実行状態になるまで待ちます。
Kubernetes 演算子は、まずアプリケーションデータベースのレプリカセットを配置し、次に MongoDB Ops Manager アプリケーションを起動します。このプロセスには数分かかる場合があります。
次のコマンドを実行して、リソースのステータスを追跡します。
kubectl get om -o yaml -w
出力に次のフェーズが表示されるまで待ちます。
status: applicationDatabase: phase: Running opsManager: phase: Running
両方のコンポーネントが Running に達したら、Ops Manager URL を取得します。
kubectl get om ops-manager -o jsonpath='{.status.opsManager.url}'
この URL を控えておいてください。後の手順で ConfigMap に必要になります。
Ops Manager 用の Kubernetes Operator を構成します。
MongoDB Ops Manager UI を使用して ConfigMap と Secret を生成するか、手動で作成することができます。
まず、Ops Manager サービス ポートをローカル マシンに転送して、ブラウザーで UI にアクセスできるようにします。
kubectl port-forward svc/ops-manager-svc-ext 8080:8080
次に、ブラウザで http://localhost:8080 を開き、管理シークレットで作成した認証情報を使用してログインします。
MongoDB Ops Manager UI を使用するには、次の手順で操作します。
[Create New API Keys] または [Use Existing API Keys] をクリックします。
フォームを完成します。詳細については、Kubernetes 演算子の認証情報の作成を参照してください。
[Generate Key and YAML] をクリックします。
または、次の手順で ConfigMap と Secret を手動で作成できます。
ConfigMap を作成して保存します。
MongoDB Ops Manager UI から ConfigMap を生成した場合は、生成された config-map.yaml ファイルをコピーして保存します。そうでない場合は、次のファイルを作成して保存します。data.baseUrl を status.opsManager.url からの MongoDB Ops Manager インスタンスの URL に設定します。
例:
apiVersion: v1 kind: ConfigMap metadata: name: my-project namespace: mongodb data: baseUrl: http://ops-manager-svc.mongodb.svc.cluster.local:8080 projectName: my-project orgId: <your-org-id>
<your-org-id> を MongoDB Ops Manager 組織 ID に置き換えます。この値は MongoDB Ops Manager UI URL: http://<ops-manager-url>/v2#/org/<orgId>/projects で確認できます。
詳しくは、パラメーターの説明を参照してください。
シークレットを作成して保存します。
Ops Manager UI から Secret を生成した場合は、生成された secret.yaml ファイルをコピーして保存します。そうでない場合は、Ops Manager 組織の API キーを含む シークレット を作成します。
例:
apiVersion: v1 kind: Secret metadata: name: organization-secret namespace: mongodb stringData: publicKey: <public_key> privateKey: <private_key>
プログラムによる API キーを作成するには、「Kubernetes Operator の認証情報の作成」を参照してください。
MongoDBレプリカセットリソースを配置します。
次のYAMLファイルをコピーして保存します。
apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: demo-mongodb-cluster-1 namespace: mongodb spec: members: 3 version: 8.0.0 type: ReplicaSet security: authentication: enabled: true modes: ["SCRAM"] opsManager: configMapRef: name: my-project credentials: organization-secret persistent: true podSpec: podTemplate: spec: containers: - name: mongodb-enterprise-database resources: limits: cpu: 2 memory: 1.5G requests: cpu: 1 memory: 1G persistence: single: storage: 10Gi 次のコマンドを実行します:
kubectl apply -f <replica-set-conf>.yaml
データベースユーザーのパスワードを使用してシークレットを作成します。
MongoDB データベースユーザーのパスワードを選択し、シークレットに保存します。このパスワードは、任意の値にできます。次のステップでデータベースユーザーを作成する際に、このシークレットを参照します。
パスワードはクリアテキストとして(stringDataを使用)、または Base64 エンコード値として(dataを使用)保存できます。
クリアテキスト パスワードの場合は、次のYAMLファイルを作成して保存します。
apiVersion: v1 kind: Secret metadata: name: mms-user-1-password # corresponds to user.spec.passwordSecretKeyRef.name type: Opaque stringData: password: <my-plain-text-password> # corresponds to user.spec.passwordSecretKeyRef.key
base64 でエンコードされたパスワードの場合は、次の YAML ファイルを作成して保存します。
apiVersion: v1 kind: Secret metadata: name: mms-user-1-password # corresponds to user.spec.passwordSecretKeyRef.name type: Opaque data: password: <base-64-encoded-password> # corresponds to user.spec.passwordSecretKeyRef.key
プレースホルダーを選択したパスワードに置き換えます。詳細については、「 SCRAM 認証を使用したデータベースユーザーの管理」を参照してください。
データベースユーザーを作成します。
次のMongoDB ユーザー リソース仕様ファイルをコピーして保存します。
apiVersion: mongodb.com/v1 kind: MongoDBUser metadata: name: mms-scram-user-1 spec: passwordSecretKeyRef: name: mms-user-1-password # Match to metadata.name of the User Secret key: password username: "mms-scram-user-1" db: "admin" # mongodbResourceRef: name: "demo-mongodb-cluster-1" # Match to MongoDB resource using authentication roles: - db: "admin" name: "clusterAdmin" - db: "admin" name: "userAdminAnyDatabase" - db: "admin" name: "readWrite" 次のコマンドを実行します:
kubectl apply -f <database-user-conf>.yaml
MongoDBレプリカセットに接続します。
MongoDB Ops Managerアプリケーションで次の手順を実行します。
左側のナビゲーションで [ Deployment ] をクリックします。
をクリックします接続する配置の 。
[Connect to this instance] をクリックします。
配置に接続するには、ターミナルで接続コマンドを実行します。