Kotlin को Kubernetes पर तैनात करना: मूल गाइड
आधुनिक डेवलपमेंट कंटेनरीकरण और ऑर्केस्ट्रेशन के बिना अकल्पनीय है। Kubernetes (K8s) माइक्रोसर्विसेज के प्रबंधन के लिए मानक बन गया है, और Kotlin विश्वसनीय बैकएंड एप्लिकेशन बनाने के लिए सबसे लोकप्रिय भाषाओं में से एक है। इस गाइड में, हम एक साधारण Kotlin एप्लिकेशन से लेकर Kubernetes क्लस्टर में इसकी पूर्ण तैनाती तक का सफर तय करेंगे। आप सीखेंगे कि कोड को Docker इमेज में कैसे पैक करें, मेनिफेस्ट कैसे लिखें और सेवा तक पहुँच कैसे सेट करें।
1. Kotlin एप्लिकेशन तैयार करना
उदाहरण के लिए, हम Ktor पर एक सरल REST API लेंगे - जो Kotlin के लिए एक हल्का फ्रेमवर्क है। एक फ़ाइल बनाएँ Main.kt:
import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.routing.*import io.ktor.http.*import io.ktor.server.response.*
fun main() { embeddedServer(Netty, port = 8080) { routing { get("/") { call.respondText("Hello from Kotlin on K8s!", ContentType.Text.Plain) } get("/health") { call.respondText("OK", ContentType.Text.Plain) } } }.start(wait = true)}यह कोड पोर्ट 8080 पर दो एंडपॉइंट के साथ एक सर्वर शुरू करता है: रूट और हेल्थ चेक। सुनिश्चित करें कि build.gradle.kts में Ktor और Netty निर्भरताएँ शामिल हैं।
2. Docker इमेज बनाना
Kubernetes में तैनाती के लिए, एप्लिकेशन को एक कंटेनर में पैक किया जाना चाहिए। प्रोजेक्ट की रूट में एक Dockerfile बनाएँ:
FROM gradle:8.5-jdk21 AS buildWORKDIR /appCOPY build.gradle.kts settings.gradle.kts ./COPY src ./srcRUN gradle build --no-daemon
FROM openjdk:21-jdk-slimWORKDIR /appCOPY --from=build /app/build/libs/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]बिल्ड दो चरणों में किया जाता है: पहले Gradle के साथ संकलन, फिर JAR फ़ाइल को एक साफ इमेज में कॉपी करना। कमांड से इमेज बनाएँ:
docker build -t my-kotlin-app:1.0 .रजिस्ट्री (जैसे Docker Hub) में प्रकाशित करने के लिए, निष्पादित करें:
docker tag my-kotlin-app:1.0 yourusername/my-kotlin-app:1.0docker push yourusername/my-kotlin-app:1.03. Kubernetes मेनिफेस्ट
अब क्लस्टर में तैनाती के लिए YAML फ़ाइलें बनाएँ। deployment.yaml से शुरू करें:
apiVersion: apps/v1kind: Deploymentmetadata: name: kotlin-appspec: replicas: 2 selector: matchLabels: app: kotlin-app template: metadata: labels: app: kotlin-app spec: containers: - name: kotlin-app image: yourusername/my-kotlin-app:1.0 ports: - containerPort: 8080 livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 5 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 3 periodSeconds: 5यह मेनिफेस्ट एप्लिकेशन की दो प्रतिकृतियाँ बनाता है, और लाइवनेस और रेडीनेस जाँच जोड़ता है। इसके बाद service.yaml:
apiVersion: v1kind: Servicemetadata: name: kotlin-app-svcspec: selector: app: kotlin-app ports: - port: 80 targetPort: 8080 type: ClusterIPसेवा पोर्ट 80 से कंटेनर के पोर्ट 8080 पर ट्रैफ़िक निर्देशित करती है। यदि बाहरी पहुँच की आवश्यकता है, तो प्रकार को NodePort या LoadBalancer में बदलें।
4. Ingress कॉन्फ़िगरेशन और तैनाती
बाहर से अनुरोधों को रूट करने के लिए, Ingress कंट्रोलर का उपयोग करें। ingress.yaml बनाएँ:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: kotlin-app-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /spec: rules: - host: kotlin.example.com http: