Despliegue de Swift en Kubernetes: guía básica para principiantes

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 para principiantes

\n\n

Swift se asocia firmemente con el desarrollo para iOS y macOS, sin embargo, sus capacidades de servidor (gracias a frameworks como Vapor y Kitura) permiten crear soluciones backend completas. Si ya ha escrito una aplicación de servidor en Swift y desea garantizar su tolerancia a fallos, escalabilidad y facilidad de gestión, Kubernetes (K8s) es la elección ideal. En esta guía, analizaremos paso a paso el proceso de despliegue de una aplicación Swift en Kubernetes, comenzando con la contenerización y terminando con la ejecución en un clúster. El material está dirigido a desarrolladores familiarizados con los conceptos básicos de Swift, pero que recién comienzan a aprender sobre orquestación de contenedores.

\n\n

Por qué Swift y Kubernetes son una excelente combinación

\n\n

Kubernetes es un sistema para automatizar el despliegue, escalado y gestión de aplicaciones contenerizadas. Swift, por su parte, se compila en un binario nativo, lo que lo convierte en un candidato ideal para ejecutarse en contenedores ligeros. Las principales ventajas de este tándem son:

\n\n
    \n
  • Rendimiento: Las aplicaciones Swift no requieren una máquina virtual (como Java) ni un intérprete (como Python), lo que reduce el consumo de recursos.
  • \n
  • Seguridad de tipos: El compilador de Swift previene muchos errores en la etapa de compilación, lo cual es crítico para entornos de producción.
  • \n
  • Ecosistema: El framework Vapor proporciona herramientas listas para trabajar con HTTP, bases de datos y WebSockets, lo que simplifica la integración con K8s.
  • \n
  • Escalabilidad: Kubernetes gestiona automáticamente las réplicas de su servidor Swift, garantizando alta disponibilidad.
  • \n
\n\n

Paso 1: Preparación de la aplicación Swift para la contenerización

\n\n

Antes de desplegar la aplicación en Kubernetes, debe empaquetarla en una imagen Docker. Consideremos un ejemplo basado en el framework Vapor. Supongamos que tiene una aplicación simple MySwiftApp con un solo endpoint.

\n\n

Estructura del proyecto:

\n
\nMySwiftApp/\n├── Sources/\n│   └── App/\n│       └── main.swift\n├── Package.swift\n└── Dockerfile\n
\n\n

Código main.swift (servidor HTTP simple):

\n
import Vapor\n\nlet app = Application()\napp.get("hello") { req in\n    return "¡Hola desde Swift en Kubernetes!"\n}\ntry app.run()\n
\n\n

Archivo Package.swift:

\n
// swift-tools-version:5.8\nimport PackageDescription\n\nlet package = Package(\n    name: "MySwiftApp",\n    platforms: [.macOS(.v12)],\n    dependencies: [\n        .package(url: "https://github.com/vapor/vapor.git", from: "4.0.0")\n    ],\n    targets: [\n        .executableTarget(\n            name: "App",\n            dependencies: ["Vapor"]\n        )\n    ]\n)\n
\n\n

Ahora crearemos un Dockerfile para compilar y ejecutar la aplicación. Usaremos compilación multi-etapa para minimizar el tamaño de la imagen:

\n\n
# ---- Build Stage ----\nFROM swift:5.8 as builder\nWORKDIR /app\nCOPY Package.swift Package.resolved ./\nRUN swift package resolve\nCOPY . .\nRUN swift build -c release --static-swift-stdlib\n\n# ---- Run Stage ----\nFROM ubuntu:22.04\nWORKDIR /app\nCOPY --from=builder /app/.build/release/App .\nEXPOSE 8080\nCMD ["./App"]\n
\n\n

Construya la imagen:

\n
docker build -t my-swift-app:latest .\n
\n\n

Paso 2: Publicación de la imagen en un registro de contenedores

\n\n

Para trabajar con Kubernetes, la imagen debe estar disponible desde un registro. Usaremos Docker Hub o cualquier otro (GitHub Container Registry, GitLab, AWS ECR).

\n\n
docker tag my-swift-app:latest your-dockerhub-username/my-swift-app:latest\ndocker push your-dockerhub-username/my-swift-app:latest\n
\n\n

Reemplace your-dockerhub-username con su nombre de usuario. Si usa un registro privado, no olvide configurar imagePullSecrets en los manifiestos de K

Blogs

Book Recommendations