Orquestrando containers com Kubernetes

Orquestrando containers com Kubernetes

O Kubernetes é uma plataforma de orquestração de containers open-source que automatiza a implantação, o dimensionamento e a operação de aplicativos em containers. Ele foi originalmente projetado pelo Google e é agora mantido pela Cloud Native Computing Foundation.

Para definir aplicações em Kubernetes, você cria um arquivo de configuração em YAML que descreve os recursos necessários para a aplicação. O Kubernetes então lê esse arquivo e cria os recursos necessários para a aplicação e garante que a aplicação tenha o estado que você definiu.

Para testar o Kubernetes e a aplicação localmente, use o KinD (Kubernetes in Docker). O KinD é uma ferramenta para executar clusters Kubernetes em containers Docker. Para me acompanhar acesse o diretório kind que está na raiz do repositório e siga as instruções para instalar o KinD e criar um cluster Kubernetes local, execute o comando kubectl apply -f manifests/ para implantar a aplicação no seu cluster local.

Após criar seu cluster local, implemente o ingress controller para acessar a aplicação. O ingress controller é um recurso do Kubernetes que gerencia o acesso externo aos serviços em um cluster. Para implantar o ingress controller, execute o comando kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml.

No meu caso, utilizarei manifestos para implantar a aplicação no cluster Oracle Kubernetes Engine (OKE), um cluster gerenciado do Kubernetes fornecido pela Oracle Cloud Infrastructure (OCI).

Para que o Giropops Senhas e o Redis funcionem corretamente, foram necessários definir o deployment e o service para cada aplicação. Para persistir as senhas geradas, foi necessário definir um PersistentVolume e um PersistentVolumeClaim. Para expor a aplicação para fora do cluster, foi necessário definir um Ingress.

No deployment do Giropops Senhas, a estrátegia de atualização foi definida como RollingUpdate para garantir que a aplicação seja atualizada sem interrupções. O parâmetro imagePullPolicy foi definido como IfNotPresent para garantir que a imagem não seja baixada se já estiver presente no nó. O parâmetro resources foi definido para garantir que a aplicação não consumisse muitos recursos, foi definido um resource limitando o uso de CPU e memória. Para garantir que a aplicação esteja sempre disponível, foi definido um livenessProbe que verifica se a aplicação está respondendo e um readinessProbe que verifica se a aplicação está pronta para receber tráfego.

Variáveis de ambiente foram definidas no deployment para configurar a aplicação. A variável REDIS_HOST foi definida para o endereço do serviço Redis. A variável REDIS_PORT foi definida para a porta do serviço Redis.

No contexto de segurança (securityContext) garante que a aplicação seja executada com um usuário não privilegiado e com um UID específico. O parâmetro readOnlyRootFilesystem foi definido como true para garantir que o sistema de arquivos raiz seja somente leitura.

Foram definidas labels para identificar os recursos criados pelo Giropops Senhas. As labels são usadas para selecionar recursos para operações como escalar, atualizar ou excluir.

Em relação ao ingress do Giropops Senhas, a regra path foi definida como / para redirecionar todo o tráfego para o service giropops-service que expõe a aplicação. O parâmetro ingressClassName foi definido como nginx para garantir que o ingress controller correto seja usado.

Utilizei as annotations para configurar a geração de certificados com o cert-manager. O cert-manager é um controlador do Kubernetes que automatiza a solicitação, emissão e renovação de certificados TLS. As annotations cert-manager.io/cluster-issuer foram definidas para especificar o ClusterIssuer a serem usados para gerar os certificados. As annotations kubernetes.io/ingress.class foram definidas para garantir que o ingress controller correto seja usado mais uma vez.

O secretName no bloco tls foi definido para armazenar o certificado gerado. Para acessar a aplicação basta acessar o endereço do ingress: senhas.nataliagranato.xyz.

Uma observação importante é que o nome do service do Redis foi definido como redis-service para que a aplicação Giropops Senhas possa se comunicar com o Redis, utilizamos a variavel de ambiente REDIS_HOST e REDIS_PORT no deployment do Giropops Senhas para configurar a conexão com o Redis.

Last updated