Kubernetes पर Kotlin का डिप्लॉयमेंट: व्यवहार में मूल गाइड
\n\nKubernetes (K8s) कंटेनरीकृत एप्लिकेशन के ऑर्केस्ट्रेशन के लिए मानक बन गया है। यदि आप Kotlin (Ktor, Spring Boot या http4k का उपयोग करके) में सर्वर-साइड एप्लिकेशन विकसित कर रहे हैं, तो देर-सबेर उन्हें क्लस्टर में तैनात करने का सवाल उठेगा। इस गाइड में, हम Kotlin एप्लिकेशन को Docker इमेज में पैकेज करने से लेकर ConfigMap और Ingress का उपयोग करके Kubernetes में चलाने तक का सफर तय करेंगे। सभी उदाहरण काम करने योग्य हैं और अनुकूलन के लिए तैयार हैं।
\n\n1. Kotlin एप्लिकेशन और Docker इमेज तैयार करना
\n\nउदाहरण के लिए, हम Ktor पर एक सरल एप्लिकेशन लेंगे (इसे किसी अन्य फ्रेमवर्क से बदला जा सकता है)। हमारा एप्लिकेशन पोर्ट 8080 पर सुनेगा और वर्शन के साथ JSON लौटाएगा।
// src/main/kotlin/com/example/Application.kt\nimport io.ktor.server.engine.*\nimport io.ktor.server.netty.*\nimport io.ktor.server.routing.*\nimport io.ktor.server.response.*\n\nfun main() {\n embeddedServer(Netty, port = 8080) {\n routing {\n get("/") {\n call.respond(mapOf("app" to "kotlin-on-k8s", "version" to "1.0.0"))\n }\n }\n }.start(wait = true)\n}\n\nGradle (प्लगइन shadow) का उपयोग करके एप्लिकेशन को fat JAR में बनाएं। बिल्ड के बाद, Dockerfile बनाएं:
# Dockerfile\nFROM openjdk:17-jdk-slim\nWORKDIR /app\nCOPY build/libs/app-all.jar app.jar\nEXPOSE 8080\nCMD ["java", "-jar", "app.jar"]\n\nइमेज बनाएं और इसे रजिस्ट्री (जैसे, Docker Hub) में पुश करें:
\n\ndocker build -t youruser/kotlin-app:1.0.0 .\ndocker push youruser/kotlin-app:1.0.0\n\n2. Kubernetes मेनिफेस्ट बनाना
\n\nअब डिप्लॉयमेंट के लिए संसाधनों का वर्णन करें। तीन फ़ाइलें बनाएं: deployment.yaml, service.yaml और configmap.yaml।
2.1. कॉन्फ़िगरेशन के लिए ConfigMap
\n\nएप्लिकेशन सेटिंग्स (जैसे, लॉगिंग स्तर या कनेक्शन स्ट्रिंग) को ConfigMap में निकालें:
\n\n# configmap.yaml\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: app-config\ndata:\n LOG_LEVEL: "DEBUG"\n APP_MODE: "production"\n\n2.2. Deployment
\n\nDeployment मेनिफेस्ट में, इमेज, पोर्ट, रेप्लिका निर्दिष्ट करें और ConfigMap से वेरिएबल्स को फॉरवर्ड करें:
\n\n# deployment.yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: kotlin-app\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: kotlin-app\n template:\n metadata:\n labels:\n app: kotlin-app\n spec:\n containers:\n - name: app\n image: youruser/kotlin-app:1.0.0\n ports:\n - containerPort: 8080\n envFrom:\n - configMapRef:\n name: app-config\n livenessProbe:\n httpGet:\n path: /\n port: 8080\n initialDelaySeconds: 10\n periodSeconds: 5\n\n2.3. Service
\n\nService पॉड्स के बीच ट्रैफ़िक को संतुलित करेगा:
\n\n# service.yaml\napiVersion: v1\nkind: Service\nmetadata:\n name: kotlin-app-service\nspec:\n selector:\n app: kotlin-app\n ports:\n - protocol: TCP\n port: 80\n targetPort: 8080\n type: ClusterIP\n\n3. क्लस्टर में डिप्लॉय और Ingress कॉन्फ़िगरेशन
\n\nमेनिफेस्ट लागू करें:
\n\nkubectl apply -f configmap.yaml\nkubectl apply -f deployment.yaml\nkubectl apply -f service.yaml\n\nजांचें कि पॉड चल रहे हैं:
\n\nkubectl get pods\nkubectl logs <pod-name>\n\nअब एप्लिकेशन को बाहर से सुलभ बनाएं। Ingress बनाएं (मान लिया गया है कि क्लस्टर में Ingress Controller स्थापित है, जैसे, NGINX):
\n\n# ingress.yaml\napiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n name: kotlin-app-ingress\nspec:\n rules:\n - host: kotlin.example.com\n http:\n paths: