📚 Certified Kubernetes Administrator
Referência técnica por domínio de prova + diário de estudo — Linux Foundation (LFS258) · PICK · Killercoda
Navegação rápida
Fundamentos
Introdução ao Curso e à Prova
O curso Kubernetes Fundamentals (LFS258) prepara para a certificação CKA e cobre desde a instalação e configuração de clusters até segurança, alta disponibilidade e troubleshooting. Não exige experiência prévia com Kubernetes — apenas conhecimento básico de Linux. O CKA é um exame hands-on de 2 horas com 15–20 tarefas em ambiente real de linha de comando, com nota mínima de 66% para aprovação e direito a uma segunda tentativa gratuita.
🔑 Conceitos-chave
| Conceito | O que é |
|---|---|
| Linux Foundation | Organização sem fins lucrativos que hospeda projetos open source críticos (Linux, Kubernetes, Node.js). Oferece cursos e certificações reconhecidas globalmente. |
| CKA | Certified Kubernetes Administrator. Prova hands-on, 2h, ambiente real, nota mínima 66%. Custa US$ 395 (inclui 1 retake gratuito em 12 meses). |
| CNCF | Cloud Native Computing Foundation — responsável por manter e certificar o Kubernetes. |
| LFS258 | Código do curso Kubernetes Fundamentals da Linux Foundation. Material atualizado em junho/2026. |
Fundamentos do Kubernetes
Kubernetes (κυβερνήτης = timoneiro em grego, abreviado K8s) é um orquestrador de contêineres open source criado pelo Google em 2014, baseado em 15 anos de experiência com os sistemas internos Borg e Omega. Automatiza o deploy, escalonamento e gerenciamento do ciclo de vida de contêineres em infraestruturas distribuídas. Segundo a pesquisa CNCF 2025, 82% das organizações que usam contêineres rodam Kubernetes em produção.
🔑 Conceitos-chave
| Objeto/Conceito | Função |
|---|---|
| Pod | Menor unidade do K8s. Agrupa 1+ contêineres que compartilham IP, storage e namespace. |
| Deployment | Operador padrão para gerenciar pods. Não controla pods diretamente — gerencia ReplicaSets. |
| ReplicaSet | Garante que o número desejado de pods esteja sempre rodando. |
| Service | Atribui IP estável e roteia tráfego entre pods usando labels. |
| Namespace | Isola recursos dentro do cluster. Permite multi-tenancy. |
| kubelet | Agente que roda em cada nó. Garante que os contêineres estejam alinhados com o estado declarado. |
| kube-proxy | Gerencia regras de rede em cada nó. |
| kube-apiserver | Ponto central de comunicação do cluster. |
| kube-controller-manager | Contém controllers internos (Deployment, ReplicaSet etc.). |
| etcd | Banco de dados chave-valor que armazena o estado do cluster. |
| Labels | Pares chave-valor nos metadados dos objetos. Permitem consulta e seleção eficiente. |
| Taints / Tolerations | Taints nos nós evitam agendamento de pods; Tolerations nos pods contornam esse bloqueio. |
| CRD | Custom Resource Definition — estende a API do K8s com novos tipos de objetos. |
🏗️ Arquitetura resumida
| Camada | Componentes principais |
|---|---|
| Control Plane | kube-apiserver, kube-controller-manager, kube-scheduler, etcd. Mínimo 3 nós para HA. |
| Worker Nodes | kubelet, kube-proxy, container runtime. Suporta Linux e Windows Server 2019/2022. |
Troubleshooting
30% da provaCluster Architecture, Installation & Configuration
25% da provaAmbiente de Estudo Local — kind + kubectl
Antes de estudar os conceitos do Kubernetes na prática, é preciso de um cluster local rápido de montar. O kind (Kubernetes IN Docker) sobe um cluster inteiro dentro de contêineres Docker em segundos. É ideal pra treinar comandos do dia a dia — mas não substitui prática com kubeadm real, que é o que a prova cobra na parte de instalação.
🛠️ Instalação passo a passo
| Etapa | Comando |
|---|---|
| 1. Docker | curl -fsSL https://get.docker.com | bash |
| 2. kind | curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.13.0/kind-linux-amd64chmod +x ./kind && mv kind /usr/local/binkind create cluster |
| 3. kubectl | curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl |
⚡ Alias e autocomplete
| O quê | Comando |
|---|---|
| Autocomplete | source <(kubectl completion bash)echo "source <(kubectl completion bash)" >> ~/.bashrc |
| Alias k=kubectl | alias k=kubectlcomplete -F __start_kubectl k |
k + autocomplete economiza segundos preciosos numa prova de 2h cronometradas. Configurar isso deveria ser reflexo, não escolha consciente.
Instalação e Configuração (kubeadm)
Este capítulo cobre a construção de um cluster Kubernetes real usando kubeadm, a ferramenta oficial de bootstrap — o que efetivamente cai na prova CKA. Envolve provisionar o control plane, adicionar workers ao cluster (join) e configurar a rede de pods via um plugin CNI.
🔑 Conceitos-chave
| Conceito | O que é |
|---|---|
| kubeadm | Ferramenta oficial que automatiza o bootstrap de um cluster mínimo viável. |
| Container runtime | Software que efetivamente roda os contêineres (containerd, CRI-O). Precisa estar instalado antes do kubeadm. |
| kubeadm init | Inicializa o primeiro nó do control plane. Gera certificados e o comando de join. |
| kubeadm join | Usado em cada novo nó pra se juntar ao cluster existente, via token e hash de certificado. |
| CNI | Plugin de rede (Calico, Flannel, Cilium) necessário após o init pros pods se comunicarem entre nós. Sem isso, nós ficam NotReady. |
| kubeconfig | Arquivo (~/.kube/config) com credenciais e endereço do cluster pro kubectl se conectar. |
| static pods | Componentes do control plane rodam como pods estáticos gerenciados pelo kubelet local, não pelo scheduler. |
🛠️ Fluxo típico
| Etapa | O que acontece |
|---|---|
| 1. Pré-requisitos | Container runtime em todos os nós, swap desabilitado, kernel/rede ajustados. |
| 2. Instalar pacotes | kubeadm, kubelet, kubectl via repositório oficial. |
| 3. kubeadm init | Só no primeiro control plane. Gera o token de join. |
| 4. Instalar CNI | Sem isso, CoreDNS fica pendente e nós não ficam Ready. |
| 5. kubeadm join | Nos demais nós, usando o token gerado. |
kubeadm init do zero, mas é comum precisar fazer join de um novo nó ou diagnosticar por que um nó não entrou no cluster (token expirado, CNI não instalado, runtime não configurado).
Services & Networking
20% da provaWorkloads & Scheduling
15% da provaPods — Criação, Edição e Multi-container
O Pod é a menor unidade implantável do Kubernetes. Este capítulo cobre a estrutura mínima de um manifesto de Pod, os fluxos de criação/edição via kubectl e como declarar múltiplos contêineres num mesmo Pod, compartilhando rede e, opcionalmente, volumes.
🔑 Conceitos-chave
| Conceito | O que é |
|---|---|
| Pod | Menor unidade do K8s. Um ou mais contêineres compartilhando IP, rede e, opcionalmente, storage. |
| Campos mutáveis | kubectl edit só permite alterar campos limitados (ex: image, tolerations). Pra mudar o resto, é preciso recriar o Pod. |
| Multi-container Pod | Contêineres no mesmo Pod acessam uns aos outros via localhost, cada um com seu próprio filesystem. |
| Sidecar container | Desde o K8s 1.28, initContainers com restartPolicy: Always rodam como sidecar de longa duração, junto ao container principal. |
🛠️ Comandos essenciais
| Ação | Comando |
|---|---|
| Gerar YAML sem aplicar | kubectl run nginx --image nginx -o yaml --dry-run=client |
| Substituir forçando recriação | kubectl replace -f pod.yaml --force --grace-period=0 |
| Editar pod (campos mutáveis) | kubectl edit po nome-do-pod |
| Extrair YAML de pod rodando | kubectl get po nome-do-pod -o yaml > pod.yaml |
| Logs em pod multi-container | kubectl logs nome-do-pod -c nome-do-container |
replace --force --grace-period=0). Isso é diferente de Deployment, que gerencia esse ciclo pra você via ReplicaSet.
Command e Args — Sobrescrevendo Entrypoint e Cmd
O Kubernetes espelha o conceito de ENTRYPOINT/CMD do Docker através dos campos command e args na definição do Pod. Entender a diferença entre os dois é essencial pra customizar o comportamento de um container sem precisar reconstruir a imagem.
🔑 Conceitos-chave
| Docker | Kubernetes | Função |
|---|---|---|
| ENTRYPOINT | command | Comando executado no container. Definir command substitui o ENTRYPOINT inteiro. |
| CMD | args | Argumentos passados pro comando. Definir args substitui só o CMD, mantendo o ENTRYPOINT original. |
🧩 Tabela de combinações
| Image Entrypoint | Image Cmd | Container command | Container args | Comando executado |
|---|---|---|---|---|
[/echo] | [foo] | não definido | não definido | echo foo |
[/echo] | [foo] | [/printf] | não definido | printf |
[/echo] | [foo] | não definido | [bar] | echo bar |
[/echo] | [foo] | [/printf] | [bar] | printf bar |
📝 Questão de prova (estilo real)
Um Dockerfile define ENTRYPOINT ["sleep"] e CMD ["5"]. Tarefa: criar um Pod que faça o container dormir 10 segundos em vez de 5, sem trocar o ENTRYPOINT.
apiVersion: v1 |
command sem definir args, o Cmd original da imagem some por completo — mesmo que não tenha relação com o que você queria mudar. Sempre replique os args originais se só quiser trocar o comando.
Storage
10% da prova📅 Diário de Estudo CKA
Command e args — sobrescrevendo ENTRYPOINT/CMD
Aula Command do PICK: diferença entre command/args do Kubernetes e ENTRYPOINT/CMD do Docker, tabela de combinações e exercício clássico do ubuntu-sleeper. Próximo: ReplicaSet e Deployment.
Pods — criação, edição e multi-container concluído
Aula de Pods do PICK finalizada: manifesto mínimo, fluxo de criação/edição/replace via kubectl e Pod com múltiplos contêineres. Decisão de metodologia: parar de imprimir PDF pra fichário e trabalhar direto do blog com duas telas.
Retomada — Day 1 revisado do zero
Recomecei a trilha "Preparação CKA" do PICK do zero, mesmo em 84% de progresso geral. Setup de ambiente local: Docker, kind, kubectl, alias k e autocomplete configurados. Próximo: aula de Pods.