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

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

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

ابدأ الدورة

نشر C# على Kubernetes: دليل أساسي

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

المقال موجه للمطورين الذين هم بالفعل على دراية بأساسيات C# و Docker، لكنهم بدأوا للتو العمل مع Kubernetes.



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

قبل نشر التطبيق على Kubernetes، يجب حزمه في حاوية. سننشئ واجهة برمجة تطبيقات ويب (Web API) بسيطة بلغة C#.

  1. أنشئ مشروعًا جديدًا:
    dotnet new webapi -n MyK8sAppcd MyK8sApp
  2. تأكد من أن التطبيق يستمع على المنفذ 80. في ملف Program.cs (أو appsettings.json)، حدد:
    builder.WebHost.UseUrls("http://0.0.0.0:80");
  3. أنشئ ملف 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"]
  4. قم ببناء الصورة وإرسالها إلى السجل (مثل Docker Hub):
    docker build -t yourdockerhub/my-k8s-app:v1 .docker push yourdockerhub/my-k8s-app:v1

هام: استبدل yourdockerhub باسم المستخدم الفعلي. للاختبار المحلي، يمكنك استخدام minikube وعدم نشر الصورة - يكفي بناؤها محليًا.



2. إنشاء ملفات تعريف Kubernetes (Manifests)

يستخدم 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 إلى المتحكم (Controller) الخاص بك.


2.2. Service (الخدمة)

أنشئ ملف service.yaml:

apiVersion: v1kind: Servicemetadata:  name: my-k8s-app-servicespec:  selecto

المدونات

توصيات الكتب