← Voltar ao Painel

Cloud & Kubernetes

Fundamentos de Docker, Kubernetes, Helm e deploys em produção.

📖 Lições

1.1 — Introdução ao Kubernetes⬜ Pendente · 15 min

O que é o Kubernetes?

O Kubernetes é uma plataforma de orquestração de contêineres que automatiza a implantação, escalamento e gestão de aplicações em contêiner.

Conceitos Fundamentais

  • Pod: menor unidade executável (1+N contêineres)
  • Service: expose pods com IP estático e DNS
  • Deployment: manage replica sets e rolling updates
  • Ingress: HTTP routing com TLS termination
  • ConfigMap: configuração externa ao container

1.2 — Deploy Estático⬜ Pendente · 20 min

Padrão de Deploy no demo1

No cluster demo1 do Lab Infocepo, a estrutura padrão é:

1. ConfigMap com HTML estático
2. Deployment com container nginx:alpine
3. Service ClusterIP
4. Ingress com ingressClassName: public + cert-manager

Este padrão garante TLS automático e roteamento HTTP sem necessidade de backend.

1.3 — Ingress & TLS⬜ Pendente · 15 min

TLS Automático

O cert-manager usa o ClusterIssuer letsencrypt-prod para pedir certificados Let's Encrypt automaticamente. O Ingress referencia o Secret gerado via tls.secretName.

Configuração típica no demo1:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    kubernetes.io/ingress.class: public
spec:
  ingressClassName: public
  tls:
  - hosts:
    - app.demo1.ai-dev.numerique-interieur.com
    secretName: app-tls
  rules:
  - host: app.demo1.ai-dev.numerique-interieur.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app-svc
            port:
              number: 80

1.4 — ConfigMaps & Volumes⬜ Pendente · 15 min

ConfigMaps

Permitem separar configuração do código. Usados para ficheiros estáticos, nginx.conf e imagens.

kubectl create configmap myapp-html --from-file=index.html
kubectl create configmap nginx-config --from-file=nginx.conf

Mount via volume no Deployment:

volumes:
- name: html
  configMap:
    name: myapp-html
containers:
- name: nginx
  volumeMounts:
  - name: html
    mountPath: /usr/share/nginx/html
    readOnly: true

1.5 — Helm Charts⬜ Pendente · 20 min

O que é Helm?

Gerenciador de pacotes do Kubernetes — empacota aplicações com templates configuráveis.

  • Chart: pacote com templates, valores, e metadata
  • Release: instância de um chart instalada no cluster
  • values.yaml: configurações personalizáveis

Instalar um chart:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install myapp bitnami/nginx -f values.yaml

1.6 — CI/CD com GitHub⬜ Pendente · 20 min

Pipeline Automático

GitHub Actions + kubectl para deploys automáticos a cada commit em main.

name: Deploy
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Deploy to demo1
      run: |
        kubectl apply -f k8s/
        kubectl rollout status deployment/myapp

No demo1, o pipeline é configurado via webhook no cluster.

❓ Quiz de Avaliação

Qual é o padrão de deployment no cluster demo1 para aplicações estáticas?

A
Docker Compose com PostgreSQL
B
Deployment nginx:alpine → Service ClusterIP → Ingress com ingressClassName "public" + cert-manager
C
Helm Chart com Apache e MySQL
D
VM com Nginx manual