Entendendo o Kubernetes: Uma Abordagem Detalhada dos Recursos Principais

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.