Setup do participante — o ambiente de labs local (kind)¶
Este guia leva você de um laptop zerado até um cluster Kubernetes funcionando e
pronto para os labs com um comando: ./workshop up. Ele cobre a escolha do
container engine (incluindo a nota de licenciamento do Docker Desktop), a
instalação da toolchain pinada, o caminho Windows/WSL2 e a resolução de problemas.
Prefere um cluster compartilhado? Se o seu facilitador entregou um kubeconfig e um namespace atribuído, você não precisa de nada disto — pule direto para
../labs/day-1/00-setup.mde siga o caminho de namespace. Este guia é apenas para o ambiente local com kind.
O que você ganha¶
./workshop up executa, nesta ordem:
- Preflight — detecta o seu OS/arch, encontra um container engine em execução (Docker e, em seguida, Podman) e faz uma checagem de sanidade de CPUs/RAM (apenas warnings).
- Tools — instala uma toolchain pinada com mise
(kubectl, kind, helm, k9s, jq, yq, gum), verificada contra checksums reais em
mise.lock. - Cluster — cria um cluster kind de node único
chamado
workshop, usando a node image pinada por digest eminfra/versions.env. - Doctor — executa
./workshop doctorpara confirmar que o cluster responde, que os nodes estão Ready e que um Pod de smoke roda e é removido.
Quando terminar em verde, comece os labs em
../labs/day-1/00-setup.md.
Passo 1 — escolha e inicie um container engine¶
O kind roda nodes Kubernetes como containers, então você precisa de um container engine com um daemon/máquina em execução. Escolha um:
| Engine | Plataformas | Notas |
|---|---|---|
| Docker Desktop | macOS, Windows, Linux | O mais fácil, mas veja a nota de licenciamento abaixo. |
| Podman Desktop | macOS, Windows, Linux | CNCF, Apache-2.0. Suporte de primeira classe ao kind. No Windows a máquina precisa ser rootful para o kind. |
| colima | macOS, Linux | CLI leve (colima start); combina com o Docker CLI. |
| Rancher Desktop | macOS, Windows, Linux | Funciona, mas desative o Kubernetes embutido para ele não brigar com o kind. |
Nota de licenciamento do Docker Desktop. O Docker Desktop é gratuito para uso pessoal, educação e pequenas empresas — mas uma assinatura paga é necessária para uso profissional em organizações maiores (conforme os termos da Docker: 250+ funcionários OU mais de US$ 10M de receita anual). Se isso descreve o seu empregador, use Podman Desktop (CNCF, Apache-2.0) ou colima no lugar — ambos funcionam com o kind e com este workshop. Nada nos labs depende especificamente do Docker.
Inicie o seu engine antes de continuar:
- Docker Desktop / Rancher Desktop / Podman Desktop: abra o aplicativo.
- colima:
colima start --cpu 4 --memory 8 - Podman (CLI):
podman machine init && podman machine start(no Windows, deixe-a rootful:podman machine set --rootful).
O bootstrap sonda o Docker primeiro, depois o Podman, e imprime um erro útil se nenhum dos dois estiver acessível.
Passo 2 — obtenha o repositório e execute¶
git clone <this-repo-url> kubernetes-workshop
cd kubernetes-workshop
./workshop up
É isso. A primeira execução baixa as ferramentas pinadas e a node image do kind, então reserve alguns minutos no Wi-Fi de conferência. As execuções seguintes são quase instantâneas.
O bootstrap invoca as ferramentas recém-instaladas através do mise imediatamente,
então a criação do cluster não exige reiniciar o shell. Um processo, porém, não
consegue atualizar o shell que o lançou. Se o kubectl ainda não estava no seu
PATH, o bootstrap bem-sucedido imprime o único comando eval "$(mise activate …)"
a executar antes de copiar os comandos dos labs para esse mesmo terminal.
Você não precisa instalar o mise por conta própria — ./workshop up o instala
se estiver faltando (de forma interativa). Se preferir instalá-lo de antemão,
qualquer uma destas opções funciona e é detectada automaticamente:
# macOS / Linux
brew install mise # Homebrew
curl https://mise.run | sh # official installer; bytes are not checksum-pinned here
# Windows participants run Linux tools inside WSL2 — see Step 3
curl https://mise.run | sh
O comando do instalador do mise acima é um risco temporário explicitamente aceito:
os bytes que ele baixa não são pinados por checksum neste repositório. Uma vez que o
mise esteja presente, as ferramentas do participante são uma fronteira de confiança
separada: suas versões pinadas ficam em mise.toml e os checksums dos artefatos
ficam em mise.lock. Participantes que preferirem instalar as ferramentas na mão
podem ler as versões exatas nesses arquivos — o lockfile é a documentação.
Passo 3 — Windows: use WSL2 (suporte parcial)¶
O PowerShell nativo do Windows não é suportado (o kind e o bootstrap esperam um userland Linux). O caminho pretendido no Windows é o WSL2. Em um PowerShell elevado, uma única vez:
wsl --install
wsl --update
wsl --set-default-version 2
wsl --list --verbose
Reinicie se solicitado, abra a sua distro WSL2 (por exemplo, Ubuntu) e então execute
./workshop up de dentro do WSL2. Se você executá-lo pelo PowerShell por engano,
o bootstrap detecta isso e imprime estes mesmos comandos.
Esta rota é testada por contrato, mas ainda não completou sua rodada de aceitação ao
vivo no WSL2. Não a apresente como oficialmente suportada ainda. A tupla mínima
provisória e o release gate estão em windows-wsl2.md.
Escolha de engine no WSL2:
- Docker Desktop com o backend WSL2 habilitado (Settings → Resources → WSL integration) — sujeito à nota de licenciamento acima.
- Podman dentro do WSL2 — lembre-se de que a máquina precisa ser rootful
para o kind (
podman machine set --rootful).
Clone o repositório dentro do filesystem Linux do WSL2 (por exemplo, ~/src), e não
sob /mnt/c: arquivos montados do Windows são mais lentos e podem não preservar o
comportamento do bit de execução que os scripts esperam. O bootstrap diagnostica esse
layout, quebras de linha CRLF, bits de execução ausentes e um socket de integração do
Docker Desktop indisponível, com passos de recuperação direcionados.
Para requisitos de virtualização e recursos, orientações de proxy/VPN, dispositivos
gerenciados e a checklist de validação ao vivo, veja o guia dedicado
windows-wsl2.md.
Dispositivo gerenciado? Participantes que não conseguem instalar ou rodar containers locais podem usar um kubeconfig fornecido pelo facilitador e um namespace atribuído na nuvem. Isso evita o kind e o acesso de administrador local, mas por enquanto ainda exige um terminal com
kubectl. Um shell apenas no navegador é trabalho futuro (US-ENV-6).
Passo 4 — uso no dia a dia¶
./workshop doctor # is my machine still lab-ready?
./workshop up # (idempotent) bring the cluster back if it's gone
./workshop down # delete the cluster (asks to confirm)
./workshop doctor também é a primeira tarefa do Lab 00, então "minha máquina está
pronta?" é um passo de lab, não uma fila de suporte.
Não interativo / CI¶
Todo passo também roda sem prompts. Defina WORKSHOP_NONINTERACTIVE=1 (ou execute
sob CI=true, ou sem TTY) e defaults sensatos são assumidos — este é exatamente o
caminho que a CI executa, então o script que você roda localmente é o script que é
testado. Use ./workshop down --yes (ou -y) para pular a confirmação de teardown
em scripts.
Profiles de roteamento (Envoy vs Contour)¶
Ingress (S08) e Gateway API (S09) precisam de controllers diferentes que querem, os dois, as host ports 80/443. O workshop portanto expõe dois profiles mutuamente exclusivos:
| Profile | Comando | Lab | Notas |
|---|---|---|---|
gateway-envoy (canônico) |
./workshop profile gateway-envoy |
S09 | Gateway API CRDs + Envoy Gateway; GatewayClass eg |
ingress-contour (opcional) |
./workshop profile ingress-contour |
S08 | Contour Ingress controller; IngressClass contour |
O preflight se recusa a instalar um enquanto o outro (ou um controller estranho)
estiver presente, e imprime uma remediação. Para trocar:
./workshop profile transition gateway-envoy (ou make profile-transition TO=gateway-envoy).
O teardown remove apenas recursos pertencentes ao workshop e preserva os
Gateway API CRDs compartilhados.
Os manifestos precisam nomear a class explicitamente (gatewayClassName: eg /
ingressClassName: …) — nunca conte com um default acidental do cluster.
Troubleshooting¶
| Sintoma | Correção |
|---|---|
no reachable container engine |
Inicie o Docker Desktop / colima start / podman machine start. No WSL2, habilite a integração do Docker Desktop para a distribuição e verifique docker info. No Podman para Windows, deixe a máquina rootful. |
native Windows (PowerShell) is not supported |
Você não está no WSL2. Abra a sua distro WSL2 e execute novamente de lá (Passo 3). |
repository is on a mounted Windows drive |
Clone novamente sob ~/src, no filesystem Linux do WSL2. |
CRLF line endings / not executable |
Siga o comando de reparo impresso por ./workshop; veja a tabela de troubleshooting do WSL2. |
mise is required but not installed (não interativo) |
Instale o mise no ambiente Linux/macOS atual (brew install mise ou curl https://mise.run \| sh) e execute novamente. Participantes no Windows precisam fazer isso dentro do WSL2. |
kubectl: command not found depois de um bootstrap verde |
Execute o comando mise activate impresso por ./workshop up no shell atual. Você não precisa recriar o cluster. |
| O cluster kind não é criado / está inacessível | Reset de pânico: ./workshop down e depois ./workshop up (equivalente a make kind-down && make kind-up). |
| Lento / travando nos downloads | Wi-Fi de conferência. O cache de ferramentas e a node image são baixados apenas uma vez; tente de novo — o mise retoma. |
doctor reporta um WARN de versão |
Seu kubectl/kind local difere do pin. É um warning, não uma falha; ./workshop usa o ambiente pinado do mise. Ative o mise como descrito acima para comandos manuais. |
Se ./workshop up terminar verde mas um lab posterior se comportar mal, execute
./workshop doctor primeiro — ele revalida o cluster e imprime uma dica direcionada
por falha.
Por baixo do capô¶
- Versões são pinadas em um único lugar,
infra/versions.env(kind + kubectl + digest da node image), e espelhadas emmise.toml; os checksums ficam emmise.lock. ./workshopé um wrapper fino sobreinfra/bootstrap.sh, que orquestra peças existentes e testadas — o cluster é criado pormake kind-upe a saúde é oinfra/doctor.sh. Nada é reimplementado.- gum fornece os prompts/spinners bonitos quando você roda de forma interativa; é puro açúcar e nunca obrigatório.
Veja ../labs/README.md para a lista completa de ferramentas e
a alternativa de cluster compartilhado.