Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
Kubernetes Operator 用のMongoDBドライバー
/ /

Kubernetes Operator 配置のMongoDBドライバーのスコープの設定

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

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

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

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

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

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

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

Kubernetes Operator のスコープを設定して、 Kubernetes Operator リソースで使用される名前空間空間とは異なる 1 つ以上の名前空間を使用することができます。この場合、 Kubernetes Operator は、指定された名前空間のサブセット内の 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 mongodb-kubernetes-operator mongodb/mongodb-kubernetes \
--set operator.watchNamespace='namespace-to-watch' <...>
# Watch both namespace-a and namespace-b
helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \
--set operator.watchNamespace="namespace-a\,namespace-b"
# Operator with name `mongodb-kubernetes-operator-qa-envs` will
# watch ns-dev, ns-qa and ns-uat namespaces
helm install mongodb-kubernetes-operator-qa-envs mongodb/mongodb-kubernetes \
--set operator.watchNamespace="ns-dev\,ns-qa\,ns-uat"
# Operator with name `mongodb-kubernetes-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-kubernetes-operator-staging

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

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

    • 複数のリソースへのアクセスを持つ ClusterRole 。完全なリソース定義については、「 Operator-roles.YAML の例 」を参照してください。これは クラスタースコープのリソースです。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

重要

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

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

  1. Use the mongodb-kubernetes.yaml sample YAML file from the MongoDB Controllers for Kubernetes Operator GitHub repository.

  2. Set the spec.template.spec.containers.name.env.name:WATCH_NAMESPACE in mongodb-kubernetes.yaml to "*". You must include the double quotation marks (") around the asterisk (*) in the YAML file.

    WATCH_NAMESPACE: "*"
  3. In mongodb-kubernetes.yaml, change:

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

    から:

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

    - apiGroups:
    - ""
    resources:
    - namespaces
    verbs:
    - list
    - watch
  5. In mongodb-kubernetes.yaml, change:

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

    から:

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

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-kubernetes-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-kubernetes-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-kubernetes-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-kubernetes-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-kubernetes-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-kubernetes-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-kubernetes-appdb
    51 namespace: <namespace>
    52...
  7. ローカルKubernetesサービス アカウント の作成

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Use the mongodb-kubernetes-openshift.yaml sample YAML file from the MongoDB Controllers for Kubernetes Operator GitHub repository.

  2. Set the spec.template.spec.containers.name.env.name:WATCH_NAMESPACE in mongodb-kubernetes-openshift.yaml to "*". You must include the double quotation marks (") around the asterisk (*) in the YAML file.

    WATCH_NAMESPACE: "*"
  3. Create the corresponding roles for these accounts. In mongodb-kubernetes-openshift.yaml, change:

    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. In mongodb-kubernetes-openshift.yaml, change:

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

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-kubernetes-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-kubernetes-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-kubernetes-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-kubernetes-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-kubernetes-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-kubernetes-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-kubernetes-appdb
    51 namespace: <namespace>
    52...
  7. ローカルKubernetesサービス アカウント の作成

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

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

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

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

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

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

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

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

    1---
    2kind: ServiceAccount
    3apiVersion: v1
    4metadata:
    5 name: mongodb-kubernetes-appdb
    6 namespace: <namespace>
    7---
    8kind: ServiceAccount
    9apiVersion: v1
    10metadata:
    11 name: mongodb-kubernetes-database-pods
    12 namespace: <namespace>
    13---
    14kind: ServiceAccount
    15apiVersion: v1
    16metadata:
    17 name: mongodb-kubernetes-ops-manager
    18 namespace: <namespace>
    19---
    20kind: Role
    21apiVersion: rbac.authorization.k8s.io/v1
    22metadata:
    23 name: mongodb-kubernetes-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-kubernetes-appdb
    43 namespace: <namespace>
    44roleRef:
    45 apiGroup: rbac.authorization.k8s.io
    46 kind: Role
    47 name: mongodb-kubernetes-appdb
    48subjects:
    49 - kind: ServiceAccount
    50 name: mongodb-kubernetes-appdb
    51 namespace: <namespace>
    52...
  3. ローカルKubernetesサービス アカウント の作成

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

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

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

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

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

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

項目一覧