نشر JavaScript (Node.js) على Kubernetes: دليل خطوة بخطوة

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

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

ابدأ الدورة

مقدمة: لماذا Kubernetes لتطبيقات Node.js؟

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

في هذا الدليل، سنخوض الرحلة الكاملة: من تطبيق Node.js بسيط إلى تشغيله في بيئة شبيهة بالإنتاج على Kubernetes. ستتعلم كيفية حزم الكود الخاص بك في صورة Docker، وإنشاء موارد K8s الضرورية (Pod و Deployment و Service)، وتكوين الوصول الخارجي.



1. تحضير تطبيق Node.js

أولاً، لنقم بإنشاء تطبيق Express بسيط. سوف يستجيب لطلبات HTTP ويعرض اسم المضيف للحاوية (مفيد للتحقق من موازنة التحميل).



1.1. ملف app.js

const express = require('express');const os = require('os');

const app = express();const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => { res.json({ message: 'Hello from Node.js on Kubernetes!', hostname: os.hostname(), timestamp: new Date().toISOString() });});

app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});


1.2. ملف package.json

{  "name": "k8s-node-app",  "version": "1.0.0",  "dependencies": {    "express": "^4.18.2"  },  "scripts": {    "start": "node app.js"  }}


2. الحاويات: صورة Docker

يعمل Kubernetes مع الحاويات. دعنا ننشئ Dockerfile صغيرًا لتطبيق Node.js الخاص بنا. سنستخدم صورة Node.js الرسمية والبناء متعدد المراحل لتحسين الحجم.



2.1. Dockerfile

FROM node:18-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm ci --only=production

FROM node:18-alpineWORKDIR /appCOPY --from=builder /app/node_modules ./node_modulesCOPY . .EXPOSE 3000CMD ["node", "app.js"]


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

docker build -t your-dockerhub/k8s-node-app:v1 .docker push your-dockerhub/k8s-node-app:v1


3. النشر على Kubernetes

الآن دعنا ننتقل إلى الجزء الرئيسي — إنشاء موارد Kubernetes. سنستخدم Deployment (لإدارة Pods) و Service (للوصول عبر الشبكة).



3.1. إنشاء Deployment

يضمن Deployment أن العدد المطلوب من Pods مع تطبيقك يعمل دائمًا. قم بإنشاء ملف deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  name: node-app-deployment  labels:    app: node-appspec:  replicas: 3  selector:    matchLabels:      app: node-app  template:    metadata:      labels:        app: node-app    spec:      containers:      - name: node-app        image: your-dockerhub/k8s-node-app:v1        ports:        - containerPort: 3000        env:        - name: PORT          value: "3000"        resources:          requests:            memory: "64Mi"            cpu: "100m"          limits:            memory: "128Mi"            cpu: "200m"


3.2. إنشاء Service

يوفر Service عنوان IP ثابتًا واسم DNS للوصول إلى Pods. قم بإنشاء service.yaml:

apiVersion: v1kind: Servicemetadata:  name: node-app-servicespec:  selector:    app: node-app  ports:    - protocol: TCP      port: 80      targetPort: 3000  type: ClusterIP


3.3. التشغيل على المجموعة

قم بتنفيذ الأوامر (تأكد من أن لديك kubectl مهيأ وإمكانية الوصول إلى المجموعة):

kubectl apply -f deployment.yamlkubectl app                

المدونات

توصيات الكتب