Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Como distribuir um aplicativo no Kubernetes com o MongoDB Atlas Operator

Joel Lord, Cedric Clyburn9 min read • Published Aug 16, 2022 • Updated Aug 30, 2024
KubernetesDockerAtlasJavaScript
Ícone do FacebookÍcone do Twitterícone do linkedin
Gráfico de Kubernetes e MongoDB
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
O Kubernetes é agora um padrão em todo o setor quando se trata de contêineres, mas quando se trata de implementar um banco de dados, pode ser um pouco complicado! No entanto, tarefas como adicionar persistência, garantir redundância e manutenção de banco de dados podem ser facilmente tratadas com o MongoDB Atlas. Felizmente, o Operador do MongoDB Atlas oferece todos os benefícios do uso do MongoDB Atlas, enquanto ainda gerencia tudo de dentro do seu cluster Kubernetes. Neste tutorial, implantaremos um aplicativo de pilhaMERN no Kubernetes, instalaremos o operador Atlas e conectaremos nosso back-end ao Atlas usando um segredo do Kubernetes.

Pré-requisitos

Você pode encontrar o código fonte completo para este aplicativo no Github. É um miniaplicativo de planejador de viagens usando MongoDB, Express, React e Node (MERN). Embora este tutorial deva funcionar para qualquer cluster Kubernetes, usaremos o Minikube pela simplicidade e consistência.

Começar

Quando se trata de implantar um banco de dados no Kubernetes, não existe uma solução simples. Além dos desafios de persistência e redundância, talvez seja necessário mover dados para servidores geolocalizados específicos para garantir a conformidade com as políticas do GDPR. Portanto, você precisará de um banco de dados confiável, escalonável e resiliente depois de iniciar seu aplicativo em produção.
O MongoDB Atlas é uma plataforma de dados de desenvolvedor completa que inclui o banco de dados que você ama, que toma conta de muitas das complexidades do banco de dados que você está usando. Mas há uma lacuna entre o MongoDB Atlas e seu cluster Kubernetes. Vamos dar uma olhada no MongoDB Atlas Operator implementando o exemplo de aplicativo MERN com um back-end e um front-end.
Esse aplicativo usa uma arquitetura de aplicativo de três camadas, que terá o seguinte layout em nosso cluster Kubernetes:
Arquitetura do Kubernetes com o Atlas Operator
Para dar uma breve visão geral desse layout, temos um back-end com uma implementação que garantirá que tenhamos dois pods em execução a qualquer momento, e o mesmo se aplica ao nosso front-end. O tráfego é redirecionado e configurado pelo nosso ingresso, o que significa que /api solicitações são roteadas para o nosso back-end e todo o resto vai para o front-end. O back-end do nosso aplicativo é responsável pela conexão com o banco de dados, onde estamos usando o MongoDB Atlas Operator para vincular a uma instância do Atlas.

Implantando o aplicativo no Kubernetes

Para simplificar o processo de instalação do aplicativo, podemos usar um único comandokubectl para implantar nosso aplicativo de demonstração no Kubernetes. O único arquivo que usaremos inclui todas as implantações e serviços para o back-end e o front-end do nosso aplicativo e usa contêineres criados com os Dockerfiles na pasta.
Primeiro, comece clonando o repositório que contém o código-fonte inicial.
1git clone https://github.com/mongodb-developer/mern-k8s.git
2
3cd mern-k8s
Em segundo lugar, como parte deste tutorial, você precisará executar minikube tunnel para acessar nossos serviços em localhost.
1minikube tunnel
Agora, vamos implantar tudo em nosso cluster do Kubernetes aplicando o seguinte application.yaml arquivo.
1kubectl apply -f k8s/application.yaml
Você pode dar uma olhada no que está sendo executado no seu cluster usando o comandokubectl get.
1kubectl get all
Você deve ver vários pods, serviços e implantações para o back-end e o front-end, bem como conjuntos de réplicas. No momento, é mais provável que eles estejam em um status ContainerCreating. Isso ocorre porque o Kubernetes precisa puxar as imagens para seu registro local. Assim que as imagens estiverem prontas, os pods começarão.
Para ver o aplicativo em ação, basta acessar localhost em seu navegador da Web e o aplicativo deverá estar ativo!
Visualização do navegador do aplicativo de demonstração
No entanto, você notará que não há como adicionar entradas a nosso aplicativo, e isso ocorre porque ainda não fornecemos uma connection string para que o backend se conecte a uma instância do MongoDB. Por exemplo, se verificarmos os registros de um dos Pods de backend criados recentemente, podemos ver que há um espaço reservado para uma connection string.
1kubectl logs pod/mern-k8s-back-d566cc88f-hhghl
2
3Connecting to database using $ATLAS_CONNECTION_STRING
4Server started on port 3000
5MongoParseError: Invalid scheme, expected connection string to start with "mongodb://" or "mongodb+srv://"
Encontramos um pequeno problema, pois esse aplicativo de demonstração está usando um espaço reservado ($ATLAS_CONNECTION_STRING) para a string de conexão do MongoDB, que precisa ser substituído por uma string de conexão válida do nosso cluster Atlas. Esse problema pode ser resolvido com o MongoDB Atlas Operator, que permite gerenciar tudo de dentro do Kubernetes e oferece todas as vantagens de usar o MongoDB Atlas, incluindo a geração de uma string de conexão como um segredo do Kubernetes.

Usando o MongoDB Atlas Operator para Kubernetes

Como há atualmente uma lacuna entre seu cluster Kubernetes e o MongoDB Atlas, vamos usar o Operador Atlas para corrigir esse problema. Por meio do operador, poderemos gerenciar nossos projetos e clusters do Atlas a partir do Kubernetes. Especificamente, obter sua connection string para corrigir o erro que recebeu anteriormente pode ser feito agora por meio dos segredos do Kubernetes, o que significa que não precisaremos recuperá-la da UI ou do Atlas CLI.

Por que usar o Operador?

O Atlas Operator faz a ponte entre o Atlas, a plataforma de dados do MongoDB e seu cluster do Kubernetes. Ao usar o operador, você pode usar kubectl e suas ferramentas familiares para gerenciar e configurar suas implantações do Atlas. Particularmente, ele permite que a maior parte da funcionalidade e das ferramentas do Atlas seja executada sem precisar sair do seu cluster do Kubernetes. A instalação do operador do Atlas cria as definições de recursos personalizados que se conectarão aos servidores Atlas do MongoDB.

Instalando o Atlas Operator

O processo de instalação do Operador Atlas é tão simples quanto executar um comandokubectl. Todo o código fonte do operador pode ser encontrado no repositório do Github.
1kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-atlas-kubernetes/main/deploy/all-in-one.yaml
Isso criará novos recursos personalizados em seu cluster que você poderá usar para criar ou gerenciar seus projetos e clusters existentes do Atlas.

Criando um cluster MongoDB Atlas

Vá para a página deregistro do Atlas para criar sua conta gratuita. Essa conta permitirá que você crie um banco de dados em um servidor compartilhado e você nem precisará de um cartão de crédito para usá-lo.

Configurar o acesso

Para que o operador possa gerenciar seu cluster, você precisará fornecer a ele uma chave de API com as permissões apropriadas. Em primeiro lugar, vamos recuperar o ID da organização.
Na parte superior esquerda da interface do usuário do Atlas, você verá o nome da sua organização em um menu suspenso. Ao lado do menu suspenso, há um ícone de engrenagem. Clicar neste ícone abrirá uma página chamada Configurações da organização. Nessa página, procure uma caixa rotulada ID da organização.
Navegando até a página de configurações da organização
Salve esse ID da organização em algum lugar para uso futuro. Você também pode salvá-lo em uma variável de ambiente.
1export ORG_ID=60c102....bd
Observação: se estiver usando o Windows, use:
1set ORG_ID=60c102....bd
Em seguida, vamos criar uma chave de API. Na mesma tela, procure a opçãoAccess Manager no menu de navegação esquerdo. Isso levará você à telaAcesso à organização . Nesta tela, siga as instruções para criar uma nova chave de API.
Criando uma nova chave de API a partir da página do gerenciador de acesso
A chave precisará da função Organization Project Creator para criar novos projetos e clusters. Se você quiser gerenciar clusters existentes, precisará fornecer a ele a função " Proprietário da organização" . Salve as chaves privadas e públicas da API. Você também pode adicioná-los ao ambiente.
Armazenamento das informações da chave API pública e privada
1export ATLAS_PUBLIC_KEY=iwpd...i
2export ATLAS_PRIVATE_KEY=e13debfb-4f35-4...cb
Observação: se estiver usando o Windows, use:
1set ATLAS_PUBLIC_KEY=iwpd...i
2set ATLAS_PRIVATE_KEY=e13debfb-4f35-4...cb

Crie os segredos do Kubernetes

Agora que você criou a chave de API, você pode especificar esses valores para o Operador do MongoDB Atlas. Ao criar esse segredo em nosso cluster Kubernetes, isso concederá ao operador as permissões necessárias para criar e gerenciar projetos e clusters para nossa conta Atlas específica.
Você pode criar o segredo com kubectle, para simplificar, vamos nomear nosso segredo mongodb-atlas-operator-api-key. Para que o operador possa encontrar esse segredo, ele precisa estar dentro do namespace mongodb-atlas-system.
1kubectl create secret generic mongodb-atlas-operator-api-key \
2 --from-literal="orgId=$ORG_ID" \
3 --from-literal="publicApiKey=$ATLAS_PUBLIC_KEY" \
4 --from-literal="privateApiKey=$ATLAS_PRIVATE_KEY" \
5 -n mongodb-atlas-system
Em seguida, precisaremos rotular esse segredo, o que ajuda o operador Atlas a encontrar as credenciais.
1kubectl label secret mongodb-atlas-operator-api-key atlas.mongodb.com/type=credentials -n mongodb-atlas-system

Criar uma senha de usuário

Precisamos de uma senha para o usuário do banco de dados para acessar nossos bancos de dados, criar novos bancos de dados etc. No entanto, você não vai querer codificar essa senha em seus arquivos yaml. É mais seguro salvá-lo como um segredo do Kubernetes. Assim como a chave API, esse segredo também precisará ser rotulado.
1kubectl create secret generic atlaspassword --from-literal="password=mernk8s"
2kubectl label secret atlaspassword atlas.mongodb.com/type=credentials

Criar e gerenciar um sistema do Atlas

Parabéns! Agora você está pronto para gerenciar seus projetos e implantações do Atlas no Kubernetes. Isso pode ser feito com os três novos CRDs que foram adicionados ao seu cluster. Esses CRDs são AtlasProject para gerenciar projetos, AtlasDeployment para gerenciar implantações e AtlasDatabaseUser para gerenciar usuários de banco de dados no MongoDB Atlas.
  • Projetos: permite isolar diferentes ambientes de banco de dados (por exemplo, ambientes de desenvolvimento/qa/produção) uns dos outros, bem como usuários/equipes.
  • Sistemas: instância do MongoDB em execução em um fornecedor de nuvem.
  • Usuários: usuários do banco de dados que têm acesso aos sistemas de banco de dados MongoDB.
O processo de criação de um projeto, usuário e implantação é demonstrado abaixo, mas sinta-se à vontade para pular para baixo e simplesmente aplicar esses arquivos usando a pasta/atlas.

Criar um projeto

Comece criando um novo projeto no qual o novo cluster será implantado. Em um novo arquivo chamado /operator/project.yaml, adicione o seguinte:
1apiVersion: atlas.mongodb.com/v1
2kind: AtlasProject
3metadata:
4 name: mern-k8s-project
5spec:
6 name: "MERN K8s"
7 projectIpAccessList:
8 - ipAddress: "0.0.0.0/0"
9 comment: "Allowing access to database from everywhere (only for Demo!)"
Isso criará um novo projeto chamado "MERN K8s" no Atlas. Agora, este projeto estará aberto a qualquer pessoa na web. É prática recomendada abri-lo apenas para endereços IP conhecidos, conforme mencionado no comentário.

Criar um novo usuário de banco de dados

Agora, para que seu aplicativo se conecte a esse banco de dados, você precisará de um usuário de banco de dados. Para criar esse usuário, abra um novo arquivo chamado /operator/user.yaml e adicione o seguinte:
1apiVersion: atlas.mongodb.com/v1
2kind: AtlasDatabaseUser
3metadata:
4 name: atlas-user
5spec:
6 roles:
7 - roleName: "readWriteAnyDatabase"
8 databaseName: "admin"
9 projectRef:
10 name: mern-k8s-project
11 username: mernk8s
12 passwordSecretRef:
13 name: atlaspassword
Você pode ver como a senha usa o segredo que criamos anteriormente, atlaspassword, no namespacemern-k8s-project .

Criar uma implantação

Finalmente, como você tem uma configuração de projeto e um usuário para se conectar ao banco de dados, você pode criar uma nova implantação dentro deste projeto. Em um novo arquivo chamado /operator/deployment.yaml, adicione o seguinte yaml.
1apiVersion: atlas.mongodb.com/v1
2kind: AtlasDeployment
3metadata:
4 name: mern-k8s-cluster
5spec:
6 projectRef:
7 name: mern-k8s-project
8 deploymentSpec:
9 name: "Cluster0"
10 providerSettings:
11 instanceSizeName: M0
12 providerName: TENANT
13 regionName: US_EAST_1
14 backingProviderName: AWS
Isso criará uma nova implantação M0 (grátis) no AWS, na região US_EAST_1 . Aqui, estamos referenciando mern-k8s-project em nosso namespace Kubernetes e criando um cluster denominado Cluster0. Você pode usar uma sintaxe semelhante para implantar em qualquer região na AWS, GCP ou Azure. Para criar uma instância sem servidor, consulte o exemplo de instância sem servidor.

Aplicar os novos arquivos

Agora você tem tudo pronto para criar este novo projeto e cluster. Você pode aplicar esses novos arquivos ao seu cluster usando:
1kubectl apply -f ./operator
Isso levará alguns minutos. Você pode ver o status do cluster e a criação do projeto com kubectl.
1kubectl get atlasprojects
2kubectl get atlasdeployments
Enquanto isso, você pode Go a UI do Atlas. O projeto já deve ter sido criado e você deve ver que um cluster está em processo de criação.
Visualizando o cluster recém-criado

Obtenha sua string de conexão

Obter sua connection string para esse banco de dados recém-criado agora pode ser feito por meio do Kubernetes. Após a criação do novo banco de dados, você pode usar o comando a seguir, que usa jq, para visualizar as connection strings, sem usar a UI do Atlas, convertendo para JSON a partir da base64.
1kubectl get secret mern-k8s-cluster0-mernk8s -o json | jq -r '.data | with_entries(.value |= @base64d)'
2
3{
4
5 "connectionStringStandard": "![](https://mongodb-devhub-cms.s3.us-west-1.amazonaws.com/api_key_credentials_bcc611f1f0.png)",
6 "connectionStringStandardSrv": "mongodb+srv://mernk8s:mernk8s@cluster0.fb4qw.mongodb.net",
7 "password": "mernk8s",
8 "username": "mernk8s"
9}

Configure o backend do aplicativo usando o operador Atlas

Agora que seu projeto e cluster foram criados, você pode acessar as várias propriedades da sua instância do Atlas. Agora você pode acessar a connection string e até mesmo configurar seu serviço de backend para usar essa connection string. Go conectar nosso back-end ao nosso banco de dados sem realmente especificar a string de conexão, em vez disso, usaremos o segredo do Kubernetes que acabamos de criar.

Atualizar a implantação de back-end

Agora que pode encontrar sua connection string no Kubernetes, você pode usá-la como parte do sistema para especificar a connection string para o backend.
No arquivo/k8s/application.yaml, altere a seçãoenv do modelo de container para o seguinte:
1 env:
2 - name: PORT
3 value: "3000"
4 - name: "CONN_STR"
5 valueFrom:
6 secretKeyRef:
7 name: mern-k8s-cluster0-mernk8s
8 key: connectionStringStandardSrv
Isso usará a mesma connection string que você acabou de ver em seu terminal.
Como alteramos nossa implantação, você pode aplicar essas alterações ao seu cluster usando kubectl:
1​​kubectl apply -f k8s/application.yaml
Agora, se você der uma olhada nos seus pods atuais:
1kubectl get pods
Você verá que os pods de backend foram reiniciados. Agora você deve poder testar o aplicativo com o backend conectado ao nosso cluster Atlas recém-criado. Agora, basta acessar localhost para visualizar o aplicativo atualizado depois que a implantação for reiniciada. Você verá o aplicativo totalmente em execução, usando esse cluster recém-criado.
Aplicativo de demonstração em total funcionalidade, conectado ao MongoDB Atlas
Além disso, à medida que você adicionar itens ou talvez limpar as entradas do planejador de viagens, notará as entradas adicionadas e removidas da guia "Collections " do banco de dadosCluster0 na interface do usuário do Atlas. Vamos dar uma olhada em nosso banco de dados usando o MongoDB Compass, com o nome de usuário mernk8s e a senha mernk8s, conforme definimos anteriormente.
MongoDB Compass conectado ao nosso banco de dados mern-k8s

Excluir projeto

Vamos finalizar usando kubectl para excluir o Atlas cluster e projeto e limpar nosso espaço de trabalho. Podemos excluir tudo do namespace atual usando kubectl delete
1kubectl delete atlasdeployment mern-k8s-cluster
2kubectl delete atlasproject mern-k8s-project

Resumo

Agora você sabe como aproveitar o MongoDB Atlas Operator para criar e gerenciar clusters do Kubernetes. Demonstramos apenas uma pequena parte da funcionalidade que o operador oferece, mas sinta-se à vontade para consultar a documentação para saber mais.
Se você estiver usando o MongoDB Enterprise em vez do Atlas, também haverá um operador disponível, que funciona de maneira muito semelhante.
Para passar pelo laboratório completo de Joel Lord, que inclui este guia e muito mais, confira o Atlas Operator Workshopautoguiado.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Parte #1: Crie seu próprio Vector Search com o MongoDB Atlas e o Amazon SageMaker


Sep 18, 2024 | 4 min read
Tutorial

Anúncio UDF do MongoDB para modelos do BigQuery Dataflow


Apr 02, 2024 | 4 min read
Vídeo

A cena do Atlas Search: Temporada 1


Sep 11, 2024 | 2 min
Tutorial

Construir um elemento de formulário de preenchimento automático com Atlas Search e JavaScript


Sep 09, 2024 | 8 min read
Sumário