Menu Docs
Página inicial do Docs
/
Operador de Kubernetes do MongoDB Enterprise
/ /

Definir o escopo para a implantação do MongoDB Enterprise Kubernetes Operator

Nesta página

  • Escopos de implantação do operador Kubernetes
  • Próximos passos

Antes de instalar o Kubernetes Operator, você pode definir o escopo do sistema do Kubernetes Operator. Os escopos dependem dos namespaces nos quais você escolhe para implantar os recursos do Ops Manager e do MongoDB .

Você pode definir um destes escopos:

  • O operador usa o mesmo namespace único que os recursos (Padrão)

  • O operador usa um subconjunto de namespaces

  • O operador usa o escopo em todo o cluster

Você pode definir o escopo para o operador Kubernetes usar o mesmo namespace como recursos. Nesse caso, o Kubernetes Operador do observa MongoDB Ops Manager o e os MongoDB recursos nesse mesmo namespace.

Quando você instala o Operador Kubernetes, ele utiliza o namespace padrão.

Você pode definir o escopo do Operador Kubernetes para usar um ou mais namespaces que diferem do namespace usado pelos recursos do Kubernetes Operator. Neste caso, o Kubernetes Operador do observa MongoDB Ops Manager o e os MongoDB recursos em um subconjunto de namespaces que você especifica.

Para instalar as instâncias do Operador Kubernetes com esse escopo, use helm com o operador.watchNamespace Parâmetro.

Observar um subconjunto de namespaces é útil em sistemas em que uma única instância do Kubernetes Operator observa um tipo de recurso de cluster diferente. Por exemplo, você pode configurar o Operador Kubernetes para observar recursos do MongoDB em um subconjunto de namespaces e para monitorar recursos do MongoDBMultiCluster em outro subconjunto de namespaces. Para evitar condições de corrida durante a reconciliação de recursos, para cada tipo de recurso personalizado que você deseja que o Operador Kubernetes assista, certifique-se de definir o escopo para um subconjunto distinto de namespaces.

Siga as instruções de instalação relevantes para helm, mas especifique um ou mais namespaces no operador.watchNamespace parâmetro para o operador Kubernetes observar:

# 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

Ao instalar o Operador Kubernetes para observar recursos em um ou mais namespaces diferentes do namespace no qual o Operador Kubernetes está distribuído:

  1. Crie os seguintes recursos:

    • Um clusterRole com acesso a vários recursos. Para a definição completa do recurso, consulte o operator-roles.yaml exemplo. Este é um recurso com escopo de cluster.

    • Criar um ClusterRoleBinding para vincular ClusterRole com ServiceAccount. Esse clusterRoleBinding vinculará o clusterRole que você criou à ServiceAccount que o Kubernetes Operator está usando no namespace onde você o instalou.

  2. Incluir a ClusterRole e ClusterRoleBinding nos arquivos de configuração padrão que você aplica durante a instalação.

O exemplo a seguir ilustra como o ClusterRole e ClusterRoleBinding trabalhar juntos no cluster.

Suponha que você crie um ServiceAccount no namespace mongodb e depois instale o Kubernetes Operator nesse namespace. O Operador Kubernetes usa esta ServiceAccount.

Para definir o escopo do Operador Kubernetes para monitorar os namespaces ns1 e ns2:

  1. Obtenha privilégios de administrador do cluster.

  2. Usando esses privilégios, crie um ClusterRole em todo o cluster e sem namespace .

  3. Criar um ClusterRoleBinding em três namespaces: mongodb, ns1 e ns2. Este ClusterRoleBinding vinculará o ClusterRole para a ServiceAccount no mongodb namespace . O clusterRoleBinding permitirá ao Operador Kubernetes implantado no mongodb namespace acessar os recursos descritos no clusterRole do namespace de destino, ou seja, em mongodb, ns1 e ns2.

Consulte também operator.watchNamespace.

Você pode definir o escopo do Operador Kubernetes para o cluster Kubernetes. Neste caso, o Kubernetes Operador do observa MongoDB Ops Manager o e MongoDB os recursos do em todos os namespaces no Kubernetes cluster .

Importante

Você pode implantar apenas uma instância do Operador Kubernetes com um escopo de todo o cluster por cluster Kubernetes.

Para definir um escopo de todo o cluster para o Operador Kubernetes, siga as instruções para seu método de instalação preferido.

  1. Use o mongodb-enterprise.yaml amostra do arquivoYAML do repositório do MongoDB Enterprise Kubernetes Operator GitHub.

  2. Defina o spec.template.spec.containers.name.env.name:WATCH_NAMESPACE em mongodb-enterprise.yaml a "*". Você deve incluir as aspas duplas (") em torno do asterisco (*) no arquivo YAML .

    WATCH_NAMESPACE: "*"
  3. Em mongodb-enterprise.yaml, altere:

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

    para:

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: mongodb-enterprise-operator
  4. Adicione o seguinte código ao ClusterRole que você acabou de modificar:

    - apiGroups:
    - ""
    resources:
    - namespaces
    verbs:
    - list
    - watch
  5. Em mongodb-enterprise.yaml, altere:

    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

    para:

    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. No arquivo mongodb-enterprise.yaml , altere o valor <namespace> para o namespace em que você deseja que o operador Kubernetes implemente recursos e aplique o arquivo 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. Criar contas de serviço locais do Kubernetes :

    Para cada namespace, crie algumas ou todas as seguintes contas de serviço local do Kubernetes :

    • Se você deseja implantar uma instância MongoDB no namespace, utilize mongodb-enterprise-database-pods.

    • Se você deseja implantar o Ops Manager no namespace, use mongodb-enterprise-appdb e mongodb-enterprise-ops-manager.

    Copie e cole os exemplos aplicáveis e substitua o valor <namespace> pelo rótulo que identifica o 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>

Antes de implementar o Operador Kubernetes, configure os seguintes itens:

  1. Configure o operador Kubernetes para observar todos os namespaces:

    helm install enterprise-operator mongodb/enterprise-operator \
    --set operator.watchNamespace="*"
  2. Criar contas de serviço locais do Kubernetes :

    Para cada namespace, crie algumas ou todas as seguintes contas de serviço local do Kubernetes :

    • Se você deseja implantar uma instância MongoDB no namespace, utilize mongodb-enterprise-database-pods.

    • Se você deseja implantar o Ops Manager no namespace, use mongodb-enterprise-appdb e mongodb-enterprise-ops-manager.

    Copie e cole os exemplos aplicáveis e substitua o valor <namespace> pelo rótulo que identifica o namespace.

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

Antes de implementar o Operador Kubernetes, configure os seguintes itens:

  1. Use o mongodb-enterprise-openshift.yaml amostra de arquivo YAML do repositório do MongoDB Enterprise Kubernetes Operator GitHub.

  2. Defina o spec.template.spec.containers.name.env.name:WATCH_NAMESPACE em mongodb-enterprise-openshift.yaml a "*". Você deve incluir as aspas duplas (") em torno do asterisco (*) no arquivo YAML .

    WATCH_NAMESPACE: "*"
  3. Crie os roles correspondentes para estas contas. Em mongodb-enterprise-openshift.yaml, altere:

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

    para:

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: enterprise-operator
  4. Adicione o seguinte código ao ClusterRole que você acabou de modificar:

    - apiGroups:
    - ""
    resources:
    - namespaces
    verbs:
    - list
    - watch
  5. Em mongodb-enterprise-openshift.yaml, altere:

    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

    para:

    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. Crie o segredo somente no namespace onde você implantará o Operador Kubernetes. Se você implantar recursos do MongoDB em vários namespaces ou com um escopo que abranja todo o cluster, o Kubernetes Operator sincroniza o segredo em todos os namespaces assistidos. Para saber mais, consulte a configuração registry.imagePullSecrets nas configurações de instalação do Helm.

    No mongodb-enterprise.yaml arquivo , substitua <namespace> pelo namespace no qual você deseja instalar o Kubernetes Operator. Use oc ou a interface do usuário do OpenShift Container Platform para aplicar o arquivo YAML resultante.

    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. Criar contas de serviço locais do Kubernetes :

    Para cada namespace, crie algumas ou todas as seguintes contas de serviço local do Kubernetes :

    • Se você deseja implantar uma instância MongoDB no namespace, utilize mongodb-enterprise-database-pods.

    • Se você deseja implantar o Ops Manager no namespace, use mongodb-enterprise-appdb e mongodb-enterprise-ops-manager.

    Copie e cole os exemplos aplicáveis e substitua o valor <namespace> pelo rótulo que identifica o namespace.

Antes de implementar o Operador Kubernetes, configure os seguintes itens:

  1. Configure o operador Kubernetes para observar todos os namespaces:

    helm install enterprise-operator mongodb/enterprise-operator \
    --set operator.watchNamespace="*" \
  2. Crie o segredo somente no namespace onde você implantará o Operador Kubernetes. Se você implantar recursos do MongoDB em vários namespaces ou com um escopo que abranja todo o cluster, o Kubernetes Operator sincroniza o segredo em todos os namespaces assistidos. Para saber mais, consulte a configuração registry.imagePullSecrets nas configurações de instalação do Helm.

    No mongodb-enterprise.yaml arquivo , substitua <namespace> pelo namespace no qual você deseja instalar o Kubernetes Operator. Use oc ou a interface do usuário do OpenShift Container Platform para aplicar o arquivo YAML resultante.

    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. Criar contas de serviço locais do Kubernetes :

    Para cada namespace, crie algumas ou todas as seguintes contas de serviço local do Kubernetes :

    • Se você deseja implantar uma instância MongoDB no namespace, utilize mongodb-enterprise-database-pods.

    • Se você deseja implantar o Ops Manager no namespace, use mongodb-enterprise-appdb e mongodb-enterprise-ops-manager.

    Copie e cole os exemplos aplicáveis e substitua o valor <namespace> pelo rótulo que identifica o namespace.

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

Após configurar o escopo do MongoDB Enterprise Kubernetes Operator, você pode: