Entendendo o Kubernetes: Uma Abordagem Detalhada dos Recursos Principais

O Kubernetes é uma plataforma complexa composta por múltiplos recursos que trabalham juntos para fornecer uma infraestrutura de cluster moderna e escalável. Neste artigo, vamos explorar cada um desses recursos de forma detalhada, abordando seu funcionamento, exemplos de comandos e como eles colaboram para a automação, escalabilidade e resiliência de aplicações.
1. PODS – A Unidade de Execução
Os Pods são a menor unidade de execução no Kubernetes, podendo conter um ou mais contêineres que compartilham o mesmo namespace de rede, armazenamento e, opcionalmente, recursos de CPU e memória.
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
2. REPLICASETS – Garantindo a Quantidade de Pods
ReplicaSet é um recurso que mantém um número definido de Pods ativos, garantindo a escalabilidade e a resiliência das aplicações.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
3. DEPLOYMENTS – Controle de Versões e Atualizações sem Downtime
Deployment combina ReplicaSet com estratégias de rollout, permitindo atualizações contínuas e versionamento de aplicações.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
4. SERVICES – Expondo o Cluster
Service abstrai um conjunto de Pods e fornece um endereço IP estável e um nome DNS interno, facilitando a comunicação entre os componentes da aplicação.
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
5. CONFIGMAPS – Dados de Configuração
ConfigMap armazena pares chave-valor que podem ser usados como arquivos de configuração, variáveis de ambiente ou argumentos de linha de comando.
kubectl create configmap app-config \
--from-literal=DB_HOST=database \
--from-literal=DB_PORT=5432
6. SECRETS – Dados Sensíveis
Secret armazena dados sensíveis (senha, token, certificado) de forma segura.
kubectl create secret generic db-pass --from-literal=password=superSecret
7. PERSISTENT VOLUME (PV) & CLAIM (PVC) – Armazenamento de Dados
PV representa recursos de armazenamento físico (NFS, iSCSI, EBS). PVC é a solicitação de armazenamento por parte de um pod.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-demo
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/data
8. INGRESS – Entrada Externa ao Cluster
Ingress define regras de entrada HTTP/HTTPS para serviços internos usando um controlador (NGINX, Traefik).
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: frontend-ingress
spec:
tls:
- hosts:
- example.com
secretName: tls-secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80
9. HORIZONTAL POD AUTOSCALER (HPA) – Escala Automática
HPA ajusta o número de réplicas com base em métricas (CPU, memória, ou custom).
kubectl autoscale deployment/nginx-deploy --cpu-percent=50 --min=1 --max=5
10. CRONJOB – Execução Programada
CronJob cria Jobs em intervalos definidos (cron).
apiVersion: batch/v1
kind: CronJob
metadata:
name: backup-job
spec:
schedule: "0 */6 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: busybox
args: ["sh", "-c", "echo backup > /backup.log"]
restartPolicy: OnFailure
Cada recurso abordado neste artigo desempenha um papel crucial na operação eficaz de um cluster Kubernetes, proporcionando uma base sólida para a construção de aplicações resilientes, escaláveis e seguras. Ao compreender e dominar esses recursos, você estará apto a projetar e operar aplicações complexas com eficiência.