نشر Swift على Kubernetes: دليل أساسي للمبتدئين
\n\nيرتبط Swift بقوة بتطوير iOS وmacOS، لكن إمكانياته الخادمية (بفضل أطر العمل مثل Vapor وKitura) تسمح بإنشاء حلول خلفية كاملة. إذا كنت قد كتبت بالفعل تطبيق خادم بلغة Swift وتريد ضمان تحمله للأخطاء، وقابليته للتوسع، وسهولة إدارته، فإن Kubernetes (K8s) هو الخيار الأمثل. في هذا الدليل، سنشرح خطوة بخطوة عملية نشر تطبيق Swift على Kubernetes، بدءًا من الحاويات وصولاً إلى التشغيل في المجموعة. المادة موجهة للمطورين الذين يعرفون أساسيات Swift، لكنهم بدأوا للتو في تعلم تنسيق الحاويات.
\n\nلماذا Swift وKubernetes زوج رائع
\n\nKubernetes هو نظام لأتمتة نشر وتوسيع وإدارة التطبيقات المحتواة. Swift، بدوره، يتم تجميعه إلى ملف ثنائي أصلي، مما يجعله مرشحًا مثاليًا للتشغيل في حاويات خفيفة الوزن. المزايا الرئيسية لهذا الثنائي:
\n\n- \n
- الأداء: تطبيقات Swift لا تتطلب آلة افتراضية (مثل Java) أو مفسرًا (مثل Python)، مما يقلل من استهلاك الموارد. \n
- أمان الأنواع: يمنع مترجم Swift العديد من الأخطاء في مرحلة البناء، وهو أمر بالغ الأهمية لبيئات الإنتاج. \n
- النظام البيئي: يوفر إطار العمل Vapor أدوات جاهزة للعمل مع HTTP وقواعد البيانات وWebSockets، مما يبسط التكامل مع K8s. \n
- التوسع: يدير Kubernetes تلقائيًا نسخ خادم Swift الخاص بك، مما يضمن توفرًا عاليًا. \n
الخطوة 1: تحضير تطبيق Swift للحاويات
\n\nقبل نشر التطبيق في Kubernetes، يجب تعبئته في صورة Docker. لننظر في مثال يعتمد على إطار العمل Vapor. لنفترض أن لديك تطبيقًا بسيطًا MySwiftApp مع نقطة نهاية واحدة.
هيكل المشروع:
\n\nMySwiftApp/\n├── Sources/\n│ └── App/\n│ └── main.swift\n├── Package.swift\n└── Dockerfile\n\n\n
كود main.swift (خادم HTTP بسيط):
\nimport Vapor\n\nlet app = Application()\napp.get("hello") { req in\n return "Hello from Swift on Kubernetes!"\n}\ntry app.run()\n\n\nملف 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الآن لننشئ Dockerfile لبناء وتشغيل التطبيق. سنستخدم بناء متعدد المراحل لتقليل حجم الصورة:
\n\n# ---- مرحلة البناء ----\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# ---- مرحلة التشغيل ----\nFROM ubuntu:22.04\nWORKDIR /app\nCOPY --from=builder /app/.build/release/App .\nEXPOSE 8080\nCMD ["./App"]\n\n\nقم ببناء الصورة:
\ndocker build -t my-swift-app:latest .\n\n\nالخطوة 2: نشر الصورة في سجل الحاويات
\n\nللعمل مع Kubernetes، يجب أن تكون الصورة متاحة من السجل. استخدم Docker Hub أو أي سجل آخر (GitHub Container Registry, GitLab, AWS ECR).
\n\ndocker tag my-swift-app:latest your-dockerhub-username/my-swift-app:latest\ndocker push your-dockerhub-username/my-swift-app:latest\n\n\nاستبدل your-dockerhub-username باسم المستخدم الخاص بك. إذا كنت تستخدم سجلاً خاصًا، فلا تنسَ تكوين imagePullSecrets في ملفات K