O Ops Manager é o plano de controle auto-hospedado para sistemas MongoDB Enterprise . Ao executá-lo no Kubernetes, você o define como um recurso personalizado MongoDBOpsManager e o Kubernetes Operator lida com o ciclo de vida dos servidores de aplicação do Ops Manager, do aplicativo de banco de dados de apoio e, opcionalmente, de toda a infraestrutura de backup. Acertar a configuração desse recurso é fundamental: todo recurso de banco de dados do MongoDB que você implantará posteriormente depende de uma instância saudável e bem conectada do Ops Manager.
Este guia orienta você pelas decisões de design e áreas conceitual do recurso personalizado do Ops Manager, explicando o que cada bloco controla, quando necessário e como as peças se encaixam. O objetivo é prepará-lo para escrever um manifesto que reflita os requisitos da sua organização desde o primeiro dia e fornecer um modelo manual para iterar esse manifesto à medida que esses requisitos mudam.
Para obter a especificação completa de campo por campo, consulte a Especificação de recursos do Ops Manager.
Credenciais de administrador e configuração inicial
Antes que o aplicação Ops Manager possa ser iniciado, ele precisa de uma conta inicial de administrador. Você fornece estas credenciais através de um segredo Kubernetes referenciado por spec.adminCredentials. O segredo deve conter quatro chaves: Username (um endereço de e-mail), Password, FirstName e LastName. O Operador Kubernetes utiliza estas informações para inicializar a conta do primeiro Proprietário Global quando o pod do Ops Manager é inicializado pela primeira vez:
kubectl create secret generic ops-manager-admin-secret \ --from-literal=Username="admin@example.com" \ --from-literal=Password="<secure-password>" \ --from-literal=FirstName="Admin" \ --from-literal=LastName="User"
Depois que o Ops Manager estiver em execução, você poderá criar usuários adicionais e chaves de API por meio da interface do usuário ou da API do Ops Manager. O segredo do administrador inicial é usado somente durante a configuração inicial, mas o Kubernetes Operator faz referência a ele para reconciliação, portanto, ele deve permanecer no cluster.
O campo spec.version determina qual versão do Ops Manager o Kubernetes Operator implementa. Fixe isso em uma versão X.Y.Z específica em vez de deixá-la flutuar. Quando estiver pronto para atualizar, atualize este campo e permita que o Kubernetes Operator execute uma atualização contínua, conforme mostrado no exemplo a seguir :
apiVersion: mongodb.com/v1 kind: MongoDBOpsManager metadata: name: ops-manager spec: replicas: 1 version: "8.0.0" adminCredentials: ops-manager-admin-secret
Para obter detalhes sobre cada campo obrigatório, consulte as configurações necessárias na referência de especificação.
Dimensionamento e topologia para o recurso Ops Manager
O campo spec.replicas controla quantas instâncias do aplicação Ops Manager são executadas em paralelo atrás de um serviço compartilhado. Uma única réplica é suficiente para desenvolvimento e avaliação, mas os ambientes de produção devem executar pelo menos duas réplicas atrás de um balanceador de carga para sobreviver a reinicializações de Pods e falhas de nós sem tempo de inatividade. Não há diferença funcional entre as réplicas; todos eles são servidores de aplicação sem estado apoiados pelo mesmo aplicativo de banco de dados.
Para organizações que precisam de redundância geográfica ou alta disponibilidade entre regiões, o Kubernetes Operator permite uma topologia MultiCluster para o próprio Ops Manager. Nesse modo, defina spec.topology: MultiCluster e defina um clusterSpecList que distribui instâncias do Ops Manager entre clusters nomeados do Kubernetes, conforme mostrado no exemplo a seguir:
spec: topology: MultiCluster clusterSpecList: - clusterName: "cluster-us-east" members: 1 - clusterName: "cluster-eu-west" members: 1
Ao usar a MultiCluster topologia, o spec.replicas campo é ignorado; as contagens de membros são extraídas do clusterSpecList . As implantações do Ops Manager em vários clusters introduzem requisitos de rede entre clusters, portanto, revise Implantar recursos do Ops Manager em vários clusters do Kubernetes antes de adotar esse modelo.
Importante
Depois que um recurso do Ops Manager é criado com topologia SingleCluster, ele não pode ser convertido em MultiCluster no local. Planeje sua topologia antes da implantação inicial.
Propriedades de configuração do aplicativo
O Ops Manager tem um extenso conjunto de propriedades de configuração do lado do servidor, que vão desde configurações de e-mail a sinalizadores de recursos e fontes de download binárias. Em vez de traduzir cada um deles em um campo CRD de primeira classe, o Kubernetes Operator fornece o bloco spec.configuration como pass-through: você define pares de chave-valor que são mapeados diretamente para as propriedades do sistema Ops Manager.
As propriedades mais comuns a serem definidas no momento da implementação são a configuração de e-mail, para que o Ops Manager possa enviar alertas e convites, e os padrões de segurança, conforme mostrado no exemplo a seguir:
spec: configuration: mms.fromEmailAddr: "ops-manager@example.com" mms.replyToEmailAddr: "ops-manager@example.com" mms.adminEmailAddr: "admin@example.com" mms.mail.hostname: "smtp.example.com" mms.mail.port: "587" mms.mail.ssl: "true" mms.mail.transport: "smtp" mms.ignoreInitialUiSetup: "true"
A definição de mms.ignoreInitialUiSetup como "true" ignora o assistente de configuração interativo na primeira inicialização, que é essencial para sistemas totalmente automatizados.
Outras propriedades úteis incluem o seguinte:
mms.security.allowCORS— controla se a UI aceita solicitações de origem cruzada.automation.versions.source— defina como"remote"(padrão),"local"ou"hybrid"para controlar como os binários do MongoDB são baixados. Consulte Modo local e remoto abaixo.mms.featureFlag.automation.verifyDownloads— quando definido como"enabled", o agente exige assinaturas criptográficas para todos os binários do MongoDB .
Para o catálogo completo de propriedades, consulte Definições de Configuração do Ops Manager e na referência spec.configuration de especificação.
Protegendo conexões com TLS
A execução do Ops Manager por HTTPS é altamente recomendada para qualquer ambiente além do desenvolvimento local. Sem ele, credenciais de administração, chaves de API e dados de monitoramento atravessam a rede em texto não criptografado.
Habilitar o HTTPS requer o seguinte:
Um certificado TLS para o próprio aplicação Ops Manager.
Um certificado TLS para o Banco de Dados do Aplicativo.
Cada certificado é armazenado em um segredo cujo nome segue o padrão <certsSecretPrefix>-<metadata.name>-cert (para o aplicação) ou <certsSecretPrefix>-<metadata.name>-db-cert (para o aplicativo de banco de dados).
O certsSecretPrefix é como o Operador Kubernetes une estas convenções de nomenclatura. Se você definir spec.security.certsSecretPrefix como "om-prod" e seu recurso for denominado ops-manager, o Operador do Kubernetes espera segredos denominados om-prod-ops-manager-cert e (para o Banco de Dados de Aplicativo) appdb-prod-ops-manager-db-cert, como mostrado no exemplo a seguir:
Create the Ops Manager TLS certificate secret kubectl create secret tls om-prod-ops-manager-cert \ --cert=om-tls.crt \ --key=om-tls.key Create the Application Database TLS certificate secret kubectl create secret tls appdb-prod-ops-manager-db-cert \ --cert=appdb-tls.crt \ --key=appdb-tls.key
Se seus certificados forem assinados por uma Autoridade de Certificação personalizada, você também deverá criar ConfigMaps contendo os certificados CA. O certificado Ops Manager CA deve ser nomeado mms-ca.crt dentro do ConfigMap. Além disso, esse arquivo da CA deve incluir a sequência de certificados para downloads.mongodb.com para que o Backup Daemon possa fazer download de binários do MongoDB :
spec: security: certsSecretPrefix: "om-prod" tls: ca: "om-ca-configmap" applicationDatabase: security: certsSecretPrefix: "appdb-prod" tls: ca: "appdb-ca-configmap"
Para obter procedimentos passo a passo de implantação de HTTPS, incluindo os openssl comandos para montar a cadeia de CA, consulte Implantar um recurso do Ops Manager. Para automação de renovação de certificado, consulte Configurar uma integração cert-manager.
Conectividade externa
Fora da caixa, o Ops Manager só pode ser acessado dentro da rede interna do cluster Kubernetes. Para que administradores e agentes de monitoramento em execução fora do cluster acessem a interface do usuário e a API do Ops Manager, é necessário configurar a conectividade externa.
O bloco spec.externalConnectivity instrui o Operador Kubernetes a criar um Serviço Kubernetes do tipo especificado. É altamente recomendável usar LoadBalancer quando seu provedor de nuvem oferecer suporte a ele, pois ele provisiona automaticamente um endpoint externo estável. NodePort é um fallback para clusters locais ou desencapados, como mostrado no exemplo a seguir:
spec: externalConnectivity: type: LoadBalancer
Você pode adicionar anotações específicas da nuvem para influenciar o comportamento do balanceador de carga. Por exemplo, para usar um balanceador de carga de rede da AWS em uma sub-rede interna:
spec: externalConnectivity: type: LoadBalancer annotations: service.beta.kubernetes.io/aws-load-balancer-type: "nlb" service.beta.kubernetes.io/aws-load-balancer-internal: "true"
Se o endpoint externo tiver um nome de domínio personalizado (por exemplo, https://opsmanager.example.com), defina spec.opsManagerURL para que o Kubernetes Operator e seus agentes usem o endereço correto ao se comunicar com o Ops Manager:
spec: opsManagerURL: "https://opsmanager.example.com:8443" externalConnectivity: type: LoadBalancer
Para o conjunto completo de campos de conectividade externa, consulte na referência de spec.externalConnectivity especificação.
Banco de dados de aplicativos
O banco de dados de aplicativos é um conjunto de réplicas do MongoDB que armazena todo o estado interno do Ops Manager: configurações de projeto , contas de usuário, definições de alerta e muito mais. Ele está fortemente vinculado aos servidores de aplicação do Ops Manager e deve estar saudável para que o Ops Manager funcione. O operador gerencia o aplicativo de banco de dados como parte do mesmo recurso personalizado, o que significa que um único manifesto YAML controla o aplicação e seu banco de dados de apoio.
Versão e membros
Você deve especificar a versão do banco de dados do aplicativo e o tamanho do conjunto de réplicas. A versão utiliza o formato X.Y.Z-ubi8 para edição Enterprise. O sufixo -ubi8 garante que o Operador Kubernetes use a imagem de container baseada em UBI. Três membros é o mínimo padrão para um conjunto de réplicas de nível de produção:
spec: applicationDatabase: members: 3 version: "8.0.0-ubi8"
Compatibilidade de recursos durante atualizações
Ao atualizar o Banco de Dados do Aplicativo, defina o featureCompatibilityVersion para sua versão atualmente implantada para criar um ponto de rollback seguro. Depois de confirmar a estabilidade na nova versão binária, aumente o FCV em uma alteração subsequente:
spec: applicationDatabase: version: "8.0.0-ubi8" featureCompatibilityVersion: "7.0"
Autenticação e senhas
Você pode fornecer uma senha personalizada para o usuário do banco de dados do aplicativo por meio de uma referência secreta do Kubernetes. Isso é opcional; se omitido, o operador gerencia a senha automaticamente:
spec: applicationDatabase: passwordSecretKeyRef: name: appdb-user-secret key: password
Armazenamento e recursos
O banco de dados de aplicativos tem seu próprio armazenamento e especificação de pod. O dimensionamento adequado depende de quantos projetos e implementações o Ops Manager gerencia. A reivindicação de armazenamento padrão para o Ops Manager é 16Gi. Para uma implantação pequena a média, 50-100 GiB de armazenamento rápido é um ponto de partida razoável. Para ambientes maiores, considere separar dados e volumes de diário :
spec: applicationDatabase: members: 3 version: "8.0.0-ubi8" podSpec: cpu: "2" memory: "4Gi" persistence: multiple: data: storage: "100Gi" storageClass: "fast-ssd" journal: storage: "30Gi" storageClass: "fast-ssd" logs: storage: "10Gi" storageClass: "standard"
Banco de dados de aplicativos multicluster
O banco de dados de aplicativos também pode abranger vários clusters Kubernetes para resiliência. Configure spec.applicationDatabase.topology para MultiCluster e defina quantos membros executam em cada cluster:
spec: applicationDatabase: topology: MultiCluster version: "8.0.0-ubi8" clusterSpecList: - clusterName: "cluster-1" members: 2 - clusterName: "cluster-2" members: 2 - clusterName: "cluster-3" members: 1
Ao usar a topologia MultiCluster, o campo members no nível do banco de dados do aplicativo é ignorado; a contagem de membros de cada cluster vem de sua entrada clusterSpecList.
Para todas as configurações do Banco de Dados do Aplicativo, consulte a referência de especificação spec.applicationDatabaseem.
Infraestrutura de backup
O Ops Manager fornece backup contínuo para as implementações do MongoDB que ele gerencia. Ao contrário do spec.backup.mode sinalizador por implantação em um MongoDB CR, as configurações de backup no recurso Ops Manager definem a infraestrutura que armazena os dados de backup: bancos de dados principais, armazenamentos de oplog e armazenamentos de snapshots. Sem essa infraestrutura em vigor, a ativação do backup em recursos individuais do MongoDB falhará.
Habilitando backup
Defina spec.backup.enabled como true para ativar o subsistema de backup. Isso por si só não é suficiente; você também deve configurar pelo menos um armazenamento de oplog e um armazenamento de snapshots:
spec: backup: enabled: true
Head Database
O banco de dados principal armazena metadados de backup e estado do tarefa . Aloque armazenamento suficiente para acomodar a área de metadados de todos os sistemas que estão sendo armazenados em backup. Para a maioria dos ambientes, de 30a100 GiB é adequado:
spec: backup: enabled: true headDB: storage: "50Gi" storageClass: "fast-ssd"
Armazenamentos de oplog
Os armazenamentos de oplog capturam o oplog do MongoDB , o que permite a recuperação de ponto no tempo. Cada armazenamento de oplog é apoiado por uma implantação separada do MongoDB (que você cria como um MongoDB CR normal). Faça referência a esse sistema pelo nome:
spec: backup: enabled: true opLogStores: - name: oplog1 mongodbResourceRef: name: oplog-db mongodbUserRef: name: oplog-user assignmentLabels: - "production"
Os armazenamentos de oplog suportados por S3estão disponíveis para organizações que preferem o armazenamento de objeto :
spec: backup: s3OpLogStores: - name: s3-oplog-store s3SecretRef: name: s3-credentials pathStyleAccessEnabled: true s3BucketEndpoint: "s3.us-east-1.amazonaws.com" s3BucketName: "oplog-bucket"
Lojas de instantâneos
Os armazenamentos de snapshots contêm snapshots periódicos de estado completo. Você pode usar blockstores suportados MongoDB ou armazenamentos suportados por S3. S3 é frequentemente preferido por custo e escalabilidade:
spec: backup: enabled: true s3Stores: - name: s3-snapshot-store mongodbResourceRef: name: s3-metadata-db mongodbUserRef: name: s3-store-user s3SecretRef: name: s3-credentials pathStyleAccessEnabled: true s3BucketEndpoint: "s3.us-east-1.amazonaws.com" s3BucketName: "snapshot-bucket" assignmentLabels: - "production"
Os blockstores apoiados MongoDB seguem o mesmo padrão sem os campos S3:
spec: backup: blockStores: - name: blockstore1 mongodbResourceRef: name: blockstore-db mongodbUserRef: name: blockstore-user
Criptografia KMIP para backups
Se seus requisitos de compliance exigirem criptografia dos dados de backup em repouso, você poderá fazer a integração com um servidor de gerenciamento de chaves compatível com KMIP:
spec: backup: enabled: true encryption: kmip: server: url: "kmip.example.com:5696" ca: "kmip-ca-configmap" client: clientCertificatePrefix: "kmip-client"
Os rótulos de atribuição permitem rotear sistemas específicos do MongoDB para armazenamentos específicos, oferecendo um controle refinado sobre o destino dos dados de backup.
Para a especificação de backup completa, consulte spec.backup na referência de especificação. Para obter procedimentos passo a passo, consulte Configurar o armazenamento de backup do sistema de arquivos com o Kubernetes Operator e Configurar o KMIP Backup Encryption para o Ops Manager.
Alocação de recursos e ajuste da JVM
O Ops Manager é um aplicação Java , e seu consumo de recursos depende do número de sistemas monitorados, do volume de dados de métricas e da habilitação do backup. O operador distribui o Ops Manager como um StatefulSet, e você controla as especificações do pod por meio de spec.statefulSet.
No mínimo, defina solicitações e limites de CPU e memória. O MongoDB recomenda pelo menos 4 CPU e 8 GiB de memória para pequenas implantações, aumentando para ambientes maiores:
spec: statefulSet: spec: template: spec: containers: - name: mongodb-ops-manager resources: requests: cpu: "4" memory: "8Gi" limits: cpu: "8" memory: "16Gi"
O operador calcula as configurações de heap da JVM com base nos limites de memória do container. Se for necessário substituir os parâmetros Java heap ou TG, use spec.jvmParameters, mas faça-o com cuidado: valores de heap incorretos podem desetorializar o Ops Manager:
spec: jvmParameters: - "-Xmx12g" - "-Xms8g" - "-XX:+UseG1GC"
Aviso
Definir limites de memória acima de 32 GiB pode causar problemas com o serviço de backup devido ao comportamento de oops compactado JVM . Mantenha os limites iguais ou inferiores a 32 GiB.
Para os campos de especificação completos do StatefulSet, consulte spec.statefulSet.spec na referência de especificação.
Modo Local e Remoto
Por padrão, o Ops Manager baixa os binários de instalação do MongoDB da Internet ( modo Remoto). Em ambientes com intervalo de ar ou de rede restrita, você pode configurar o modo Local, em que os binários são atendidos a partir de um PersistentVolume montado nos pods do Ops Manager, ou o modo Remoto com um endpoint personalizado.
modo remoto (padrão):
spec: configuration: automation.versions.source: "remote"
modo local (para ambientes com intervalo de ar):
spec: configuration: automation.versions.source: "local" automation.versions.directory: "/mongodb-ops-manager/mongodb-releases"
Para obter procedimentos detalhados,consulte Configurar um recurso do Ops Manager para usar o modo local e Configurar um recurso do Ops Manager para usar o modo remoto.
Iteração na configuração do Ops Manager
Um recurso personalizado do Ops Manager acompanha a sua organização. Os cenários comuns de iteração incluem a atualização da versão do Ops Manager, o dimensionamento de réplicas para alta disponibilidade, a adição de infraestrutura de backup para bancos de dados recém-implantados e a rotação de certificados TLS .
Diretivas para mudanças seguras:
Atualizar |onprem| no lugar. Altere
spec.versione aplique. O operador realiza uma atualização contínua dos pods de aplicação . Certifique-se de que a versão do banco de dados do aplicativo seja compatível com a nova versão do Ops Manager antes de atualizar.Escale as réplicas de forma independente. Você pode aumentar
spec.replicassem tempo de inatividade. Os novos pods ingressam no serviço existente automaticamente.Adicione armazenamentos de backup de forma incremental. Defina novos armazenamentos de oplog ou snapshots no CR e aplique. As atribuições de backup existentes não são afetadas.
Gire os certificados de forma proativa. Atualize os segredos do certificado TLS e, se necessário, o CA ConfigMap. O operador detecta o segredo alterado e reinicia os Pods afetados.
Observe o status do recurso. Após qualquer alteração,
kubectl get omexecute e inspecione ostatuscampo para verificar o progresso da reconciliação e quaisquer condições de erro.
Para procedimentos de atualização de versão, consulte Upgrade do Ops Manager e Backing Database Versions. Para obter orientações sobre recuperação de desastres, consulte Recuperação de desastres para o Ops Manager e recursos do AppDB.
Juntando tudo: um exemplo completo de recurso do Ops Manager
O exemplo a seguir combina os conceitos abordados nesta página em uma implantação do Ops Manager pronta para produção. Ele inclui HTTPS, configuração de e-mail, um banco de dados de aplicativos de três membros com armazenamento divisão , backup com snapshots S3 e armazenamentos de oplog, criptografia KMIP e limites de recursos:
apiVersion: mongodb.com/v1 kind: MongoDBOpsManager metadata: name: ops-manager-prod namespace: ops-manager spec: replicas: 2 version: "8.0.0" adminCredentials: ops-manager-admin-secret opsManagerURL: "https://opsmanager.example.com:8443" configuration: mms.fromEmailAddr: "ops-manager@example.com" mms.replyToEmailAddr: "ops-manager@example.com" mms.adminEmailAddr: "admin@example.com" mms.mail.hostname: "smtp.example.com" mms.mail.port: "587" mms.mail.ssl: "true" mms.mail.transport: "smtp" mms.ignoreInitialUiSetup: "true" security: certsSecretPrefix: "om-prod" tls: ca: "om-ca-configmap" externalConnectivity: type: LoadBalancer annotations: service.beta.kubernetes.io/aws-load-balancer-type: "nlb" statefulSet: spec: template: spec: containers: - name: mongodb-ops-manager resources: requests: cpu: "4" memory: "8Gi" limits: cpu: "8" memory: "16Gi" jvmParameters: - "-Xmx12g" - "-Xms8g" applicationDatabase: members: 3 version: "8.0.0-ubi8" featureCompatibilityVersion: "8.0" security: certsSecretPrefix: "appdb-prod" tls: ca: "appdb-ca-configmap" podSpec: cpu: "4" memory: "8Gi" persistence: multiple: data: storage: "200Gi" storageClass: "fast-ssd" journal: storage: "50Gi" storageClass: "fast-ssd" logs: storage: "20Gi" storageClass: "standard" backup: enabled: true encryption: kmip: server: url: "kmip.example.com:5696" ca: "kmip-ca-configmap" client: clientCertificatePrefix: "kmip-client" headDB: storage: "100Gi" storageClass: "fast-ssd" opLogStores: - name: oplog1 mongodbResourceRef: name: oplog-db mongodbUserRef: name: oplog-user assignmentLabels: - "production" s3Stores: - name: s3-snapshots mongodbResourceRef: name: s3-metadata-db mongodbUserRef: name: s3-store-user s3SecretRef: name: s3-credentials pathStyleAccessEnabled: true s3BucketEndpoint: "s3.us-east-1.amazonaws.com" s3BucketName: "backup-snapshots-prod" assignmentLabels: - "production"
Dica
Especificação de recursos do Ops Manager — Referência de campo CR do Ops Manager completa
Implantar um recurso Ops Manager — Implantação de cluster único passo a passo
Implantação de recursos do Ops Manager em vários clusters do Kubernetes — Implantação do Ops Manager em vários clusters
Configurar um recurso do Ops Manager para usar o Modo Local — Sistema com intervalo de ar
Configurar um recurso do Ops Manager para usar o modo remoto — Fonte binária remota
Configurar o armazenamento de backup do sistema de arquivos com o Kubernetes Operator — Armazenamentos de backup do sistema de arquivos
Configurar o KMIP Backup Encryption para o Ops Manager — Criptografia de backup KMIP
Configurar uma integração cert-manager — Renovação automatizada de certificados
Recuperação de desastres para o Ops Manager e recursos do AppDB — Procedimentos de recuperação de desastres