Docs Menu
Docs Home
/
MongoDB Enterprise Kubernetes 演算子
/ /

MongoDB Enterprise Kubernetes Operator 配置のスコープの設定

項目一覧

  • Kubernetes Operator の配置スコープ
  • 次のステップ

Kubernetes Operator をインストールする前に、Kubernetes Operator 配置のスコープを設定できます。 MongoDB Ops Manager範囲は、 とMongoDB {0 リソースの配置を選択した名前空間によって異なります。

次のいずれかのスコープを設定できます。

  • 演算子はリソースと同じ単一の名前空間を使用する (デフォルト)

  • 演算子は名前空間のサブセットを使用します

  • 演算子はクラスター全体のスコープを使用します

Kubernetes Operator のスコープを設定して、リソースと同じ名前空間 を使用できます。この場合、 KubernetesKubernetes OperatorMongoDB Ops ManagerMongoDB は、同じ名前空間内のMongoDB Ops Managerと リソースを監視します。

Kubernetes Operator をインストールすると、デフォルトの名前空間が使用されます。

1 つ以上の 名前空間 を使用するように Kubernetes Operator のスコープを設定できます Kubernetes Operator リソースによって使用される名前空間とは異なる。KubernetesMongoDB Ops Managerこの場合、 Operator はMongoDB 名前空間 のサブセットで と リソースを監視します を含む。

このスコープで Kubernetes Operator インスタンスをインストールするには、オペレーター.watchNamespace とともにhelmを使用します。 許可されます。

名前空間のサブセットを監視すると、単一の Kubernetes Operator インスタンスが異なるクラスター リソース タイプを監視する配置に役立ちます。 たとえば、Kubernetes Operator を構成して、名前空間の 1 つのサブセット内のMongoDBリソースを監視し、名前空間の別のサブセット内のMongoDBMultiClusterリソースを監視するようにできます。 リソース調整中に競合状態を回避するには、Kubernetes Operator で監視するカスタム リソース タイプごとに、スコープを名前空間の個別のサブセットに設定していることを確認してください。

helmの関連するインストール手順に従いますが、オペレーター.watchNamespace に 1 つ以上の名前空間を指定します。 Kubernetes Operator が監視するパラメーター。

# Watch one namespace
helm install enterprise-operator mongodb/enterprise-operator \
--set operator.watchNamespace='namespace-to-watch' <...>
# Watch both namespace-a and namespace-b
helm install enterprise-operator mongodb/enterprise-operator \
--set operator.watchNamespace="namespace-a\,namespace-b"
# Operator with name `mongodb-enterprise-operator-qa-envs` will
# watch ns-dev, ns-qa and ns-uat namespaces
helm install mongodb-enterprise-operator-qa-envs mongodb/enterprise-operator \
--set operator.watchNamespace="ns-dev\,ns-qa\,ns-uat"
# Operator with name `mongodb-enterprise-operator-staging` will
# watch ns-staging and ns-pre-prod
helm install mongodb-operator helm-chart --set operator.watchNamespace="ns-staging\,ns-pre-prod" mongodb-enterprise-operator-staging

Kubernetes Operator をインストールして、Kubernetes Operator が配置されている名前空間以外の 1 つ以上の名前空間のリソースを監視する場合、以下のようにします。

  1. 次のリソースを作成します。

    • ClusterRole 複数のリソースにアクセスできるリソースの完全な定義については、「 オペレーターロール.YAML 」を参照してください。 例を示します。これはクラスタースコープのリソースです。

    • ClusterRoleBinding の作成 ClusterRole をリンクします と ServiceAccount。このclusterRoleBindingは、Kubernetes Operator がインストールされている名前空間で使用している ServiceAccount を使用して作成したclusterRoleをバインドします。

  2. ClusterRole を 含める および ClusterRoleBinding インストール中に適用するデフォルトの構成ファイル。

  3. ローカルKubernetes ServiceAccounts を作成します。

    各名前空間に対して、次のローカルKubernetes ServiceAccount の一部またはすべてを作成します。

    • 名前空間に MongoDB インスタンスを配置する場合は、 mongodb-enterprise-database-podsを使用します。

    • 名前空間にMongoDB Ops Managerを配置する場合は、mongodb-enterprise-appdbmongodb-enterprise-ops-manager を使用します。

次の例は、 ClusterRole が および ClusterRoleBinding クラスターで連携します。

mongodb名前空間に ServiceAccount を作成し、この名前空間に Kubernetes Operator をインストールするとします。 Kubernetes Operator はこの ServiceAccount を使用します。

名前空間ns1ns2を監視するように Kubernetes Operator のスコープを設定するには次の手順に従います。

  1. クラスター管理者特権を取得する。

  2. これらの特権を使用して、クラスター全体で名前空間以外の ClusterRole を作成します 。

  3. ClusterRoleBinding の作成 mongodbns1ns2( 、 、 の 3 つの名前空間に含まれます。この ClusterRoleBinding ClusterRole をバインドします 名前空間の ServiceAccountmongodb に渡す追加オプション。clusterRoleBindingを使用すると、 mongodb名前空間に配置された Kubernetes Operator が、ターゲット名前空間のclusterRoleに記述されているリソース(つまりmongodbns1ns2にアクセスできるようになります。

Operator.watchNamespace も参照してください。

Kubernetes Operator のスコープを Kubernetes クラスターに設定できます。 KubernetesMongoDB Ops Managerこの場合、 OperatorMongoDB はすべての 名前空間 で とKubernetes リソースを監視します。 ( クラスター内)。

重要

Kubernetes クラスターごとに、クラスター全体のスコープを持つ Kubernetes Operator のインスタンスは 1 つだけ配置できます。

Kubernetes Operator のクラスター全体のスコープを設定するには、ご希望のインストール メソッドの手順に従います。

  1. mongodb-enterprise.YAML MongoDBEnterprise Kubernetes OperatorGithubリポジトリ からのサンプル YAML ファイル。

  2. spec.template.spec.containers.name.env.name:WATCH_NAMESPACEmongodb-enterprise.YAML で を設定する"*" から まで。YAML doubleファイル内のアスタリスク(" )の前後に* 引用符( )を含める必要があります。

    WATCH_NAMESPACE: "*"
  3. mongodb-enterprise.YAML 内 、変更:

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: mongodb-enterprise-operator

    から:

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: mongodb-enterprise-operator
  4. 先ほど変更したClusterRoleに次のコードを追加します。

    - apiGroups:
    - ""
    resources:
    - namespaces
    verbs:
    - list
    - watch
  5. mongodb-enterprise.YAML 内 、変更:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: mongodb-enterprise-operator
    namespace: mongodb
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: Role
    name: mongodb-enterprise-operator
    subjects:
    - kind: ServiceAccount
    name: mongodb-enterprise-operator
    namespace: mongodb

    から:

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: mongodb-enterprise-operator
    namespace: mongodb
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: mongodb-enterprise-operator
    subjects:
    - kind: ServiceAccount
    name: mongodb-enterprise-operator
    namespace: mongodb
  6. mongodb-enterprise.yamlファイルで、 <namespace>の値を、Kubernetes Operator でリソースを配置してYAMLファイルを適用する名前空間に変更します。

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-enterprise-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-enterprise-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-enterprise-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-enterprise-appdb
    24 namespace: <namespace>
    25rules:
    26 - apiGroups:
    27 - ""
    28 resources:
    29 - secrets
    30 verbs:
    31 - get
    32 - apiGroups:
    33 - ""
    34 resources:
    35 - pods
    36 verbs:
    37 - patch
    38---
    39kind: RoleBinding
    40apiVersion: rbac.authorization.k8s.io/v1
    41metadata:
    42 name: mongodb-enterprise-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-enterprise-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-enterprise-appdb
    51 namespace: <namespace>
    52...
  7. ローカル Kubernetes サービス アカウント の作成 :

    各名前空間に対して、次のローカル Kubernetes サービス アカウント の一部またはすべてを作成します :

    • 名前空間に MongoDB インスタンスを配置する場合は、 mongodb-enterprise-database-podsを使用します。

    • 名前空間にMongoDB Ops Managerを配置する場合は、mongodb-enterprise-appdbmongodb-enterprise-ops-manager を使用します。

    該当する例をコピーして貼り付け、 <namespace>値を名前空間を識別するラベルに置き換えます。

    ---
    kind: ServiceAccount
    apiVersion: v1
    metadata:
    name: mongodb-enterprise-database-pods
    namespace: <namespace>
    ---
    kind: ServiceAccount
    apiVersion: v1
    metadata:
    name: mongodb-enterprise-appdb
    namespace: <namespace>
    ---
    kind: ServiceAccount
    apiVersion: v1
    metadata:
    name: mongodb-enterprise-ops-manager
    namespace: <namespace>

Kubernetes Operator を配置する前に、次の項目を構成します。

  1. すべての名前空間を監視するように Kubernetes 演算子を構成します。

    helm install enterprise-operator mongodb/enterprise-operator \
    --set operator.watchNamespace="*"
  2. ローカル Kubernetes サービス アカウント の作成 :

    各名前空間に対して、次のローカル Kubernetes サービス アカウント の一部またはすべてを作成します :

    • 名前空間に MongoDB インスタンスを配置する場合は、 mongodb-enterprise-database-podsを使用します。

    • 名前空間にMongoDB Ops Managerを配置する場合は、mongodb-enterprise-appdbmongodb-enterprise-ops-manager を使用します。

    該当する例をコピーして貼り付け、 <namespace>値を名前空間を識別するラベルに置き換えます。

    helm template mongodb/enterprise-operator \
    --set operator.namespace=<metadata.namespace> \
    --show-only templates/database-roles.yaml | kubectl apply -f -

Kubernetes Operator を配置する前に、次の項目を構成します。

  1. mongodb-enterprise-openshift.YAMLMongoDBEnterprise Kubernetes OperatorGithub リポジトリ からのサンプル YAML ファイル。

  2. mongodb-enterprise-openshift.YAML で を設定する からspec.template.spec.containers.name.env.name:WATCH_NAMESPACE"*" まで。YAML doubleファイル内のアスタリスク(" )の前後に* 引用符( )を含める必要があります。

    WATCH_NAMESPACE: "*"
  3. これらのアカウントに対応するロールを作成します。 mongodb-enterprise-openshift.YAML 内 、 の変更。

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: enterprise-operator

    から:

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: enterprise-operator
  4. 先ほど変更したClusterRoleに次のコードを追加します。

    - apiGroups:
    - ""
    resources:
    - namespaces
    verbs:
    - list
    - watch
  5. mongodb-enterprise-openshift.YAML 内 、 の変更。

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: enterprise-operator
    namespace: mongodb
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: Role
    name: enterprise-operator
    subjects:
    - kind: ServiceAccount
    name: enterprise-operator
    namespace: mongodb

    から:

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: enterprise-operator
    namespace: mongodb
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: enterprise-operator
    subjects:
    - kind: ServiceAccount
    name: enterprise-operator
    namespace: mongodb
  6. Kubernetes Operator を配置する名前空間にのみシークレットを作成します。 MongoDB リソースを複数の名前空間またはクラスター全体の スコープで配置すると、Kubernetes Operator は監視対象のすべての名前空間にわたってシークレットを同期します。 詳しくは、 Helm インストール設定registry.imagePullSecrets設定を参照してください。

    mongodb-enterprise.yamlファイルで、 <namespace>を Kubernetes Operator をインストールする名前空間に置き換えます。 OC を使用する または OpenShift Container Platform UI を使用して、結果の YAML ファイルを適用します。

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-enterprise-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-enterprise-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-enterprise-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-enterprise-appdb
    24 namespace: <namespace>
    25rules:
    26 - apiGroups:
    27 - ""
    28 resources:
    29 - secrets
    30 verbs:
    31 - get
    32 - apiGroups:
    33 - ""
    34 resources:
    35 - pods
    36 verbs:
    37 - patch
    38---
    39kind: RoleBinding
    40apiVersion: rbac.authorization.k8s.io/v1
    41metadata:
    42 name: mongodb-enterprise-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-enterprise-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-enterprise-appdb
    51 namespace: <namespace>
    52...
  7. ローカル Kubernetes サービス アカウント の作成 :

    各名前空間に対して、次のローカル Kubernetes サービス アカウント の一部またはすべてを作成します :

    • 名前空間に MongoDB インスタンスを配置する場合は、 mongodb-enterprise-database-podsを使用します。

    • 名前空間にMongoDB Ops Managerを配置する場合は、mongodb-enterprise-appdbmongodb-enterprise-ops-manager を使用します。

    該当する例をコピーして貼り付け、 <namespace>値を名前空間を識別するラベルに置き換えます。

Kubernetes Operator を配置する前に、次の項目を構成します。

  1. すべての名前空間を監視するように Kubernetes 演算子を構成します。

    helm install enterprise-operator mongodb/enterprise-operator \
    --set operator.watchNamespace="*" \
  2. Kubernetes Operator を配置する名前空間にのみシークレットを作成します。 MongoDB リソースを複数の名前空間またはクラスター全体の スコープで配置すると、Kubernetes Operator は監視対象のすべての名前空間にわたってシークレットを同期します。 詳しくは、 Helm インストール設定registry.imagePullSecrets設定を参照してください。

    mongodb-enterprise.yamlファイルで、 <namespace>を Kubernetes Operator をインストールする名前空間に置き換えます。 OC を使用する または OpenShift Container Platform UI を使用して、結果の YAML ファイルを適用します。

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-enterprise-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-enterprise-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-enterprise-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-enterprise-appdb
    24 namespace: <namespace>
    25rules:
    26 - apiGroups:
    27 - ""
    28 resources:
    29 - secrets
    30 verbs:
    31 - get
    32 - apiGroups:
    33 - ""
    34 resources:
    35 - pods
    36 verbs:
    37 - patch
    38---
    39kind: RoleBinding
    40apiVersion: rbac.authorization.k8s.io/v1
    41metadata:
    42 name: mongodb-enterprise-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-enterprise-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-enterprise-appdb
    51 namespace: <namespace>
    52...
  3. ローカル Kubernetes サービス アカウント の作成 :

    各名前空間に対して、次のローカル Kubernetes サービス アカウント の一部またはすべてを作成します :

    • 名前空間に MongoDB インスタンスを配置する場合は、 mongodb-enterprise-database-podsを使用します。

    • 名前空間にMongoDB Ops Managerを配置する場合は、mongodb-enterprise-appdbmongodb-enterprise-ops-manager を使用します。

    該当する例をコピーして貼り付け、 <namespace>値を名前空間を識別するラベルに置き換えます。

    helm template mongodb/enterprise-operator \
    --set operator.namespace=<metadata.namespace> \
    --show-only templates/database-roles.yaml | oc apply -f -

MongoDB Enterprise Kubernetes Operator のスコープを設定すると、次のことが可能になります。