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

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 perfeita

Go (Golang) e Kubernetes são duas ferramentas-chave no desenvolvimento moderno. Go, criado no Google, é uma linguagem compilada e estaticamente tipada que é ideal para construir microsserviços de alto desempenho. Kubernetes, por sua vez, é o padrão de facto para orquestração de contêineres. A combinação deles fornece um ecossistema poderoso: você escreve código leve e rápido em Go, empacota-o em uma imagem Docker, e o Kubernetes gerencia sua execução, escalonamento e recuperação.

Neste guia, vamos implantar passo a passo uma aplicação Go simples no Kubernetes. Você aprenderá como escrever um Dockerfile, criar manifestos Deployment e Service, e aplicá-los em um cluster. O artigo é voltado para desenvolvedores que já conhecem os fundamentos do Go e têm uma noção básica de Docker.



Passo 1: Criando e conteinerizando a aplicação Go

Vamos começar com um servidor HTTP simples em Go. Crie o arquivo main.go:

package main

import ( "fmt" "net/http" "os")

func main() { port := os.Getenv("PORT") if port == "" { port = "8080" } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello from Go on Kubernetes!") }) http.ListenAndServe(":"+port, nil)}

Este código escuta na porta definida pela variável de ambiente PORT (padrão 8080) e retorna uma mensagem simples.



Construindo a imagem Docker

Agora vamos criar um Dockerfile para uma construção multi-estágio — isso reduzirá o tamanho da imagem final:

# Estágio de construçãoFROM golang:1.21-alpine AS builderWORKDIR /appCOPY go.mod go.sum ./RUN go mod downloadCOPY . .RUN CGO_ENABLED=0 GOOS=linux go build -o /app/server .

# Imagem finalFROM alpine:latestRUN apk --no-cache add ca-certificatesWORKDIR /root/COPY --from=builder /app/server .EXPOSE 8080CMD ["./server"]

Construa a imagem e envie-a para um registro (por exemplo, Docker Hub):

docker build -t yourusername/go-k8s-app:v1 .docker push yourusername/go-k8s-app:v1


Passo 2: Manifesto Deployment

O Kubernetes usa manifestos YAML para descrever o estado desejado do cluster. Crie o arquivo deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  name: go-app-deployment  labels:    app: go-appspec:  replicas: 3  selector:    matchLabels:      app: go-app  template:    metadata:      labels:        app: go-app    spec:      containers:      - name: go-app        image: yourusername/go-k8s-app:v1        ports:        - containerPort: 8080        env:        - name: PORT          value: "8080"        readinessProbe:          httpGet:            path: /            port: 8080          initialDelaySeconds: 5          periodSeconds: 10        livenessProbe:          httpGet:            path: /            port: 8080          initialDelaySeconds: 15          periodSeconds: 20

Análise dos campos principais:

  • replicas: 3 — O Kubernetes manterá 3 instâncias (pods) da aplicação em execução.
  • readinessProbe — Verifica se o pod está pronto para receber tráfego (requisições para /).
  • livenessProbe — Verifica se o pod está vivo; se não estiver, o Kubernetes o reiniciará.


Passo 3: Manifesto Service

Para tornar a aplicação acessível dentro do cluster ou externamente, é necessário um Service. Crie o service.yaml:

apiVersion: v1kind: Servicemetadata:  name: go-app-servicespec:  selector:    app: go-app  ports:    - protocol: TCP      port: 80      targetPort: 8080  type: LoadBalancer
  • selector — Liga o serviço aos pods que possuem a label

Blogs

Book Recommendations