Implantação de Go no Kubernetes: guia básico para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que Go e Kubernetes são a dupla ideal

\n\n

Go (Golang) e Kubernetes (K8s) foram feitos um para o outro. O próprio Kubernetes é escrito em Go, portanto, o ferramental nativo, o desempenho e a simplicidade de implantação tornam essa combinação o padrão para microsserviços modernos. Se você está apenas começando sua jornada em DevOps ou deseja automatizar a implantação de sua aplicação Go, este guia o ajudará em todas as etapas: desde escrever um servidor HTTP simples em Go até executá-lo em um cluster Kubernetes.

\n\n

Neste artigo, abordaremos:

\n
    \n
  • Empacotamento da aplicação Go em uma imagem Docker
  • \n
  • Criação de manifestos Kubernetes mínimos (Deployment, Service, Ingress)
  • \n
  • Implantação e verificação de funcionamento
  • \n
\n\n

Pressupõe-se que você já tenha instalado docker, kubectl e minikube (ou acesso a qualquer cluster K8s).

\n\n

Passo 1: Escrevendo uma aplicação Go simples

\n\n

Vamos criar um servidor HTTP básico que responderá às requisições. Crie o arquivo main.go:

\n\n
package main\n\nimport (\n    "fmt"\n    "net/http"\n    "os"\n)\n\nfunc main() {\n    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {\n        fmt.Fprintf(w, "Olá do Go! Versão: %s", os.Getenv("APP_VERSION"))\n    })\n\n    port := os.Getenv("PORT")\n    if port == "" {\n        port = "8080"\n    }\n\n    fmt.Printf("Servidor iniciado na porta %s\\n", port)\n    http.ListenAndServe(":"+port, nil)\n}\n
\n\n

Esta aplicação lê a variável de ambiente APP_VERSION (pode ser definida na implantação) e escuta na porta especificada em PORT. Agora, teste localmente:

\n\n
go run main.go\n# Abra o navegador em http://localhost:8080\n
\n\n

Criando o módulo Go

\n

Inicialize o módulo para facilitar a compilação:

\n
go mod init my-go-app\n
\n\n

Passo 2: Conteinerização com Docker

\n\n

Para implantar no Kubernetes, é necessário empacotar a aplicação em uma imagem Docker. Usaremos compilação em múltiplos estágios (multi-stage build) para que a imagem seja mínima.

\n\n

Crie o arquivo Dockerfile:

\n\n
# Estágio de compilação\nFROM golang:1.22-alpine AS builder\nWORKDIR /app\nCOPY go.mod ./\nCOPY main.go ./\nRUN go build -o my-app .\n\n# Imagem final\nFROM alpine:3.19\nWORKDIR /app\nCOPY --from=builder /app/my-app .\nEXPOSE 8080\nCMD ["./my-app"]\n
\n\n

Compile a imagem e verifique:

\n
docker build -t my-go-app:v1 .\ndocker run -p 8080:8080 my-go-app:v1\n# http://localhost:8080\n
\n\n

Passo 3: Manifestos Kubernetes

\n\n

Agora, prepare os arquivos YAML para implantação no cluster. Criaremos três recursos: Deployment (gerenciamento de pods), Service (acesso de rede) e Ingress (acesso externo).

\n\n

3.1. Deployment

\n

Crie o arquivo deployment.yaml:

\n\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: go-app-deployment\n  labels:\n    app: go-app\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: go-app\n  template:\n    metadata:\n      labels:\n        app: go-app\n    spec:\n      containers:\n      - name: go-app\n        image: my-go-app:v1\n        ports:\n        - containerPort: 8080\n        env:\n        - name: APP_VERSION\n          value: "1.0.0"\n        - name: PORT\n          value: "8080"\n        livenessProbe:\n          httpGet:\n            path: /\n            port: 8080\n          initialDelaySeconds: 5\n          periodSeconds: 10\n
\n\n

Aqui, definimos 2 réplicas, uma sonda de atividade (liveness probe) e variáveis de ambiente.

\n\n

3.2. Service

\n

Crie o arquivo service.yaml para acesso interno:

\n\n
apiVersion: v1\nkind: Service\nmetadata:\n  name: go-app-service\nspec:\n  selector:\n    app: go-app\n  ports:\n  - protocol: TCP\n    port: 80\n    targe                

Blogs

Book Recommendations