نشر Swift على Kubernetes: دليل أساسي عملي
Swift ليست مجرد لغة للتطبيقات المحمولة. بفضل الأطر مثل Vapor و Kitura، يتم استخدام Swift بنشاط لإنشاء حلول الخادم. ومع ذلك، لتشغيل مثل هذا التطبيق في الإنتاج، يلزم تنسيق موثوق. Kubernetes (K8s) هي الأداة المثالية لإدارة الخدمات المحتواة. في هذا الدليل، سنشرح دورة النشر الكاملة لتطبيق Swift في كتلة Kubernetes: من الحاويات إلى إنشاء المانيفستات العاملة.
1. تحضير تطبيق Swift والحاويات
قبل الحديث عن Kubernetes، تحتاج إلى حزم تطبيق Swift الخاص بك في صورة Docker. لنأخذ مثالاً يعتمد على إطار Vapor (لكن النهج عام لأي خادم Swift).
أنشئ تطبيق Vapor بسيط:
// Sources/App/routes.swiftimport Vapor
func routes(_ app: Application) throws { app.get { req async in "Hello, Kubernetes!" }}الآن لنكتب Dockerfile. مهم: استخدم صورة Swift الرسمية للبناء، وللحاوية النهائية استخدم صورة خفيفة (مثل ubuntu:jammy). هذا سيقلل الحجم ويزيد الأمان.
# ---- مرحلة البناء ----FROM swift:5.9-jammy AS build
WORKDIR /appCOPY Package.swift Package.resolved ./COPY Sources ./SourcesRUN swift build -c release --static-swift-stdlib
# ---- مرحلة التشغيل ----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"]قم ببناء الصورة وإرسالها إلى السجل (مثل Docker Hub):
docker build -t yourdockerhub/swift-k8s-demo:latest .docker push yourdockerhub/swift-k8s-demo:latest2. أساسيات Kubernetes: Pod و Deployment
يدير Kubernetes الحاويات من خلال الكائنات. أبسطها هو Pod، ولكن للإنتاج من الأفضل استخدام Deployment الذي يوفر النسخ المتماثل والتحديثات.
لننشئ ملف 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: 10طبق المانيفست:
kubectl apply -f deployment.yamlتحقق من الحالة:
kubectl get pods -l app=swift-demo3. الخدمة (Service) للوصول إلى التطبيق
الـ Pods ديناميكية (عناوين IP تتغير عند إعادة التشغيل). لكي يتمكن العملاء من الوصول إلى التطبيق بشكل مستقر، نحتاج إلى Service. لننشئ service.yaml:
apiVersion: v1kind: Servicemetadata: name: swift-servicespec: selector: app: swift-demo ports: - protocol: TCP port: 80 targetPort: 8080 type: ClusterIPللاختبار في كتلة محلية (مثل Minikube) يمكن استخدام NodePort أو إعادة توجيه المنافذ:
kubectl port-forward service/swift-service 8080:80الآن التطبيق متاح على العنوان http://localhost:8080.
4. التوسع والتحديث (Rolling Update)
من أهم مزايا Kubernetes سهولة إدارة التوسع والتحديثات. يمكنك تغيير عدد النسخ المتماثلة أو تحديث صورة التطبيق دون توقف الخدمة.
لتوسيع التطبيق إلى 5 نسخ:
kubectl scale deployment/swift-demo --replicas=5لتحديث الصورة إلى إصدار جديد:
kubectl set image deployment/swift-demo swift-app=yourdockerhub/swift-k8s-demo:v2سيتولى Kubernetes عملية التحديث التدريجي (Rolling Update) تلقائياً، مع الحفاظ على توفر الخدمة.
5. الخلاصة
في هذا الدليل، قمنا بتغطية الخطوات الأساسية لنشر تطبيق Swift على Kubernetes: الحاويات باستخدام Docker، إنشاء Deployment و Service، والتوسع والتحديث. هذا النهج مناسب لكل من التطبيقات الصغيرة والأنظمة المعقدة. في المقالات المستقبلية، سنناقش مواضيع متقدمة مثل استخدام ConfigMaps و Secrets، وإعداد Ingress، ومراقبة التطبيق باستخدام Prometheus.
إذا كان لديك أسئلة أو اقتراحات، اكتبها في التعليقات. حظاً موفقاً في نشر Swift على Kubernetes!