Guia Prático de Kubernetes para DevOps
Construindo Aplicações Cloud Native com Kubernetes: Um Passo a Passo para o Sucesso.

Guia Prático de Kubernetes para DevOps

Introdução
Kubernetes é uma plataforma open-source poderosa para orquestrar containers. Pense nela como o maestro de uma orquestra, coordenando a execução de diversos containers (microserviços) de forma eficiente e escalável.
Com a arquitetura de microsserviços crescendo em popularidade, o Kubernetes se tornou essencial para DevOps que buscam:
Escalabilidade: Aumente ou diminua a capacidade da sua aplicação com facilidade, atendendo às demandas do usuário.
Portabilidade: Execute sua aplicação em qualquer ambiente, seja local, na nuvem ou híbrido.
Resiliência: Garanta alta disponibilidade com recuperação automática de falhas.
Automação: Simplifique processos de deploy e gerenciamento de infraestrutura.
Este guia prático irá apresentar os conceitos fundamentais do Kubernetes e prepará-lo para explorar suas capacidades avançadas.
Kubernetes Vanilla vs. Distribuições e Serviços Gerenciados
Este guia foca no Kubernetes de código aberto, o "Kubernetes Vanilla". Existem também distribuições como OpenShift e Rancher, que adicionam funcionalidades extras, e serviços gerenciados como GKE (Google Kubernetes Engine), EKS (Amazon Elastic Kubernetes Service) e AKS (Azure Kubernetes Service), que simplificam o gerenciamento da infraestrutura. O Kubernetes Vanilla oferece maior flexibilidade, porém requer mais conhecimento e experiência para operar.
Capítulo 1: Deployments

Um deployment é um objeto Kubernetes que define como uma aplicação será executada. Ele especifica:
Pod Specification: Define os containers que compõem a aplicação e seus requisitos de recursos.
Replica Count: Define quantas instâncias (pods) da aplicação devem ser executadas.
Deployment Strategy: Define como as atualizações serão aplicadas, permitindo rollbacks e zero downtime.
Gerenciando Deployments com kubectl
O kubectl é a ferramenta de linha de comando para interagir com o Kubernetes. Você pode criar, atualizar e inspecionar deployments com comandos como:
kubectl apply -f deployment.yaml: Cria ou atualiza um deployment a partir de um arquivo YAML.
kubectl get deployments: Lista os deployments existentes.
kubectl describe deployment: Exibe detalhes de um deployment específico.
kubectl scale deployment: Ajusta o número de réplicas de um deployment.
kubectl rollout: Gerencia o processo de atualização de um deployment, incluindo rollbacks e histórico de revisões.
Exemplo de código YAML para deployment e comandos kubectl
Este código YAML define um deployment básico chamado "meu-app" com uma réplica de um pod executando a imagem "nginx:latest".
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: meu-app
spec:
replicas: 1
selector:
matchLabels:
app: meu-app
template:
metadata:
labels:
app: meu-app
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Comandos kubectl para gerenciar o deployment:
kubectl apply -f deployment.yaml
kubectl get deployments
kubectl describe deployment meu-app
kubectl scale deployment meu-app --replicas=3
kubectl rollout undo deployment meu-app
kubectl rollout history deployment meu-app
Capítulo 2: Kubernetes Networking

O Kubernetes fornece uma rede virtual para seus pods, permitindo que eles se comuniquem entre si e com o mundo externo.
Princípios Básicos:
IP Único por Pod: Cada pod recebe um IP único, facilitando o roteamento de tráfego.
DNS: O Kubernetes gerencia um servidor DNS para resolução de nomes de serviços e pods.
Network Namespace: Containers dentro do mesmo pod compartilham o mesmo namespace de rede, permitindo comunicação via localhost.
Serviços
Serviços expõem pods para outros pods ou para o mundo externo, independentemente do IP dos pods. Existem diferentes tipos de serviços:
ClusterIP: Exposição interna dentro do cluster.
NodePort: Exposição externa através de um port específico em cada nó do cluster.
LoadBalancer: Exposição externa através de um balanceador de carga.
ExternalName: Alias para um serviço externo ao cluster.
Ingresse
Ingresses são objetos que definem regras de roteamento HTTP para serviços, permitindo funcionalidades como balanceamento de carga, SSL termination e roteamento baseado em nome de host e caminho.
Capítulo 3: Kubernetes Volumes

Volumes são diretórios que armazenam dados para pods. Eles permitem que os dados persistam mesmo após a reinicialização de um pod.
Tipos de Volumes:
emptyDir: Volume temporário que é apagado quando o pod é excluído.
hostPath: Volume que mapeia um diretório do nó do cluster.
Persistent Volumes (PVs) e Persistent Volume Claims (PVCs): Volumes persistentes que podem ser provisionados dinamicamente e desacoplados dos pods.
Volumes em nuvem: Volumes que utilizam serviços de armazenamento em nuvem como AWS EBS e GCE Persistent Disk.
Modos de Acesso a Volumes:
ReadWriteOnce (RWO): Somente um nó pode acessar o volume para leitura e escrita.
ReadOnlyMany (ROX): Vários nós podem acessar o volume somente para leitura.
ReadWriteMany (RWX): Vários nós podem acessar o volume para leitura e escrita.
Capítulo 4: Kubernetes Security

A segurança é crucial em qualquer ambiente Kubernetes.
Secrets:
Secrets armazenam informações sensíveis, como senhas e tokens, de forma segura. Eles podem ser usados como variáveis de ambiente ou montados como arquivos em pods.
Service Accounts:
Service accounts são identidades para processos que rodam em pods, permitindo controle de acesso aos recursos do cluster.
RBAC (Role-Based Access Control):
RBAC controla o acesso aos recursos do cluster com base em funções e permissões.
Audit Log:
O audit log registra as solicitações à API do Kubernetes, permitindo auditoria e rastreamento de atividades.
Próximos Passos
Este guia prático forneceu uma base sólida para o seu aprendizado em Kubernetes. Explore a documentação oficial do Kubernetes e cursos online para aprofundar seus conhecimentos.
Lembre-se, o Kubernetes é uma ferramenta poderosa que pode transformar a forma como você gerencia suas aplicações em container. Com dedicação e prática, você poderá dominar esta tecnologia e elevar o seu nível de expertise em DevOps.



