Capítulo 1.5 - Conceitos Fundamentais
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Entender o que é um Pod
- Explicar o papel de um Deployment
- Compreender os Services e seus tipos
- Utilizar Namespaces para organização
Introdução
O Kubernetes utiliza vários conceitos fundamentais que você usará constantemente. Este capítulo apresenta os mais importantes: Pods, Deployments, Services e Namespaces.
Pods: A Unidade Atômica
Definição
Um Pod é a menor unidade implantável no Kubernetes.
Características de um Pod
Pontos-chave:
- Um Pod = 1 ou mais contêineres
- Contêineres em um Pod compartilham:
- O endereço IP
- Os volumes
- O namespace de rede
- Os Pods são efêmeros (podem ser recriados)
Exemplo de Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
Deployments: Gerenciamento do Ciclo de Vida
Definição
Um Deployment descreve o estado desejado da sua aplicação.
Funcionalidades de um Deployment
Vantagens:
- Gerencia as réplicas automaticamente
- Rolling updates (sem interrupção)
- Rollback em caso de problema
- Auto-recuperação
Exemplo de Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
Services: Expondo Aplicações
Definição
Um Service expõe um conjunto de Pods como um serviço de rede estável.
Problema resolvido:
- Os Pods possuem IPs efêmeros
- Os Pods podem ser recriados
- Como manter um endereço estável?
Solução: O Service fornece um IP estável e um nome DNS
Tipos de Services
1. ClusterIP (Padrão)
- Serviço interno ao cluster
- Acessível apenas de dentro do cluster
- Utiliza o DNS interno
2. NodePort
- Expõe em uma porta (30000-32767) de cada node
- Acessível externamente
- Porta única em todos os nodes
3. LoadBalancer
- Expõe via um load balancer cloud
- IP público automático
- Disponível em AWS, Azure, GCP
Exemplo de Service
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
Namespaces: Isolamento Lógico
Definição
Os Namespaces permitem dividir um cluster em vários ambientes virtuais.
Vantagens dos Namespaces
Casos de uso:
- Separar dev/staging/prod
- Isolar equipes
- Gerenciar quotas de recursos
- Aplicar políticas de segurança
Namespaces Padrão
O Kubernetes cria vários namespaces por padrão:
- default: Namespace padrão para seus recursos
- kube-system: Componentes do sistema Kubernetes
- kube-public: Recursos públicos
- kube-node-lease: Heartbeats dos nodes
Exemplo de Utilização
# Criar um namespace
kubectl create namespace production
# Fazer deploy em um namespace
kubectl apply -f deployment.yaml -n production
# Listar os pods em um namespace
kubectl get pods -n production
Relações Entre os Conceitos
Visão Geral
Hierarquia:
- Namespace: Contém tudo
- Deployment: Gerencia os Pods
- ReplicaSet: Mantém o número de réplicas
- Pods: Executam os contêineres
- Service: Expõe os Pods
Resumo do Capítulo
Neste capítulo, você aprendeu:
Pod: Menor unidade implantável, 1+ contêineres
Deployment: Gerencia o ciclo de vida, réplicas, atualizações
Service: Expõe os Pods com um IP estável
Tipos de Service: ClusterIP, NodePort, LoadBalancer
Namespaces: Isolamento lógico, organização
Relações: Namespace → Deployment → Pods → Service
Próximos Passos
Agora que você domina os conceitos fundamentais:
Lab 1.1: Primeiro Deploy (mão na massa)
Quiz Módulo 1: Valide seus conhecimentos
Capítulo criado em: Dezembro 2024