نشر تطبيق C# على Kubernetes: دليل أساسي عملي

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

نشر تطبيق C# على Kubernetes: دليل عملي لمطوري .NET

\n\n

التطوير الحديث باستخدام C# (.NET) يتطلب بشكل متزايد ليس فقط كتابة كود عالي الجودة، ولكن أيضًا القدرة على نشر التطبيق بشكل صحيح في بيئة الإنتاج. أصبح Kubernetes (K8s) المعيار الفعلي لتنسيق الحاويات. في هذه المقالة، سنستعرض عملية نشر تطبيق C# على Kubernetes خطوة بخطوة - بدءًا من الحاويات وصولاً إلى إعداد Ingress.

\n\n

1. تحضير تطبيق .NET وصورة Docker

\n\n

قبل الوصول إلى Kubernetes، يجب حزم تطبيق C# الخاص بك في صورة Docker. لننظر في مثال بسيط لـ ASP.NET Core Web API.

\n\n

أنشئ المشروع:

\n
dotnet new webapi -n MyK8sApp\ncd MyK8sApp
\n\n

أضف endpoint بسيط (ملف Program.cs):

\n
var builder = WebApplication.CreateBuilder(args);\nvar app = builder.Build();\n\napp.MapGet("/", () => "Hello from C# on Kubernetes!");\n\napp.Run();
\n\n

الآن لننشئ Dockerfile في جذر المشروع:

\n
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\n

قم ببناء الصورة ودفعها إلى Docker Hub أو سجل محلي:

\n
docker build -t yourdockerhub/my-k8s-app:v1 .\ndocker push yourdockerhub/my-k8s-app:v1
\n\n

هام: في ASP.NET Core 8+، يستمع التطبيق افتراضيًا على المنفذ 8080، وهو مثالي لـ Kubernetes.

\n\n

2. ملفات YAML الأساسية لـ Kubernetes

\n\n

يدير Kubernetes الموارد من خلال ملفات YAML. لتشغيل تطبيق C#، سنحتاج على الأقل إلى Deployment و Service.

\n\n

2.1. Deployment (deployment.yaml)

\n

يتولى Deployment الحفاظ على العدد المطلوب من نسخ Pod.

\n
apiVersion: 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 — فحص الصحة (يوصى بإضافة endpoint /health في C#)
  • \n
  • الموارد requests/limits تساعد جدولة K8s
  • \n
\n\n

2.2. Service (service.yaml)

\n

يوفر Service نقطة دخول ثابتة إلى Pods.

\n
apiVersion: 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\n

ClusterIP — خدمة داخلية، يمكن الوصول إليها فقط داخل الكتلة. للوصول الخارجي نستخدم Ingress.

\n\n

3. إعداد Ingress و ConfigMap

\n\n

3.1. Ingress (ingress.yaml)

\n

يفتح Ingress الوصول إلى الخدمة من الخارج عبر اسم النطاق.

\n
apiVersion: 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                

المدونات

توصيات الكتب