Despliegue de Swift en Kubernetes: guía básica práctica

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

Despliegue de Swift en Kubernetes: guía básica práctica



Swift no es solo un lenguaje para aplicaciones móviles. Gracias a frameworks como Vapor y Kitura, Swift se utiliza activamente para crear soluciones de servidor. Sin embargo, para ejecutar dicha aplicación en producción, se necesita una orquestación confiable. Kubernetes (K8s) es la herramienta ideal para gestionar servicios contenerizados. En esta guía, analizaremos el ciclo completo de despliegue de una aplicación Swift en un clúster de Kubernetes: desde la contenerización hasta la creación de manifiestos funcionales.



1. Preparación de la aplicación Swift y contenerización



Antes de hablar de Kubernetes, debemos empaquetar su aplicación Swift en una imagen Docker. Consideremos un ejemplo basado en el framework Vapor (pero el enfoque es universal para cualquier servidor Swift).



Cree una aplicación Vapor mínima:



// Sources/App/routes.swiftimport Vapor

func routes(_ app: Application) throws { app.get { req async in "Hello, Kubernetes!" }}


Ahora escribamos el Dockerfile. Importante: use la imagen oficial de Swift para la compilación y, para el contenedor final, una imagen ligera (por ejemplo, ubuntu:jammy). Esto reducirá el tamaño y mejorará la seguridad.



# ---- Build Stage ----FROM swift:5.9-jammy AS build

WORKDIR /appCOPY Package.swift Package.resolved ./COPY Sources ./SourcesRUN swift build -c release --static-swift-stdlib

# ---- Run Stage ----FROM ubuntu:jammy

RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*WORKDIR /appCOPY --from=build /app/.build/release/Run .

EXPOSE 8080CMD ["./Run"]


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



docker build -t tudockerhub/swift-k8s-demo:latest .docker push tudockerhub/swift-k8s-demo:latest


2. Fundamentos de Kubernetes: Pod y Deployment



Kubernetes gestiona los contenedores a través de objetos. El más simple es Pod, pero para producción es mejor usar Deployment, que proporciona replicación y actualizaciones.



Creemos el archivo deployment.yaml:



apiVersion: apps/v1kind: Deploymentmetadata:  name: swift-demo  labels:    app: swift-demospec:  replicas: 2  selector:    matchLabels:      app: swift-demo  template:    metadata:      labels:        app: swift-demo    spec:      containers:      - name: swift-app        image: tudockerhub/swift-k8s-demo:latest        ports:        - containerPort: 8080        resources:          requests:            memory: "128Mi"            cpu: "250m"          limits:            memory: "256Mi"            cpu: "500m"        livenessProbe:          httpGet:            path: /            port: 8080          initialDelaySeconds: 5          periodSeconds: 10


Aplique el manifiesto:



kubectl apply -f deployment.yaml


Verifique el estado:



kubectl get pods -l app=swift-demo


3. Servicio (Service) para acceder a la aplicación



Los Pods son dinámicos (sus IP cambian al reiniciarse). Para que los clientes puedan acceder de manera estable a la aplicación, se necesita un Service. Creemos service.yaml:



apiVersion: v1kind: Servicemetadata:  name: swift-servicespec:  selector:    app: swift-demo  ports:    - protocol: TCP      port: 80      targetPort: 8080  type: ClusterIP


Para pruebas en un clúster local (por ejemplo, Minikube), se puede usar NodePort o redirección de puertos:



kubectl port-forward service/swift-service 8080:80


Ahora la aplicación está disponible en http://localhost:8080.



4. Escalado y actualización (Rolling Update)



Una de las principales ventajas de Kubernetes es la fácil m

Blogs

Book Recommendations