Desenvolvimento

Rodando WordPress no Kubernetes com Kind no Windows 11 (sem WSL)

Tutorial: Rodando WordPress no Kubernetes com Kind no Windows 11 (sem WSL)

29 de outubro de 2025

Tutorial: Rodando WordPress no Kubernetes com Kind no Windows 11 (sem WSL)

Nível: Iniciante
Pré-requisitos: Windows 11, Docker Desktop instalado
Objetivo: Criar um cluster Kubernetes local com Kind, implantar WordPress + MySQL e acessá-lo pelo navegador em http://localhost:30008


📦 Parte 1: Instalando o Kind no Windows 11

Passo 1: Instale o Docker Desktop

  1. Baixe o Docker Desktop para Windows
  2. Instale e inicie o Docker Desktop
  3. Certifique-se de que o Docker está rodando (ícone no systray deve estar verde)

⚠️ Importante: Kind usa o Docker para criar nós do Kubernetes. Sem o Docker, o Kind não funciona.


Passo 2: Instale o kubectl (linha de comando do Kubernetes)

  1. Abra o PowerShell como Administrador
  2. Execute:
curl.exe -LO "https://dl.k8s.io/release/v1.30.0/bin/windows/amd64/kubectl.exe"
  1. Mova o executável para uma pasta no seu PATH (ex: C:\\Windows):
Move-Item .\\kubectl.exe C:\\Windows\\kubectl.exe
  1. Teste:
kubectl version --client

✅ Se aparecer a versão, está tudo certo!


Passo 3: Instale o Kind

  1. No PowerShell (não precisa ser admin):
curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.23.0/kind-windows-amd64
  1. Renomeie e mova para o PATH:
Move-Item .\\kind-windows-amd64.exe C:\\Windows\\kind.exe
  1. Teste:
kind version

✅ Pronto! Agora você tem kubectl e kind funcionando no Windows 11.


📘 Glossário Básico de Kubernetes

Antes de continuar, vamos entender os termos mais comuns:

Termo Definição
Kubernetes Plataforma open-source para automatizar implantação, escalonamento e gerenciamento de aplicações em contêineres.
Cluster Conjunto de máquinas (nós) que executam aplicações em contêineres gerenciadas pelo Kubernetes. Pode ser local (como com Kind) ou na nuvem.
Pod A menor unidade do Kubernetes. Um Pod pode conter um ou mais contêineres que compartilham rede e armazenamento.
kubectl Linha de comando usada para interagir com o cluster Kubernetes (criar, listar, deletar recursos, etc.).
Helm "Gerenciador de pacotes" do Kubernetes. Facilita a instalação de aplicações complexas (como WordPress) com apenas um comando. (Não usaremos Helm neste tutorial, mas é bom saber!)

🛠️ Parte 2: Criando o Cluster com Kind

Como o Kind não expõe portas automaticamente no Windows, precisamos configurar o mapeamento de portas.

Passo 1: Crie um arquivo de configuração do cluster

Abra o Bloco de Notas e cole:

# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30008
    hostPort: 30008
    listenAddress: "127.0.0.1"
    protocol: TCP

Salve como kind-config.yaml na sua pasta de trabalho (ex: C:\\k8s\\kind-config.yaml).

🔍 O que isso faz?
Mapeia a porta 30008 do seu computador → 30008 dentro do nó do cluster, permitindo acessar serviços do Kubernetes pelo navegador.


Passo 2: Crie o cluster

No PowerShell, na pasta onde está o kind-config.yaml:

kind create cluster --name wordpress-cluster --config kind-config.yaml

⏱️ Espere 1-2 minutos. O Kind baixa uma imagem do Kubernetes e sobe um contêiner com o nó de controle.


🧩 Parte 3: Implantando o WordPress + MySQL

Passo 1: Crie o arquivo de implantação

Crie um arquivo chamado wordpress-full.yaml com o seguinte conteúdo:

# wordpress-full.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
meta
  name: mysql-pvc
spec:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
meta
  name: mysql
spec:
  replicas: 1
  selector:
    matchLabels: { app: mysql }
  template:
    meta
      labels: { app: mysql }
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "senha123"
        - name: MYSQL_DATABASE
          value: "wordpress"
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-storage
        persistentVolumeClaim:
          claimName: mysql-pvc
---
apiVersion: v1
kind: Service
meta
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
---
apiVersion: apps/v1
kind: Deployment
meta
  name: wordpress
spec:
  replicas: 1
  selector:
    matchLabels: { app: wordpress }
  template:
    meta
      labels: { app: wordpress }
    spec:
      containers:
      - name: wordpress
        image: wordpress:6.6-php8.2-apache
        ports:
        - containerPort: 80
        env:
        - name: WORDPRESS_DB_HOST
          value: "mysql:3306"
        - name: WORDPRESS_DB_NAME
          value: "wordpress"
        - name: WORDPRESS_DB_USER
          value: "root"
        - name: WORDPRESS_DB_PASSWORD
          value: "senha123"
---
apiVersion: v1
kind: Service
meta
  name: wordpress
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30008
  selector:
    app: wordpress

💡 Explicação rápida:

  • Deployment: Define como rodar os contêineres (MySQL e WordPress)
  • Service: Expõe os pods na rede. O NodePort permite acesso externo.
  • PersistentVolumeClaim: Garante que os dados do MySQL não sejam perdidos se o Pod for recriado.

Passo 2: Aplique a configuração

No PowerShell:

kubectl apply -f wordpress-full.yaml

Aguarde 1-2 minutos para os contêineres serem baixados e iniciados.

Verifique se os pods estão prontos:

kubectl get pods

Você deve ver algo como:

NAME                         READY   STATUS    RESTARTS   AGE
mysql-xxxxx                  1/1     Running   0          1m
wordpress-xxxxx              1/1     Running   0          1m

🌐 Parte 4: Acessando o WordPress

Abra seu navegador e acesse:

👉 http://localhost:30008

Você verá a tela de instalação do WordPress!
Siga os passos (escolha idioma, crie usuário, etc.) e pronto: seu WordPress está rodando no Kubernetes!


🧹 Parte 5: Limpando Tudo (quando quiser)

Para remover tudo:

# Remove os recursos do Kubernetes
kubectl delete -f wordpress-full.yaml

# Remove o cluster Kind
kind delete cluster --name wordpress-cluster

📚 Guia Rápido: Principais Comandos do Kubernetes

Comando O que faz

kubectl get pods

Lista todos os pods em execução

kubectl get svc

Lista os serviços

kubectl logs <nome-do-pod>

Mostra os logs de um pod

kubectl describe pod <nome-do-pod>

Mostra detalhes de um pod (útil para debug)

kubectl apply -f arquivo.yaml

Cria ou atualiza recursos a partir de um arquivo YAML

kubectl delete -f arquivo.yaml

Remove recursos definidos no arquivo

kind create cluster --name <nome>

Cria um cluster local

kind delete cluster --name <nome>

Remove um cluster local

✅ Conclusão

Agora você sabe como:

  • Instalar Kind e kubectl no Windows 11 (sem WSL)
  • Criar um cluster Kubernetes local com mapeamento de portas
  • Implantar uma aplicação completa (WordPress + MySQL) no Kubernetes
  • Acessar sua aplicação pelo navegador

Esse é um ótimo ponto de partida para explorar mais do Kubernetes: Ingress, ConfigMaps, Secrets, Helm, e muito mais!

📌 Dica para o futuro: Quando quiser testar outras aplicações, basta alterar o arquivo YAML ou usar o kubectl port-forward para acesso rápido sem NodePort.