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

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

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

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

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

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

Kubernetes Operator のスコープを設定して、 Kubernetes Operator リソースで使用される名前空間空間とは異なる 1 つ以上の名前空間を使用することができます。この場合、 Kubernetes Operator は、指定された名前空間のサブセット内のMongoDB Ops Managerと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. 次のリソースを作成します。

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

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

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

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

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

次の例は、ClusterRoleClusterRoleBinding がクラスター内でどのように連携するかを示しています。

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

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

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

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

  3. 次の 3 つの名前空間で ClusterRoleBinding を作成します:mongodb 、 、ns1 ns2。このClusterRoleBindingは、ClusterRolemongodb名前空間の ServiceAccount にバインドします。clusterRoleBinding を使用すると、mongodb名前空間に配置されたKubernetes Operator が、ターゲット名前空間の clusterRole に記述されているリソース(つまり、mongodbns1ns2 にあるリソースにアクセスできるようになります。

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

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

重要

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

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

  1. MongoDB Enterprise Kubernetes Operator Githubリポジトリから、mongodb-enterprise.YAMLサンプル YAMLファイルを使用します。

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

    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 Kubernetes Operator Githubリポジトリの mongodb-enterprise-openshift.YAMLサンプルYAMLファイルを使用します。

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

    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 のスコープを設定すると、次のことが可能になります。

項目一覧