Kubernetes पर TypeScript का डिप्लॉय: एक व्यावहारिक मूल गाइड

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

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

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

परिचय: क्यों TypeScript और Kubernetes एक आदर्श जोड़ी हैं

\n

आधुनिक वेब डेवलपमेंट दो चीजों के बिना अधूरी है: स्टैटिक टाइपिंग और स्केलेबल इंफ्रास्ट्रक्चर। TypeScript कंपाइलेशन चरण में कोड की विश्वसनीयता प्रदान करता है, जबकि Kubernetes (K8s) कंटेनरों का स्वचालित प्रबंधन, लोड बैलेंसिंग और सेल्फ-हीलिंग प्रदान करता है। इस गाइड में, हम एक साधारण TypeScript एप्लिकेशन से लेकर Kubernetes क्लस्टर में उसे चलाने तक का पूरा सफर तय करेंगे। आप सीखेंगे कि कोड को Docker इमेज में कैसे पैकेज करें, मेनिफेस्ट कैसे लिखें और production-ready सर्विस कैसे डिप्लॉय करें।

\n\n

चरण 1: कंटेनरीकरण के लिए TypeScript एप्लिकेशन तैयार करना

\n

Kubernetes के बारे में सोचने से पहले, यह सुनिश्चित करना होगा कि आपका एप्लिकेशन कंटेनर में चलने के लिए तैयार है। आइए TypeScript पर एक सरल Express एप्लिकेशन बनाएं। सुनिश्चित करें कि प्रोजेक्ट की रूट में package.json, tsconfig.json और एंट्री पॉइंट src/index.ts मौजूद हैं।

\n\n
// src/index.ts\nimport express, { Request, Response } from 'express';\n\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/health', (_req: Request, res: Response) => {\n  res.json({ status: 'ok', timestamp: new Date().toISOString() });\n});\n\napp.get('/', (_req: Request, res: Response) => {\n  res.send('Hello from TypeScript on Kubernetes!');\n});\n\napp.listen(PORT, () => {\n  console.log(`Server running on port ${PORT}`);\n});\n
\n\n

एक महत्वपूर्ण बात: production में हम ts-node का उपयोग नहीं करते हैं। इसलिए package.json में बिल्ड स्क्रिप्ट जोड़ें:

\n
"scripts": {\n  "build": "tsc",\n  "start": "node dist/index.js"\n}\n
\n

npm run build चलाने के बाद dist फ़ोल्डर में कंपाइल किया गया JavaScript दिखाई देगा। इसी फ़ोल्डर को हम Docker इमेज में कॉपी करेंगे।

\n\n

चरण 2: न्यूनतम आकार के साथ Docker इमेज बनाना

\n

production डिप्लॉय के लिए इमेज का आकार बहुत महत्वपूर्ण है। हम multi-stage बिल्ड का उपयोग करते हैं: पहले पूर्ण SDK वाले कंटेनर में TypeScript कंपाइल करें, फिर परिणाम को node:18-alpine पर आधारित हल्की इमेज में कॉपी करें।

\n\n
# Dockerfile\n# Stage 1: Build\nFROM node:18-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY tsconfig.json ./\nCOPY src/ ./src/\nRUN npm run build\n\n# Stage 2: Production\nFROM node:18-alpine\nWORKDIR /app\nCOPY --from=builder /app/dist ./dist\nCOPY --from=builder /app/node_modules ./node_modules\nEXPOSE 3000\nCMD ["node", "dist/index.js"]\n
\n\n

इमेज बनाएं और स्थानीय रूप से जांचें:

\n
docker build -t my-ts-app:latest .\ndocker run -p 3000:3000 my-ts-app:latest\n
\n

http://localhost:3000 खोलें — आपको स्वागत संदेश दिखना चाहिए।

\n\n

चरण 3: Kubernetes मेनिफेस्ट — Deployment और Service

\n

अब हम अपनी इमेज को क्लस्टर में ले जाएंगे। इसके लिए दो बुनियादी मेनिफेस्ट की आवश्यकता होगी: Deployment (रेप्लिका और अपडेट का प्रबंधन करता है) और Service (नेटवर्क एक्सेस प्रदान करता है)।

\n\n

deployment.yaml

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: ts-app-deployment\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: ts-app\n  template:\n    metadata:\n      labels:\n        app: ts-app\n    spec:\n      containers:\n      - name: ts-app\n        image: my-ts-app:latest\n        imagePullPolicy: IfNotPresent\n        ports:\n        - containerPort: 3000\n        env:\n        - name: PORT\n          value: "3000"\n        livenessProbe:\n          httpGet:\n            path: /health\n            port: 3000\n          initialDelaySeconds: 5\n          periodSeconds: 10\n        readinessProbe:\n          httpGet:\n            path: /health\n            port: 3000\n          initialDelaySeconds: 3\n          periodSeconds: 5\n
\n\n

service.yaml

\n
apiVersion: v1\nkind: Service\nmetadata:\n  name: ts-app-service\nspec:\n  selector:\n    app                

ब्लॉग

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