Kubernetes na prática, de um nó MicroK8s novo até um setup seguro, observável e reproduzível.
Por que o scheduler compara requests com allocatable e não com a memória livre, Pods Pending por Insufficient memory, reservar memória para o sistema e um orçamento de memória do nó.
Instalar o MicroK8s a partir de um canal de snap fixado, o que roda dentro do snap, esperar o cluster ficar pronto, kubectl sem sudo e gerar um relatório de diagnóstico.
Exportar o kubeconfig, contextos e arquivos KUBECONFIG combinados, e por que o certificado de admin do MicroK8s (system:masters, dez anos, sem revogação) não deve ser compartilhado.
Onde o MicroK8s guarda as flags dos componentes, e como fazer o containerd dele confiar num registry com CA privada via certs.d/<host:porta>/hosts.toml.
Habilitar add-ons, como o CoreDNS escolhe os resolvers upstream, e onde os volumes hostpath realmente ficam, incluindo capacidade não aplicada e reclaim Delete.
Os cinco objetos por trás de quase todo deploy, como controllers e label selectors os ligam, e quais você escreve e quais você só observa.
Como os requests guiam o agendamento e os limits são aplicados pelo kernel, OOMKilled vs throttling de CPU, e como as classes de QoS decidem a ordem de eviction.
Como JVM, Node.js, .NET e Go dimensionam o heap sob um limit de container, o que fica fora do heap, e uma regra de dimensionamento que evita OOMKilled.
O que cada probe dispara, como os campos de tempo se combinam, e as regras que impedem as probes de transformar uma dependência lenta numa queda geral.
maxSurge e maxUnavailable com suas regras de arredondamento, como um rollout quebrado aparece, e quando Recreate é a escolha certa.
Workloads que rodam até terminar: Never vs OnFailure, backoffLimit, deadlines, ttlSecondsAfterFinished, por que reaplicar um Job falha, e CronJobs.
get, describe, apply, delete, formatos de saída, flags de namespace e --dry-run para gerar YAML, com as armadilhas que importam no dia a dia.
Credenciais de registry com Secrets dockerconfigjson, anexadas por Pod ou por ServiceAccount, e como escolher uma imagePullPolicy honesta sobre o que está rodando.
envFrom e valueFrom, precedência e nomes de chave, chaves faltando e CreateContainerConfigError, por que mudanças não chegam a Pods em execução, e variáveis de service links.
O que uma Secret realmente é, como o kubectl monta uma a partir de um env file (e o que ele rejeita), por que base64 não é criptografia, e quem de fato consegue lê-la.
Por que uma Secret rotacionada chega aos arquivos montados em cerca de um minuto mas nunca chega às variáveis de ambiente nem às montagens com subPath, e por que arquivos vazam menos do que env vars.
Montar várias Secrets em um único diretório com um volume projected, a colisão silenciosa de chaves em que a última source vence, e como items/path mantém os tenants separados.
Como Services dão aos Pods um endereço estável, a faixa de NodePort e como alcançá-la de fora do cluster, e quando usar um Ingress no lugar.
Roteamento por host e path com Ingress, o que o add-on de ingress do MicroK8s instala hoje (Traefik), o fim de vida do ingress-nginx, e HTTPRoutes com a Gateway API.
Issuer vs ClusterIssuer, criar uma CA raiz privada dentro do cluster, emitir certificados de Ingress a partir dela, e fazer os clientes confiarem nela.
Issuers ACME, os requisitos de cada desafio, wildcards e clusters privados, depuração de desafios pendentes, e validades de certificado cada vez mais curtas.
Nomes de Service dentro e entre namespaces, a lista de search e o ndots, como depurar a resolução, e por que políticas de egress podem quebrar o DNS.
Volumes emptyDir, configMap, secret e projected, e os erros de montagem que escondem arquivos da imagem, congelam conteúdo de subPath ou falham com StartError.
Modos de binding, o Pending normal e o quebrado, access modes, reclaim policies, e como verificar que os dados sobrevivem a restarts de Pod e de nó.
O que backups no nível do nó, o Velero e snapshots CSI conseguem salvar num nó único (o Velero não lê volumes hostPath), e como cronometrar um teste de restauração.
Por que containers não root recebem Permission denied em volumes novos, como o fsGroup funciona, quando ele não faz nada (hostPath), e o fsGroupChangePolicy.
Transmitir um dump para fora do cluster com kubectl exec, restaurá-lo, e um CronJob de backup que falha de verdade quando o dump falha (o problema do pipe com sh -e).
Camadas de YAML puro com bases, overlays e components opcionais, labels vs commonLabels, e como pré-visualizar com kubectl kustomize e kubectl diff.
Serviços compartilhados e aplicações em namespaces separados, o que atravessa a fronteira de um namespace, e uma ordem de aplicação que funciona num cluster vazio.
configMapGenerator e secretGenerator a partir de literals, env files e arquivos, merge e replace entre camadas, e como o sufixo de hash dispara rollouts.
O transformer de imagens para trocar registry e tag, e como estruturar uma única imagem nos papéis de web, worker e migração.
Os dois formatos de patch, como listas com e sem merge key se comportam, targets por kind, nome e labels, e os modos de falha de cada um.
Reiniciar e forçar a remoção de Pods com segurança, escalar para zero, e diagnosticar um namespace preso em Terminating pelos seus finalizers.
Acompanhar um rollout em scripts, o que o rollout restart faz de verdade, histórico de revisões e change causes, e o que o rollout undo desfaz e o que não desfaz.
Uma identidade de menor privilégio para o CI, um kubeconfig de contexto único, render, diff, apply e rollout status, e deploys push vs pull (GitOps).
Um script de bootstrap que pode rodar de novo com segurança: comandos idempotentes e não idempotentes, o padrão dry-run e apply, esperas explícitas e testes de reconstrução.
Phases, conditions e estados de container por trás da coluna STATUS, de onde cada status vem, e o que verificar primeiro em cada caso.
As mensagens exatas para tag inexistente, credenciais negadas, CA não confiável, host que não resolve e arquitetura errada, e a correção de cada uma.
Tipos e campos de eventos, como lê-los na ordem certa (a armadilha do sort-by), retenção de cinco minutos no MicroK8s, e exportação de eventos.
Um procedimento repetível: exit codes e reasons, logs da tentativa anterior, eventos, e como manter vivo um container que cai para inspecioná-lo.
Habilitar o metrics-server, o que os números do kubectl top significam, comparar uso com requests e limits, e dimensionar a partir do histórico do Prometheus.
Rodar comandos dentro de containers, containers efêmeros de debug para imagens sem shell, e túneis de port-forward com os seus limites.
O que o add-on de observabilidade do MicroK8s instala (e os seus padrões), como ServiceMonitors são selecionados, e o label release que esconde targets em silêncio.
As regras de alerta que já vêm prontas, escrever regras para restarts, memória e disco, e rotear alertas para fora do receiver null padrão.
Como os logs dos containers são coletados, o que o add-on traz (Loki 2.6 e o Promtail em fim de vida), a migração para o Alloy, labels e LogQL.
runAsNonRoot, allowPrivilegeEscalation, remoção de capabilities, seccomp e sistema de arquivos raiz somente leitura, como verificar cada um, e o que quebra.
Os níveis privileged, baseline e restricted, os modos enforce, warn e audit, Deployments aceitos enquanto os seus Pods são rejeitados, e uma adoção segura.
O MicroK8s roda com AlwaysAllow até o RBAC ser habilitado; Roles, bindings, testes com auth can-i, permissões perigosas, e como substituir concessões de cluster-admin.
O que é o token montado automaticamente, quando desligá-lo com automountServiceAccountToken, ServiceAccounts dedicadas, e tokens com audience própria.
Default deny de entrada e saída, regras entre namespaces, selectors AND vs OR, e como liberar o DNS para que políticas de egress não quebrem a resolução de nomes.