Despliegue de una aplicación Go en Kubernetes: guía básica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: por qué Go y Kubernetes son la pareja ideal

Go (Golang) y Kubernetes son dos herramientas clave en el desarrollo moderno. Go, creado en Google, es un lenguaje compilado, tipado estáticamente, ideal para crear microservicios de alto rendimiento. Kubernetes, por su parte, es el estándar de facto para la orquestación de contenedores. Su combinación proporciona un ecosistema potente: escribes código ligero y rápido en Go, lo empaquetas en una imagen Docker, y Kubernetes gestiona su ejecución, escalado y recuperación.

En esta guía, desplegaremos paso a paso una aplicación Go simple en Kubernetes. Aprenderás cómo escribir un Dockerfile, crear los manifiestos Deployment y Service, y aplicarlos en un clúster. El artículo está dirigido a desarrolladores que ya conocen los fundamentos de Go y tienen una comprensión básica de Docker.



Paso 1: Creación y contenerización de la aplicación Go

Empecemos con un servidor HTTP simple en Go. Crea el archivo 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 escucha en el puerto especificado por la variable de entorno PORT (por defecto 8080) y devuelve un mensaje simple.



Construcción de la imagen Docker

Ahora crearemos un Dockerfile para una compilación multi-etapa, lo que reducirá el tamaño de la imagen final:

# Etapa de compilaciónFROM 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 .

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

Construye la imagen y envíala a un registro (por ejemplo, Docker Hub):

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


Paso 2: Manifiesto Deployment

Kubernetes utiliza manifiestos YAML para describir el estado deseado del clúster. Crea el archivo 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: tunombredeusuario/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

Desglose de los campos clave:

  • replicas: 3 — Kubernetes mantendrá 3 instancias (pods) en ejecución de la aplicación.
  • readinessProbe — verifica si el pod está listo para recibir tráfico (solicitudes a /).
  • livenessProbe — verifica si el pod está vivo; si no, Kubernetes lo reiniciará.


Paso 3: Manifiesto Service

Para hacer que la aplicación sea accesible dentro del clúster o desde el exterior, se necesita un Service. Crea service.yaml:

apiVersion: v1kind: Servicemetadata:  name: go-app-servicespec:  selector:    app: go-app  ports:    - protocol: TCP      port: 80      targetPort: 8080  type: LoadBalancer
  • selector — vincula el servicio con los pods que tienen la etiqueta

Blogs

Book Recommendations