परिचय: Node.js के लिए Kubernetes क्यों?
JavaScript (Node.js) पर आधुनिक वेब एप्लिकेशन को उच्च उपलब्धता, स्केलेबिलिटी और दोष सहनशीलता की आवश्यकता होती है। जब आपका एप्लिकेशन एक सर्वर की सीमा से बाहर निकलता है, तो मैन्युअल प्रबंधन एक बुरा सपना बन जाता है। यहाँ Kubernetes (K8s) मदद करता है — एक कंटेनर ऑर्केस्ट्रेशन सिस्टम जो एप्लिकेशन की तैनाती, स्केलिंग और प्रबंधन को स्वचालित करता है।
इस मार्गदर्शिका में, हम पूरा रास्ता तय करेंगे: एक साधारण Node.js एप्लिकेशन से लेकर Kubernetes पर प्रोडक्शन-जैसे वातावरण में इसे चलाने तक। आप सीखेंगे कि कोड को Docker इमेज में कैसे पैकेज करें, आवश्यक K8s संसाधन (Pod, Deployment, Service) कैसे बनाएं और बाहरी पहुंच कैसे सेट करें।
1. Node.js एप्लिकेशन तैयार करना
शुरू करने के लिए, हम एक सरल Express एप्लिकेशन बनाएंगे। यह HTTP अनुरोधों का जवाब देगा और कंटेनर का होस्टनाम प्रदर्शित करेगा (लोड बैलेंसिंग की जांच के लिए उपयोगी)।
1.1. फ़ाइल app.js
const express = require('express');const os = require('os');
const app = express();const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => { res.json({ message: 'Hello from Node.js on Kubernetes!', hostname: os.hostname(), timestamp: new Date().toISOString() });});
app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});1.2. फ़ाइल package.json
{ "name": "k8s-node-app", "version": "1.0.0", "dependencies": { "express": "^4.18.2" }, "scripts": { "start": "node app.js" }}2. कंटेनरीकरण: Docker इमेज
Kubernetes कंटेनरों के साथ काम करता है। हम अपने Node.js एप्लिकेशन के लिए एक न्यूनतम Dockerfile बनाएंगे। आकार को अनुकूलित करने के लिए आधिकारिक Node.js इमेज और मल्टी-स्टेज बिल्ड का उपयोग करें।
2.1. Dockerfile
FROM node:18-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm ci --only=production
FROM node:18-alpineWORKDIR /appCOPY --from=builder /app/node_modules ./node_modulesCOPY . .EXPOSE 3000CMD ["node", "app.js"]इमेज बनाएं और इसे Docker Hub या किसी अन्य रजिस्ट्री पर भेजें:
docker build -t your-dockerhub/k8s-node-app:v1 .docker push your-dockerhub/k8s-node-app:v13. Kubernetes पर तैनाती
अब सबसे महत्वपूर्ण भाग पर आते हैं — Kubernetes संसाधन बनाना। हम Deployment (Pod प्रबंधन के लिए) और Service (नेटवर्क एक्सेस के लिए) का उपयोग करेंगे।
3.1. Deployment बनाना
Deployment सुनिश्चित करता है कि आपके एप्लिकेशन के साथ आवश्यक संख्या में Pod हमेशा चल रहे हों। फ़ाइल deployment.yaml बनाएं:
apiVersion: apps/v1kind: Deploymentmetadata: name: node-app-deployment labels: app: node-appspec: replicas: 3 selector: matchLabels: app: node-app template: metadata: labels: app: node-app spec: containers: - name: node-app image: your-dockerhub/k8s-node-app:v1 ports: - containerPort: 3000 env: - name: PORT value: "3000" resources: requests: memory: "64Mi" cpu: "100m" limits: memory: "128Mi" cpu: "200m"3.2. Service बनाना
Service Pod तक पहुंचने के लिए एक स्थिर IP पता और DNS नाम प्रदान करता है। service.yaml बनाएं:
apiVersion: v1kind: Servicemetadata: name: node-app-servicespec: selector: app: node-app ports: - protocol: TCP port: 80 targetPort: 3000 type: ClusterIP3.3. क्लस्टर पर चलाना
कमांड निष्पादित करें (पहले सुनिश्चित करें कि kubectl कॉन्फ़िगर किया गया है और क्लस्टर तक पहुंच है):
kubectl apply -f deployment.yamlkubectl app