Déploiement de Swift sur Kubernetes : guide pratique de base
Swift n'est pas seulement un langage pour applications mobiles. Grâce à des frameworks comme Vapor et Kitura, Swift est activement utilisé pour créer des solutions serveur. Cependant, pour exécuter une telle application en production, une orchestration fiable est nécessaire. Kubernetes (K8s) est l'outil idéal pour gérer les services conteneurisés. Dans ce guide, nous allons parcourir le cycle complet de déploiement d'une application Swift dans un cluster Kubernetes : de la conteneurisation à la création de manifestes de travail.
1. Préparation de l'application Swift et conteneurisation
Avant de parler de Kubernetes, vous devez empaqueter votre application Swift dans une image Docker. Prenons l'exemple basé sur le framework Vapor (mais l'approche est universelle pour tout serveur Swift).
Créez une application Vapor minimale :
// Sources/App/routes.swiftimport Vapor
func routes(_ app: Application) throws { app.get { req async in "Hello, Kubernetes!" }}Écrivons maintenant le Dockerfile. Important : utilisez l'image officielle Swift pour la compilation, et pour le conteneur final, une image légère (par exemple, ubuntu:jammy). Cela réduira la taille et améliorera la sécurité.
# ---- 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"]Construisez l'image et envoyez-la dans un registre (par exemple, Docker Hub) :
docker build -t yourdockerhub/swift-k8s-demo:latest .docker push yourdockerhub/swift-k8s-demo:latest2. Bases de Kubernetes : Pod et Deployment
Kubernetes gère les conteneurs via des objets. Le plus simple est le Pod, mais pour la production, il est préférable d'utiliser un Deployment, qui assure la réplication et les mises à jour.
Créons un fichier 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: yourdockerhub/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: 10Appliquez le manifeste :
kubectl apply -f deployment.yamlVérifiez le statut :
kubectl get pods -l app=swift-demo3. Service pour accéder à l'application
Les Pods sont dynamiques (leurs IP changent lors des redémarrages). Pour que les clients puissent accéder stablement à l'application, un Service est nécessaire. Créons service.yaml :
apiVersion: v1kind: Servicemetadata: name: swift-servicespec: selector: app: swift-demo ports: - protocol: TCP port: 80 targetPort: 8080 type: ClusterIPPour les tests dans un cluster local (par exemple, Minikube), vous pouvez utiliser NodePort ou le transfert de ports :
kubectl port-forward service/swift-service 8080:80L'application est maintenant accessible à l'adresse http://localhost:8080.
4. Mise à l'échelle et mise à jour (Rolling Update)
L'un des principaux avantages de Kubernetes est la facilité de m