Kubernetes पर C# डिप्लॉय: .NET डेवलपर्स के लिए व्यावहारिक गाइड
\n\nC# (.NET) में आधुनिक डेवलपमेंट के लिए अक्सर केवल गुणवत्तापूर्ण कोड लिखना ही नहीं, बल्कि प्रोडक्शन वातावरण में एप्लिकेशन को सही ढंग से तैनात करने की क्षमता भी आवश्यक होती है। Kubernetes (K8s) कंटेनर ऑर्केस्ट्रेशन के लिए डी-फैक्टो मानक बन गया है। इस लेख में, हम कंटेनरीकरण से लेकर Ingress कॉन्फ़िगरेशन तक, Kubernetes पर C# एप्लिकेशन डिप्लॉय करने की चरण-दर-चरण प्रक्रिया को समझेंगे।
\n\n1. .NET एप्लिकेशन और Docker इमेज तैयार करना
\n\nKubernetes में जाने से पहले, आपके C# एप्लिकेशन को Docker इमेज में पैक किया जाना चाहिए। आइए एक सरल ASP.NET Core Web API पर विचार करें।
\n\nप्रोजेक्ट बनाएं:
\ndotnet new webapi -n MyK8sApp\ncd MyK8sApp\n\nएक सरल endpoint जोड़ें (फ़ाइल Program.cs):
var builder = WebApplication.CreateBuilder(args);\nvar app = builder.Build();\n\napp.MapGet("/", () => "Hello from C# on Kubernetes!");\n\napp.Run();\n\nअब प्रोजेक्ट के रूट में Dockerfile बनाएं:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base\nWORKDIR /app\nEXPOSE 8080\n\nFROM mcr.microsoft.com/dotnet/sdk:8.0 AS build\nWORKDIR /src\nCOPY ["MyK8sApp.csproj", "."]\nRUN dotnet restore\nCOPY . .\nRUN dotnet publish -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=build /app/publish .\nENTRYPOINT ["dotnet", "MyK8sApp.dll"]\n\nDocker Hub या स्थानीय रजिस्ट्री में इमेज बनाएं और पुश करें:
\ndocker build -t yourdockerhub/my-k8s-app:v1 .\ndocker push yourdockerhub/my-k8s-app:v1\n\nमहत्वपूर्ण: ASP.NET Core 8+ में, एप्लिकेशन डिफ़ॉल्ट रूप से पोर्ट 8080 पर सुनता है, जो Kubernetes के लिए आदर्श है।
\n\n2. Kubernetes के लिए मुख्य YAML मेनिफेस्ट
\n\nKubernetes YAML फ़ाइलों के माध्यम से संसाधनों का प्रबंधन करता है। C# एप्लिकेशन चलाने के लिए हमें कम से कम Deployment और Service की आवश्यकता होती है।
\n\n2.1. Deployment (deployment.yaml)
\nDeployment Pods की आवश्यक संख्या बनाए रखने के लिए जिम्मेदार है।
\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: my-k8s-app-deployment\nspec:\n replicas: 3\n selector:\n matchLabels:\n app: my-k8s-app\n template:\n metadata:\n labels:\n app: my-k8s-app\n spec:\n containers:\n - name: my-k8s-app\n image: yourdockerhub/my-k8s-app:v1\n ports:\n - containerPort: 8080\n resources:\n requests:\n memory: "64Mi"\n cpu: "250m"\n limits:\n memory: "128Mi"\n cpu: "500m"\n livenessProbe:\n httpGet:\n path: /health\n port: 8080\n initialDelaySeconds: 5\n periodSeconds: 10\n\nमुख्य बिंदु:
\n- \n
replicas: 3— एप्लिकेशन के 3 इंस्टेंस \n livenessProbe— स्वास्थ्य जांच (C# में/healthendpoint जोड़ने की अनुशंसा की जाती है) \n requests/limitsसंसाधन K8s शेड्यूलर की मदद करते हैं \n
2.2. Service (service.yaml)
\nService Pods के लिए एक स्थिर प्रवेश बिंदु प्रदान करता है।
\napiVersion: v1\nkind: Service\nmetadata:\n name: my-k8s-app-service\nspec:\n selector:\n app: my-k8s-app\n ports:\n - protocol: TCP\n port: 80\n targetPort: 8080\n type: ClusterIP\n\nClusterIP — एक आंतरिक सेवा, जो केवल क्लस्टर के अंदर ही पहुंच योग्य है। बाहरी पहुंच के लिए हम Ingress का उपयोग करते हैं।
3. Ingress और ConfigMap कॉन्फ़िगरेशन
\n\n3.1. Ingress (ingress.yaml)
\nIngress डोमेन नाम के माध्यम से सेवा तक बाहरी पहुंच प्रदान करता है।
\napiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n name: my-k8s-app-ingress\n annotations:\n nginx.ingress.kubernetes.io/rewrite-target: /\nspec:\n rules:\n - host: myapp.example.com\n http:\n paths:\n - path: /\n pathType: Prefix\n backend:\n ser