Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
/ / / /

Establecer el ámbito para los controladores de MongoDB en la implementación del operador Kubernetes

Antes de instalar el Operador de Kubernetes, puede establecer el alcance de la implementación del Operador de Kubernetes. Los alcances dependen de los namespaces en que elijas implementar Ops Manager y MongoDB recurso.

Puede establecer uno de estos ámbitos:

  • El operador utiliza el mismo namespace único que los recursos. (por defecto)

  • El Operador usa un subconjunto de namespaces

  • El operador utiliza el ámbito en todo el clúster

Puedes configurar el alcance del Operador de Kubernetes para que utilice el mismo namespace que el de los recursos. En este caso, el Operador Kubernetes supervisa Ops Manager y MongoDB recursos en ese mismo namespace.

Cuando tú instala el operador de Kubernetes, el cual utiliza el namespace por defecto.

Se puede establecer el alcance del operador de Kubernetes para que use uno o más namespaces que difieran del namespace utilizado por los recursos del operador de Kubernetes. En este caso, el Kubernetes operador supervisa Ops Manager y MongoDB recursos en un subconjunto de namespaces que tu especifiques.

Para instalar las instancias del Operador de Kubernetes en este alcance, utiliza helm con el operator.watchNamespace parámetro.

Observar un subconjunto de namespaces es útil en implementaciones donde una sola instancia de Kubernetes operador observa un tipo diferente de recurso en el clúster. Por ejemplo, puedes configurar el operador de Kubernetes para monitorear recursos MongoDB en un subconjunto de namespaces y monitorear recursos MongoDBMultiCluster en otro subconjunto de namespaces. Para evitar condiciones de carrera durante la reconciliación de recursos, para cada tipo de recurso personalizado que quieras que el Operador de Kubernetes observe, asegúrate de establecer el alcance en un subconjunto distinto de espacios de nombres.

Siga las instrucciones de instalación pertinentes para helm, pero especifique uno o más espacios de nombres en operador.watchNamespace parámetro para que el Operador de Kubernetes observe:

# 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-kubernetes-operator-staging mongodb/mongodb-kubernetes --set operator.watchNamespace="ns-staging\,ns-pre-prod"

Al instalar el Operador de Kubernetes para monitorear recursos en uno o más namespaces distintos al namespace en el que está implementado el Operador de Kubernetes:

  1. Crea los siguientes recursos:

    • Un ClusterRole con acceso a múltiples recursos. Para obtener la definición completa del recurso, consulte el ejemplo operator-roles.yaml. Este es un recurso con ámbito de clúster.

    • Cree un ClusterRoleBinding para vincular ClusterRole con ServiceAccount. Este clusterRoleBinding asociará el clusterRole que creaste con el ServiceAccount que el Kubernetes Operador está usando en el namespace donde lo instales.

  2. Incluya el ClusterRole y ClusterRoleBinding en los archivos de configuración por defecto que se aplican durante la instalación.

  3. Cree ServiceAccounts:locales de Kubernetes

    Para cada namespace, cree algunas o todas las siguientes ServiceAccounts de Kubernetes locales:

    • Si deseas implementar una instancia de MongoDB en el namespace, utiliza mongodb-kubernetes-database-pods.

    • Si deseas implementar Ops Manager en el namespace, utiliza mongodb-kubernetes-appdb y mongodb-kubernetes-ops-manager.

El siguiente ejemplo ilustra cómo el ClusterRole y el ClusterRoleBinding trabajan juntos en el clúster.

Supongamos que crea una ServiceAccount en el namespace mongodb y luego instala el Kubernetes Operator en este namespace. El Operador de Kubernetes utiliza esta cuenta de servicio.

Para configurar el ámbito del operador de Kubernetes para observar los namespaces ns1 y ns2:

  1. Obtén privilegios de clúster-admin.

  2. Usando estos privilegios, crea un ClusterRole a nivel de clúster, sin espacio de nombres.

  3. Cree un ClusterRoleBinding en tres namespaces: mongodb, ns1 y ns2. Este ClusterRoleBinding vinculará el ClusterRole a la ServiceAccount en el namespace mongodb. El clusterRoleBinding permitirá al Kubernetes Operator implementado en el namespace mongodb acceder a los recursos descritos en el clusterRole del namespace de destino, es decir, en mongodb, ns1 y ns2.

Consulta también operator.watchNamespace.

Puede establecer el alcance del Operador de Kubernetes al clúster de Kubernetes. En este caso, el Operador de Kubernetes monitorea Ops Manager y los recursos MongoDB en todos los namespaces en el clúster de Kubernetes.

Importante

Solo puedes implementar una sola instancia del Kubernetes Operator con un alcance a nivel de clúster por cada clúster de Kubernetes.

Para establecer un alcance a nivel de clúster para el operador de Kubernetes, sigue las instrucciones para tu método de instalación preferido.

  1. Utiliza la muestra mongodb-kubernetes.yaml El archivo YAML del controladores de MongoDB para el repositorio de GitHub del operador de Kubernetes.

  2. Establece el spec.template.spec.containers.name.env.name:WATCH_NAMESPACE en mongodb-kubernetes.yaml a "*". Debe incluir las comillas double (") alrededor del asterisco (*) en el archivo YAML.

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

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

    para:

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: mongodb-kubernetes-operator
  4. Agrega el siguiente código al ClusterRole que acabas de modificar:

    - 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

    para:

    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. En el archivo mongodb-kubernetes.yaml, cambie el valor de <namespace> al namespace donde desea que el Kubernetes Operator despliegue recursos y aplique el archivo 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. Crea cuentas de servicio locales de Kubernetes cuentas de servicio:

    Para cada namespace, cree algunas o todas las siguientes cuentas de servicio locales de Kubernetes:

    • Si deseas implementar una instancia de MongoDB en el namespace, utiliza mongodb-kubernetes-database-pods.

    • Si deseas implementar Ops Manager en el namespace, utiliza mongodb-kubernetes-appdb y mongodb-kubernetes-ops-manager.

    Copia y pega los ejemplos aplicables y reemplaza el valor <namespace> con la etiqueta que identifica el espacio de nombres.

    ---
    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>

Antes de implementar el operador de Kubernetes, configure los siguientes elementos:

  1. Configure el operador de Kubernetes para monitorizar todos los namespaces:

    helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \
    --set operator.watchNamespace="*"
  2. Crea cuentas de servicio locales de Kubernetes cuentas de servicio:

    Para cada namespace, cree algunas o todas las siguientes cuentas de servicio locales de Kubernetes:

    • Si deseas implementar una instancia de MongoDB en el namespace, utiliza mongodb-kubernetes-database-pods.

    • Si deseas implementar Ops Manager en el namespace, utiliza mongodb-kubernetes-appdb y mongodb-kubernetes-ops-manager.

    Copia y pega los ejemplos aplicables y reemplaza el valor <namespace> con la etiqueta que identifica el espacio de nombres.

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

Antes de implementar el operador de Kubernetes, configure los siguientes elementos:

  1. Utiliza el archivo de muestra mongodb-kubernetes-openshift.yaml YAML del Repositorio GitHub de MongoDB Controllers para Kubernetes Operator.

  2. Establezca el spec.template.spec.containers.name.env.name:WATCH_NAMESPACE en mongodb-kubernetes-openshift.yaml a "*". Debe incluir las comillas double (") alrededor del asterisco (*) en el archivo YAML.

    WATCH_NAMESPACE: "*"
  3. Cree los roles correspondientes para estas cuentas. En mongodb-kubernetes-openshift.yaml, cambiar:

    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. Agrega el siguiente código al ClusterRole que acabas de modificar:

    - apiGroups:
    - ""
    resources:
    - namespaces
    verbs:
    - list
    - watch
  5. En mongodb-kubernetes-openshift.yaml, cambie:

    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. Crea el secreto solo en el namespace donde se implementará el operador de Kubernetes. Si se implementan recursos de MongoDB en múltiples espacios de nombres o con un ámbito a nivel de clúster, el Operador de Kubernetes sincroniza el secreto en todos los espacios de nombres supervisados. Para aprender más, ver la configuración registry.imagePullSecrets en la configuración de instalación de Helm.

    En el archivo mongodb-kubernetes.yaml, reemplace <namespace> con el namespace en el que usted desee instalar el Kubernetes operador. Utiliza oc o la **Interfaz de Usuario** de OpenShift Plataforma de Contenedores para aplicar el archivo resultante 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. Crea cuentas de servicio locales de Kubernetes cuentas de servicio:

    Para cada namespace, cree algunas o todas las siguientes cuentas de servicio locales de Kubernetes:

    • Si deseas implementar una instancia de MongoDB en el namespace, utiliza mongodb-kubernetes-database-pods.

    • Si deseas implementar Ops Manager en el namespace, utiliza mongodb-kubernetes-appdb y mongodb-kubernetes-ops-manager.

    Copia y pega los ejemplos aplicables y reemplaza el valor <namespace> con la etiqueta que identifica el espacio de nombres.

Antes de implementar el operador de Kubernetes, configure los siguientes elementos:

  1. Configure el operador de Kubernetes para monitorizar todos los namespaces:

    helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \
    --set operator.watchNamespace="*" \
  2. Crea el secreto solo en el namespace donde se implementará el operador de Kubernetes. Si se implementan recursos de MongoDB en múltiples espacios de nombres o con un ámbito a nivel de clúster, el Operador de Kubernetes sincroniza el secreto en todos los espacios de nombres supervisados. Para aprender más, ver la configuración registry.imagePullSecrets en la configuración de instalación de Helm.

    En el archivo mongodb-kubernetes.yaml, reemplace <namespace> con el namespace en el que usted desee instalar el Kubernetes operador. Utiliza oc o la **Interfaz de Usuario** de OpenShift Plataforma de Contenedores para aplicar el archivo resultante 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. Crea cuentas de servicio locales de Kubernetes cuentas de servicio:

    Para cada namespace, cree algunas o todas las siguientes cuentas de servicio locales de Kubernetes:

    • Si deseas implementar una instancia de MongoDB en el namespace, utiliza mongodb-kubernetes-database-pods.

    • Si deseas implementar Ops Manager en el namespace, utiliza mongodb-kubernetes-appdb y mongodb-kubernetes-ops-manager.

    Copia y pega los ejemplos aplicables y reemplaza el valor <namespace> con la etiqueta que identifica el espacio de nombres.

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

Después de establecer el alcance para los MongoDB Controllers para Kubernetes operador, puedes:

En esta página