Implantar aplicativos no Kubernetes pode ser desafiador, especialmente para aplicativos stateful como o MongoDB no cluster Kubernetes. Como facilitar a implantação? Deixe o Operador Kubernetes do MongoDB implantar e gerenciar automaticamente aplicativos stateful dentro do seu cluster Kubernetes.
Neste tutorial, você aprenderá como implantar o MongoDB no Kubernetes usando o Operador Kubernetes do MongoDB.
Continue lendo e comece a automatizar suas implantações no Kubernetes!
Pré-requisitos
Este tutorial será uma demonstração prática. Para acompanhar, certifique-se de ter os seguintes requisitos:
- A Kubernetes cluster – This demo uses the Kubernetes cluster v1.23.
- Kubectl instalado na máquina local.
- MongoDB Compass instalado na máquina local.
- Git instalado na sua máquina.
- jq Parser JSON instalado na máquina local.
Criando Namespace para MongoDB
Ao implantar aplicativos no Kubernetes, sempre é recomendável criar um namespace específico para seus projetos.
Os namespaces facilitam a administração de recursos do Kubernetes para os administradores e evitam colisões de nomes. Ao mesmo tempo, criar namespaces impede o uso incorreto de recursos no ambiente do Kubernetes.
Abra seu terminal e execute o comando kubectl create
abaixo para criar um novo namespace (ns
) chamado mongodb
em seu cluster Kubernetes.
Agora execute o comando abaixo kubectl get
para verificar a lista de namespaces em seu cluster Kubernetes.
Você verá um novo namespace chamado mongodb disponível em seu cluster, conforme mostrado abaixo.

Download do Operador Kubernetes para MongoDB
Depois de criar um espaço de nomes, é hora de baixar o Operador Kubernetes do MongoDB. O Operador Kubernetes do MongoDB é um conjunto de operadores Kubernetes. Esses operadores Kubernetes oferecem implantação, configuração e gerenciamento automáticos do MongoDB Community no ambiente Kubernetes.
Execute o comando git
abaixo para clonar
o projeto do Operador Kubernetes do MongoDB para a sua máquina local.
Agora, execute cada comando abaixo para mudar o seu diretório de trabalho atual para mongodb-kubernetes-operator
e listar (ls
) todos os arquivos e diretórios disponíveis.
Você verá um subdiretório chamado config dentro do diretório do projeto ~/mongodb-kubernetes-operator, como mostrado abaixo. O subdiretório config contém exemplos de arquivos YAML para implantar o MongoDB no Kubernetes.

Implantando o Operador MongoDB
Agora que seu espaço de nomes personalizado e o Operador Kubernetes do MongoDB estão configurados, você está pronto para implantar o Operador MongoDB no seu cluster Kubernetes. Como? Você usará a configuração dentro do diretório config.
O Operador MongoDB gerencia o ciclo de vida da implantação do MongoDB no cluster Kubernetes. O operador criará, gerenciará e dimensionará automaticamente o estado da implantação do seu MongoDB.
Para implantar o operador MongoDB, você deve criar uma Definição de Recursos Personalizados (CRD) do Kubernetes Custom Resources Definition (CRD) e o controlador. O CRD do Kubernetes é extensível à API do Kubernetes, permitindo que você crie recursos personalizados no Kubernetes.
1. Execute o comando kubectl apply
abaixo para criar um novo CRD do Kubernetes para a implantação do MongoDB.
O Operador Kubernetes substitui toda interação humana para implantar uma aplicação no Kubernetes. O operador é um controlador de pod que implanta e gerencia automaticamente sua aplicação com estado no Kubernetes.

2. Em seguida, execute o seguinte comando kubectl get
para verificar a lista de crd
disponíveis no seu Kubernetes.
Abaixo, você pode ver o CRD com o nome mongodbcommunity.mongodbcommunity.mongodb.org.

3. Execute o comando abaixo para criar um novo Controle de Acesso Baseado em Função (RBAC) personalizado para o Operador MongoDB e especifique a implementação do RBAC para o namespace mongodb.
Este comando cria uma nova função, rolebinding e serviceaccount para o operador do MongoDB, que são permissões personalizadas no seu cluster Kubernetes. Essas permissões personalizadas são necessárias para implantar e gerenciar automaticamente o MongoDB.

4. Agora, execute cada comando kubectl
abaixo para verificar a função, rolebinding e serviceaccount para o operador do MongoDB.
A saída abaixo mostra que a função, rolebinding e serviceaccount mongodb-kubernetes-operator foram criados no namespace mongodb.

5. Após a verificação, execute o seguinte comando kubectl
para implantar o Operador do MongoDB no namespace mongodb
.
Este comando cria um novo pod (mongodb-kubernetes-operator) com a imagem base Docker (quay.io/mongodb/mongodb-kubernetes-operator). Este pod atuará como controlador para implantar automaticamente ReplicaSets do MongoDB no cluster Kubernetes.
Abaixo, você pode ver que a implantação do operador MongoDB foi criada, mas o pod ainda está inicializando.

6. Por fim, execute os seguintes comandos para verificar a implantação e os pods no namespace mongodb
.
Como você pode ver abaixo, o pod do Operador do MongoDB está em execução.

Implantando ReplicaSet do MongoDB no Kubernetes
Após implantar o MongoDB, você implantará o ReplicaSet no seu Kubernetes para fornecer alta disponibilidade e redundância para a implantação do MongoDB. Você não gostaria de ter tempo de inatividade na sua implantação.
A implantação de ReplicaSets do MongoDB usando o Operador Kubernetes do MongoDB é segura por padrão, utilizando a autenticação SCRAM para usuários. Ao mesmo tempo, você pode usar uma conexão segura TLS para as conexões de usuários e aplicações, além de expor métricas do Prometheus para monitoramento de recursos.
Relacionado: Iniciando com o Monitoramento de Cluster Kubernetes usando Grafana & Prometheus
Dentro do diretório config/samples/, você verá vários exemplos de arquivos YAML para a implantação do ReplicaSet. Cada arquivo pode ser utilizado em diferentes cenários de implantação, mas o arquivo padrão de implantação do ReplicaSet é mongodb.com_v1_mongodbcommunity_cr.yaml.
1. Edite o arquivo YAML para a sua implantação usando o editor de sua preferência. Neste exemplo, usamos o arquivo /mongodb.com_v1_hostpath.yaml para implantação local. Este arquivo YAML está localizado no diretório config/samples/arbitrary_statefulset_configuration/.
Se estiver implantando o Operador do MongoDB Kubernetes nos serviços de nuvem, como GKE e AKS, use o arquivo YAML mongodb.com_v1_mongodbcommunity_cr.yaml. Mas se estiver implantando localmente dentro do Kind ou Minikube, você pode usar o arquivo YAML personalizado (configuração arbitrária do estado persistente/arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml), que cria automaticamente PV e PVC personalizados para os pods do Conjunto de Réplicas do MongoDB.
Abaixo, altere o número (membros) de Conjuntos de Réplicas que deseja implantar, dependendo do seu ambiente, mas o padrão é 3. Para este tutorial, o número de Conjuntos de Réplicas está definido como 2.
Substitua <sua-senha-aqui> pela sua senha forte. Você usará esta senha para fazer login no banco de dados do MongoDB e, por padrão, usará a autenticação SCRAM.
Salve as alterações e feche o editor quando estiver satisfeito com a senha.
2. Em seguida, execute o comando kubectl
abaixo para implantar (apply
) o Conjunto de Réplicas do MongoDB usando o mongodb.com_v1_hostpath.yaml
no namespace mongodb.
Este comando cria o seguinte:
- A new custom resource (MongoDBCommunity) with the name mdb0 under the
mongodbcommunity.mongodb.com/v1
CRD
- Segredos do Kubernetes para armazenar senhas de usuário do MongoDB. Ao mesmo tempo, alguns PVs e PVCs com o tipo
hostPath
para o Conjunto de Réplicas do MongoDB.
O deployment levará algum tempo, dependendo do tamanho dos ReplicaSets a serem criados e do próprio cluster Kubernetes.

3. Após o deployment, execute cada comando abaixo para verificar os recursos personalizados e pods no namespace mongodb
.
O output abaixo mostra o seguinte:
- O recurso personalizado MongoDBCommunity com o nome mdb0 está em execução com o MongoDB v4.4.0.
- Os dois pods do ReplicaSet do MongoDB estão em execução com os nomes mdb0-0 e mdb0-1. Cada pod contém dois containers diferentes, o mongod, e o container mongodb-agent.

4. Por fim, execute outro comando kubectl
abaixo para verificar o pv
e o pvc
no namespace mongodb
.
O output abaixo mostra alguns pv e pvc usados pelos pods do ReplicaSet do MongoDB.

Criando um Novo Usuário e Banco de Dados para o Deployment do MongoDB
Você concluiu o deployment do operador MongoDB e dos ReplicaSets no seu cluster Kubernetes neste momento. O próximo passo é criar um novo banco de dados e usuário do MongoDB para a sua aplicação.
Você criará um novo segredo do Kubernetes para o novo usuário, editará o recurso personalizado do deployment do ReplicaSet e atualizará o ReplicaSet no seu cluster.
1. Crie um novo arquivo YAML usando o editor de sua preferência e preencha o seguinte segredo do Kubernetes. Você pode nomear o arquivo YAML como desejar, mas neste tutorial o arquivo é chamado de new-user.yaml.
Este arquivo YAML cria um novo segredo do Kubernetes com o nome myappdata e a senha myapppassword.
2. Em seguida, execute o comando kubectl
abaixo para executar a configuração new-user.yaml
.
Este comando cria e aplica (apply) um novo segredo do Kubernetes no seu cluster e aplica esse segredo ao namespace mongodb.

3. Edite o arquivo YAML da configuração do seu ReplicaSet CRD (mongodb.com_v1_hostpath.yaml) no diretório config/samples/arbitrary_statefulset_configuration
Adicione a seguinte configuração ao arquivo mongodb.com_v1_hostpath.yaml, que cria o banco de dados e usuário para o MongoDB.
Certifique-se de substituir scram-secret-myapp pelas suas próprias credenciais scram, salve as alterações no arquivo e feche o editor.
4. Agora, execute o comando abaixo para aplicar
as novas alterações que você fez no arquivo mongodb.com_v1_hostpath.yaml
no passo três.

5. Por último, execute cada comando abaixo para gerar as conexões detalhadas do MongoDB para sua aplicação. Esses comandos geram a conexão detalhada do MongoDB para suas aplicações em formato JSON e analisam a saída usando o comando jq
na linha de comando.
Substitua mdb0-admin-mongoadmin por seus detalhes de ambiente da seguinte forma:
mdb0
– O nome dos metadados dos recursos do MongoDB.
admin
– O banco de dados para autenticação.
mongoadmin
– O usuário que você usará para autenticação
A saída abaixo mostra que você pode se conectar ao MongoDB usando as conexões standard e standardSrv. Você também verá o nome de usuário e a senha do seu deployment do MongoDB.

Conectando-se ao Deployment do MongoDB
Você concluiu a implantação do MongoDB no cluster Kubernetes usando o operador Kubernetes do MongoDB. Mas como você sabe se a implantação funciona? Você verificará o banco de dados de sua máquina local e a conexão do usuário com o MongoDB dentro do cluster Kubernetes.
Para verificar a conexão com sua implantação do MongoDB, você usará o encaminhamento de porta. O encaminhamento de porta no Kubernetes permite que você crie uma porta de encaminhamento de qualquer serviço do Kubernetes para sua porta local.
1. Execute o comando kubectl
abaixo para obter
a lista de serviços (svc
) no namespace do mongodb
(-n
).
Abaixo, você verá o serviço chamado mdb0-svc, que expõe a porta 27017 (porta padrão do MongoDB).

2. Em seguida, execute o comando abaixo para criar um encaminhamento de porta para o cluster Kubernetes.
Este comando cria um novo encaminhamento de porta no serviço Kubernetes (mdb0-svc) e encaminha a porta local 27017 para a porta do serviço Kubernetes 27017.

3. Por fim, abra o aplicativo MongoDB Compass em sua máquina local, adicione uma nova conexão com o seguinte formato e clique em Conectar para se conectar ao MongoDB.
Altere o campo de nome de usuário e senha com seu usuário e senha do MongoDB.


Quando a conexão for bem-sucedida, você verá a seguinte janela que confirma que o deployment do MongoDB para o Kubernetes está funcionando corretamente.
Para o usuário mongoadmin, você verá bancos de dados padrão (local, config e admin).

Para o appuser, você verá apenas um banco de dados de privilégios chamado appdb1.

Conclusão
Ao longo deste tutorial, você aprendeu como implantar o MongoDB no cluster Kubernetes usando o MongoDB Kubernetes Operator. Você também aprendeu sobre o uso básico do operador Kubernetes. E até agora, você já possui um conhecimento sólido sobre implantar e gerenciar aplicativos automaticamente no Kubernetes.
Não configurar uma conexão TLS em sua implementação do MongoDB para construir sobre esse conhecimento recém-adquirido? A conexão TLS protege as conexões entre conjuntos de réplicas e garante a segurança das conexões do cliente ou do aplicativo com o MongoDB.