Kubernetes पर Swift का डिप्लॉयमेंट: एक व्यावहारिक मूल गाइड
\n\nSwift केवल मोबाइल एप्लिकेशन के लिए भाषा नहीं है। Vapor और Kitura जैसे फ्रेमवर्क की बदौलत, Swift का उपयोग सर्वर-साइड समाधान बनाने के लिए सक्रिय रूप से किया जाता है। हालांकि, ऐसे एप्लिकेशन को प्रोडक्शन में चलाने के लिए, विश्वसनीय ऑर्केस्ट्रेशन की आवश्यकता होती है। Kubernetes (K8s) कंटेनरीकृत सेवाओं के प्रबंधन के लिए एक आदर्श उपकरण है। इस गाइड में, हम Kubernetes क्लस्टर में Swift एप्लिकेशन को डिप्लॉय करने के पूरे चक्र को समझेंगे: कंटेनरीकरण से लेकर कार्यशील मेनिफेस्ट बनाने तक।
\n\n1. Swift एप्लिकेशन और कंटेनरीकरण की तैयारी
\n\nKubernetes के बारे में बात करने से पहले, आपको अपने Swift एप्लिकेशन को Docker इमेज में पैकेज करना होगा। आइए Vapor फ्रेमवर्क पर आधारित एक उदाहरण देखें (लेकिन यह दृष्टिकोण किसी भी Swift सर्वर के लिए सार्वभौमिक है)।
\n\nएक न्यूनतम Vapor एप्लिकेशन बनाएं:
\n\n// Sources/App/routes.swift\nimport Vapor\n\nfunc routes(_ app: Application) throws {\n app.get { req async in\n "Hello, Kubernetes!"\n }\n}\n\n\nअब Dockerfile लिखते हैं। महत्वपूर्ण: बिल्ड के लिए आधिकारिक Swift इमेज का उपयोग करें, और अंतिम कंटेनर के लिए हल्की इमेज (जैसे, ubuntu:jammy) का उपयोग करें। इससे आकार कम होगा और सुरक्षा बढ़ेगी।
\n\n# ---- Build Stage ----\nFROM swift:5.9-jammy AS build\n\nWORKDIR /app\nCOPY Package.swift Package.resolved ./\nCOPY Sources ./Sources\nRUN swift build -c release --static-swift-stdlib\n\n# ---- Run Stage ----\nFROM ubuntu:jammy\n\nRUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*\nWORKDIR /app\nCOPY --from=build /app/.build/release/Run .\n\nEXPOSE 8080\nCMD ["./Run"]\n\n\nइमेज बनाएं और रजिस्ट्री (जैसे, Docker Hub) में भेजें:
\n\ndocker build -t yourdockerhub/swift-k8s-demo:latest .\ndocker push yourdockerhub/swift-k8s-demo:latest\n\n\n2. Kubernetes की मूल बातें: Pod और Deployment
\n\nKubernetes ऑब्जेक्ट के माध्यम से कंटेनरों का प्रबंधन करता है। सबसे सरल Pod है, लेकिन प्रोडक्शन के लिए Deployment का उपयोग करना बेहतर है, जो रेप्लिकेशन और अपडेट सुनिश्चित करता है।
\n\nएक फ़ाइल deployment.yaml बनाएं:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: swift-demo\n labels:\n app: swift-demo\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: swift-demo\n template:\n metadata:\n labels:\n app: swift-demo\n spec:\n containers:\n - name: swift-app\n image: yourdockerhub/swift-k8s-demo:latest\n ports:\n - containerPort: 8080\n resources:\n requests:\n memory: "128Mi"\n cpu: "250m"\n limits:\n memory: "256Mi"\n cpu: "500m"\n livenessProbe:\n httpGet:\n path: /\n port: 8080\n initialDelaySeconds: 5\n periodSeconds: 10\n\n\nमेनिफेस्ट लागू करें:
\n\nkubectl apply -f deployment.yaml\n\n\nस्थिति जांचें:
\n\nkubectl get pods -l app=swift-demo\n\n\n3. एप्लिकेशन तक पहुंच के लिए सर्विस (Service)
\n\nPod गतिशील होते हैं (रीस्टार्ट होने पर उनका IP बदल जाता है)। क्लाइंट एप्लिकेशन तक स्थिर रूप से पहुंच सकें, इसके लिए Service की आवश्यकता होती है। service.yaml बनाएं:
apiVersion: v1\nkind: Service\nmetadata:\n name: swift-service\nspec:\n selector:\n app: swift-demo\n ports:\n - protocol: TCP\n port: 80\n targetPort: 8080\n type: ClusterIP\n\n\nस्थानीय क्लस्टर (जैसे, Minikube) में परीक्षण के लिए, NodePort या पोर्ट फ़ॉरवर्डिंग का उपयोग किया जा सकता है:
kubectl port-forward service/swift-service 8080:80\n\n\nअब एप्लिकेशन http://localhost:8080 पते पर उपलब्ध है।
4. स्केलिंग और अपडेट (Rolling Update)
\n\nKubernetes का एक मुख्य लाभ आसान स्केलिंग है।