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

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

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

ابدأ الدورة

مقدمة: لماذا تشغيل C# في Kubernetes؟

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

ستتعلم كيفية إعداد صورة Docker، وكتابة ملفات البيان لـ Kubernetes، وتنفيذ النشر باستخدام kubectl. المقالة موجهة للمطورين الذين هم على دراية بأساسيات C# ويريدون إتقان ممارسات DevOps الحديثة.



1. تحضير تطبيق C# للحاويات

قبل نشر التطبيق في Kubernetes، يجب حزمه في صورة Docker. على سبيل المثال، سنأخذ تطبيق ASP.NET Core Web API بسيط.



1.1. إنشاء المشروع

أنشئ مشروعًا جديدًا باستخدام .NET CLI:

dotnet new webapi -n MyK8sAppcd MyK8sApp

تأكد من أن التطبيق يعمل محليًا:

dotnet run

سيكون التطبيق متاحًا افتراضيًا على العنوان http://localhost:5000.



1.2. إضافة Dockerfile

في جذر المشروع، أنشئ ملفًا باسم Dockerfile (بدون امتداد). استخدم البناء متعدد المراحل لتحسين حجم الصورة:

# مرحلة البناءFROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /appCOPY *.csproj ./RUN dotnet restoreCOPY . ./RUN dotnet publish -c Release -o out

# مرحلة التشغيلFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtimeWORKDIR /appCOPY --from=build /app/out ./ENV ASPNETCORE_URLS=http://+:80EXPOSE 80ENTRYPOINT ["dotnet", "MyK8sApp.dll"]


1.3. بناء صورة Docker والتحقق منها

قم ببناء الصورة وتشغيلها محليًا:

docker build -t myk8sapp:latest .docker run -d -p 8080:80 --name myapp myk8sapp:latest

تحقق من استجابة التطبيق: curl http://localhost:8080/weatherforecast (أو افتحه في المتصفح).



2. كتابة ملفات بيان Kubernetes

للنشر في Kubernetes، ستحتاج إلى ملفات YAML تصف الحالة المرغوبة للتطبيق. تتضمن المجموعة الدنيا Deployment و Service.



2.1. إنشاء Deployment

ملف deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  name: myk8sapp-deployment  labels:    app: myk8sappspec:  replicas: 2  selector:    matchLabels:      app: myk8sapp  template:    metadata:      labels:        app: myk8sapp    spec:      containers:      - name: myk8sapp        image: myk8sapp:latest        ports:        - containerPort: 80        env:        - name: ASPNETCORE_ENVIRONMENT          value: "Production"        resources:          requests:            memory: "128Mi"            cpu: "250m"          limits:            memory: "256Mi"            cpu: "500m"

هام: إذا كنت تستخدم مجموعة محلية (مثل Minikube أو Kind)، يجب أن تكون الصورة متاحة داخل المجموعة. أو حدد imagePullPolicy: Never للصور المحلية.



2.2. إنشاء Service

ملف service.yaml:

apiVersion: v1kind: Servicemetadata:  name: myk8sapp-servicespec:  selector:    app: myk8sapp  ports:    - protocol: TCP      port: 80      targetPort: 80  type: LoadBalancer

نوع LoadBalancer مناسب لمزودي الخدمات السحابية. للمجموعات المحلية، استخدم NodePort أو ClusterIP مع إعادة توجيه المنافذ عبر kubectl port-forward.



3. نشر التطبيق والتحقق منه

الآن بعد أن أصبحت ملفات البيان جاهزة، قم بتنفيذ النشر في مجموعة Kubernetes.



3.1. تطبيق ملفات البيان

المدونات

توصيات الكتب