C# को Kubernetes पर डिप्लॉय करना: बुनियादी गाइड
Kubernetes (K8s) कंटेनरीकृत एप्लिकेशन के ऑर्केस्ट्रेशन के लिए डी-फैक्टो मानक बन गया है। यदि आप C# (.NET) में डेवलप कर रहे हैं, तो देर-सबेर यह सवाल उठेगा: अपने एप्लिकेशन को कैसे पैकेज करें और इसे क्लाउड या अपने क्लस्टर पर कैसे चलाएं। इस गाइड में, हम पूरे चक्र को समझेंगे - ASP.NET Core पर एक सरल वेब-API बनाने से लेकर इसे Kubernetes में तैनात करने तक।
यह लेख उन डेवलपर्स के लिए है जो पहले से C# और Docker की मूल बातों से परिचित हैं, लेकिन अभी Kubernetes के साथ काम करना शुरू कर रहे हैं।
1. .NET एप्लिकेशन और Docker इमेज तैयार करना
Kubernetes में एप्लिकेशन डिप्लॉय करने से पहले, इसे कंटेनर में पैकेज करना होगा। आइए C# में एक न्यूनतम वेब-API बनाएं।
- एक नया प्रोजेक्ट बनाएं:
dotnet new webapi -n MyK8sAppcd MyK8sApp - सुनिश्चित करें कि एप्लिकेशन पोर्ट 80 पर सुन रहा है।
Program.cs(याappsettings.json) फ़ाइल में निर्दिष्ट करें:builder.WebHost.UseUrls("http://0.0.0.0:80"); - प्रोजेक्ट की रूट में
Dockerfileफ़ाइल बनाएं:FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS baseWORKDIR /appEXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /srcCOPY ["MyK8sApp.csproj", "."]RUN dotnet restore "./MyK8sApp.csproj"COPY . .RUN dotnet build "MyK8sApp.csproj" -c Release -o /app/build
FROM build AS publishRUN dotnet publish "MyK8sApp.csproj" -c Release -o /app/publish
FROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "MyK8sApp.dll"] - इमेज बनाएं और इसे रजिस्ट्री (जैसे, Docker Hub) में भेजें:
docker build -t yourdockerhub/my-k8s-app:v1 .docker push yourdockerhub/my-k8s-app:v1
महत्वपूर्ण: yourdockerhub को अपने वास्तविक उपयोगकर्ता नाम से बदलें। स्थानीय परीक्षण के लिए, आप minikube का उपयोग कर सकते हैं और इमेज प्रकाशित नहीं कर सकते - इसे स्थानीय रूप से बनाना पर्याप्त है।
2. Kubernetes मेनिफेस्ट बनाना
Kubernetes क्लस्टर की वांछित स्थिति का वर्णन करने के लिए घोषणात्मक YAML फ़ाइलों का उपयोग करता है। हमें दो मुख्य ऑब्जेक्ट की आवश्यकता होगी: Deployment (पॉड प्रबंधन) और Service (नेटवर्क एक्सेस)।
2.1. Deployment (तैनाती)
deployment.yaml फ़ाइल बनाएं:
apiVersion: apps/v1kind: Deploymentmetadata: name: my-k8s-app-deployment labels: app: my-k8s-appspec: replicas: 2 selector: matchLabels: app: my-k8s-app template: metadata: labels: app: my-k8s-app spec: containers: - name: my-k8s-app image: yourdockerhub/my-k8s-app:v1 ports: - containerPort: 80 resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" livenessProbe: httpGet: path: /health port: 80 initialDelaySeconds: 5 periodSeconds: 10 readinessProbe: httpGet: path: /ready port: 80 initialDelaySeconds: 3 periodSeconds: 5इस मेनिफेस्ट में हम निर्दिष्ट करते हैं:
- replicas: 2 — दोष सहनशीलता के लिए एप्लिकेशन के दो इंस्टेंस।
- resources — CPU और मेमोरी की सीमाएं (क्लस्टर के स्थिर संचालन के लिए महत्वपूर्ण)।
- livenessProbe और readinessProbe — स्वास्थ्य जांच। अपने कंट्रोलर में
/healthऔर/readyएंडपॉइंट जोड़ें।
2.2. Service (सेवा)
service.yaml फ़ाइल बनाएं:
apiVersion: v1kind: Servicemetadata: name: my-k8s-app-servicespec: selecto