कुबरनेटीज़ पर जावा डिप्लॉय: बुनियादी गाइड
Kubernetes (K8s) कंटेनरीकृत एप्लिकेशन के ऑर्केस्ट्रेशन के लिए डी-फैक्टो मानक बन गया है। यदि आप जावा डेवलपर हैं, तो कुबरनेटीज़ में अपने एप्लिकेशन को डिप्लॉय करने की क्षमता केवल एक प्लस नहीं, बल्कि आधुनिक DevOps संस्कृति में एक आवश्यकता है। इस गाइड में, हम एक सरल जावा एप्लिकेशन बनाने से लेकर कुबरनेटीज़ क्लस्टर में इसके डिप्लॉयमेंट तक का पूरा सफर तय करेंगे। आप सीखेंगे कि एप्लिकेशन को Docker इमेज में कैसे पैकेज करें, आवश्यक मेनिफेस्ट कैसे लिखें और इसे प्रोडक्शन-जैसे वातावरण में कैसे चलाएं।
1. जावा एप्लिकेशन और Docker इमेज तैयार करना
कुबरनेटीज़ में एप्लिकेशन डिप्लॉय करने से पहले, इसे कंटेनरीकृत करना होगा। Docker अपनी निर्भरताओं के साथ जावा एप्लिकेशन को पैकेज करने का मानक तरीका है। आइए Spring Boot पर एक सरल REST सेवा पर विचार करें।
हम HelloController.java क्लास बनाएंगे:
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;
@RestControllerpublic class HelloController {
@GetMapping("/") public String hello() { return "Hello from Java on Kubernetes!"; }}अब इमेज बनाने के लिए Dockerfile बनाएं। फाइनल इमेज का आकार कम करने के लिए मल्टी-स्टेज बिल्ड का उपयोग करें:
FROM maven:3.8.5-openjdk-17 AS buildWORKDIR /appCOPY pom.xml .COPY src ./srcRUN mvn clean package -DskipTests
FROM openjdk:17-jdk-slimWORKDIR /appCOPY --from=build /app/target/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]docker build -t my-java-app:latest . कमांड से इमेज बनाएं और जांचने के लिए इसे स्थानीय रूप से चलाएं: docker run -p 8080:8080 my-java-app। यदि सब कुछ ठीक काम करता है, तो इमेज को रजिस्ट्री (जैसे Docker Hub) में अपलोड करें:
docker tag my-java-app:latest yourusername/my-java-app:latestdocker push yourusername/my-java-app:latest2. कुबरनेटीज़ के मुख्य मेनिफेस्ट
कुबरनेटीज़ में डिप्लॉयमेंट के लिए कम से कम दो संसाधनों की आवश्यकता होती है: Deployment (पॉड प्रबंधन के लिए जिम्मेदार) और Service (नेटवर्क एक्सेस प्रदान करता है)।
deployment.yaml फ़ाइल बनाएं:
apiVersion: apps/v1kind: Deploymentmetadata: name: java-app-deployment labels: app: java-appspec: replicas: 2 selector: matchLabels: app: java-app template: metadata: labels: app: java-app spec: containers: - name: java-app image: yourusername/my-java-app:latest ports: - containerPort: 8080 resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "512Mi" cpu: "500m" livenessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 20 periodSeconds: 5अब service.yaml बनाएं ताकि एप्लिकेशन क्लस्टर के अंदर उपलब्ध हो:
apiVersion: v1kind: Servicemetadata: name: java-app-servicespec: selector: app: java-app ports: - protocol: TCP port: 80 targetPort: 8080 type: ClusterIPयदि बाहर से एक्सेस खोलना है (जैसे परीक्षण के लिए), तो प्रकार को LoadBalancer में बदलें या NodePort का उपयोग करें।
3. क्लस्टर में डिप्लॉयमेंट
सुनिश्चित करें कि आपके पास कुबरनेटीज़ क्लस्टर तक पहुंच है (जैसे स्थानीय Minikube या क्लाउड सेवा)। मेनिफेस्ट लागू करें:
kubectl apply -f deployment.yamlkubectl apply -f service.yaml