Kubernetes पर Java एप्लिकेशन का डिप्लॉयमेंट: Dockerfile से कार्यशील सेवा तक
\n\nआधुनिक Java-डेवलपमेंट कंटेनरीकरण और ऑर्केस्ट्रेशन के बिना अकल्पनीय है। Kubernetes (K8s) माइक्रोसर्विसेज के प्रबंधन के लिए मानक बन गया है, और क्लस्टर में Java-एप्लिकेशन तैनात करने की क्षमता backend-डेवलपर के लिए एक अनिवार्य कौशल है। इस लेख में हम व्यावहारिक रूप से डिप्लॉय के पूरे चक्र को समझेंगे: Java-एप्लिकेशन के साथ Docker इमेज बनाने से लेकर Ingress के माध्यम से लोड बैलेंसिंग सेट करने तक।
\n\n1. Java-एप्लिकेशन और Dockerfile की तैयारी
\n\nKubernetes में जाने से पहले, आपके Java-एप्लिकेशन को Docker इमेज में पैक किया जाना चाहिए। आइए एक क्लासिक मामले पर विचार करें — Spring Boot पर एक एप्लिकेशन, जो JAR फ़ाइल में संकलित है।
\n\nप्रोजेक्ट का निर्माण
\nमान लीजिए हमारे पास एक प्रोजेक्ट है जो Maven के माध्यम से बनता है। प्रोजेक्ट की रूट में कमांड चलाएँ:
\nmvn clean package -DskipTests\nपरिणामस्वरूप, target/ फ़ोल्डर में my-app-1.0.0.jar फ़ाइल दिखाई देगी।
Dockerfile बनाना
\nइमेज के आकार को कम करने और सुरक्षा बढ़ाने के लिए, हम मल्टी-स्टेज बिल्ड का उपयोग करते हैं।
\n# Stage 1: निर्माण\nFROM maven:3.8.6-openjdk-17 AS builder\nWORKDIR /app\nCOPY pom.xml .\nRUN mvn dependency:go-offline -B\nCOPY src ./src\nRUN mvn package -DskipTests\n\n# Stage 2: अंतिम इमेज\nFROM openjdk:17-jdk-slim\nWORKDIR /app\nCOPY --from=builder /app/target/my-app-1.0.0.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]\n\nइमेज का निर्माण और प्रकाशन
\ndocker build -t my-java-app:1.0.0 .\ndocker tag my-java-app:1.0.0 your-dockerhub/my-java-app:1.0.0\ndocker push your-dockerhub/my-java-app:1.0.0\n\n2. Kubernetes मैनिफेस्ट का निर्माण
\n\nKubernetes घोषणात्मक दृष्टिकोण का उपयोग करता है। हम YAML फ़ाइलों में सिस्टम की वांछित स्थिति का वर्णन करेंगे।
\n\nDeployment — पॉड प्रबंधन
\ndeployment.yaml फ़ाइल बनाएँ:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: java-app-deployment\n labels:\n app: java-app\nspec:\n replicas: 3\n selector:\n matchLabels:\n app: java-app\n template:\n metadata:\n labels:\n app: java-app\n spec:\n containers:\n - name: java-app\n image: your-dockerhub/my-java-app:1.0.0\n ports:\n - containerPort: 8080\n resources:\n requests:\n memory: "256Mi"\n cpu: "250m"\n limits:\n memory: "512Mi"\n cpu: "500m"\n livenessProbe:\n httpGet:\n path: /actuator/health\n port: 8080\n initialDelaySeconds: 30\n periodSeconds: 10\n readinessProbe:\n httpGet:\n path: /actuator/health\n port: 8080\n initialDelaySeconds: 20\n periodSeconds: 5\n\nService — पहुँच सुनिश्चित करना
\nservice.yaml फ़ाइल बनाएँ:
apiVersion: v1\nkind: Service\nmetadata:\n name: java-app-service\nspec:\n selector:\n app: java-app\n ports:\n - protocol: TCP\n port: 80\n targetPort: 8080\n type: ClusterIP\n\nConfigMap — कॉन्फ़िगरेशन को अलग करना
\nपर्यावरण चरों को संग्रहीत करने के लिए configmap.yaml बनाएँ:
apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: app-config\ndata:\n SPRING_PROFILES_ACTIVE: "prod"\n DB_URL: "jdbc:postgresql://postgres-service:5432/mydb"\n\n3. क्लस्टर में डिप्लॉय और जाँच
\n\nअब सभी मैनिफेस्ट को क्लस्टर पर लागू करें। सुनिश्चित करें कि आपने kubectl सेट किया है और सही संदर्भ से जुड़े हैं।
मैनिफेस्ट लागू करना
\nkubectl apply -f configmap.yaml\nkubectl apply -f deployment.yaml\nkubectl apply -f service.yaml\n\nस्थिति की जाँच
\nkubectl get pods\nkubectl get deployments\nkubectl get services\nआपको