Kubernetes पर Kotlin एप्लिकेशन का डिप्लॉयमेंट: मूल गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kubernetes पर Kotlin का डिप्लॉयमेंट: व्यवहार में मूल गाइड

\n\n

Kubernetes (K8s) कंटेनरीकृत एप्लिकेशन के ऑर्केस्ट्रेशन के लिए मानक बन गया है। यदि आप Kotlin (Ktor, Spring Boot या http4k का उपयोग करके) में सर्वर-साइड एप्लिकेशन विकसित कर रहे हैं, तो देर-सबेर उन्हें क्लस्टर में तैनात करने का सवाल उठेगा। इस गाइड में, हम Kotlin एप्लिकेशन को Docker इमेज में पैकेज करने से लेकर ConfigMap और Ingress का उपयोग करके Kubernetes में चलाने तक का सफर तय करेंगे। सभी उदाहरण काम करने योग्य हैं और अनुकूलन के लिए तैयार हैं।

\n\n

1. Kotlin एप्लिकेशन और Docker इमेज तैयार करना

\n\n

उदाहरण के लिए, हम Ktor पर एक सरल एप्लिकेशन लेंगे (इसे किसी अन्य फ्रेमवर्क से बदला जा सकता है)। हमारा एप्लिकेशन पोर्ट 8080 पर सुनेगा और वर्शन के साथ JSON लौटाएगा।

\n\n
// 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\n

Gradle (प्लगइन shadow) का उपयोग करके एप्लिकेशन को fat JAR में बनाएं। बिल्ड के बाद, Dockerfile बनाएं:

\n\n
# 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\n
docker build -t youruser/kotlin-app:1.0.0 .\ndocker push youruser/kotlin-app:1.0.0
\n\n

2. Kubernetes मेनिफेस्ट बनाना

\n\n

अब डिप्लॉयमेंट के लिए संसाधनों का वर्णन करें। तीन फ़ाइलें बनाएं: deployment.yaml, service.yaml और configmap.yaml।

\n\n

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\n

2.2. Deployment

\n\n

Deployment मेनिफेस्ट में, इमेज, पोर्ट, रेप्लिका निर्दिष्ट करें और 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\n

2.3. Service

\n\n

Service पॉड्स के बीच ट्रैफ़िक को संतुलित करेगा:

\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\n

3. क्लस्टर में डिप्लॉय और Ingress कॉन्फ़िगरेशन

\n\n

मेनिफेस्ट लागू करें:

\n\n
kubectl apply -f configmap.yaml\nkubectl apply -f deployment.yaml\nkubectl apply -f service.yaml
\n\n

जांचें कि पॉड चल रहे हैं:

\n\n
kubectl 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:                

ब्लॉग

पुस्तक अनुशंसाएँ