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