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

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

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

ابدأ الدورة

مقدمة: لماذا ننشر JavaScript على Kubernetes؟

\n

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

\n

في هذا الدليل، سنشرح العملية الأساسية لنشر تطبيق Node.js بسيط في مجموعة Kubernetes. ستتعلم كيفية إعداد صورة Docker، وكتابة ملفات YAML اللازمة (Deployment، Service، Ingress)، وتشغيل التطبيق. المقال موجه للمطورين الذين لديهم معرفة أساسية بـ Node.js و Docker، لكنهم بدأوا للتو رحلتهم في عالم Kubernetes.

\n
\n

1. إعداد تطبيق Node.js وصورة Docker

\n

أولاً، نحتاج إلى تطبيق سنقوم بنشره. سننشئ خادم HTTP بسيطًا باستخدام Express يستجيب لطلبات GET.

\n

1.1. إنشاء خادم بسيط (app.js)

\n
const express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n  res.send('Hello from Node.js on Kubernetes!');\n});\n\napp.listen(PORT, () => {\n  console.log(`Server running on port ${PORT}`);\n});\n
\n

ملف package.json (التبعيات):

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

1.2. Dockerfile لـ Node.js

\n

لكي يتمكن Kubernetes من تشغيل تطبيقنا، يجب حزمه في حاوية. سنستخدم الصورة الرسمية لـ Node.js (الإصدار 18 LTS).

\n
# نستخدم الصورة الرسمية لـ Node.js\nFROM node:18-alpine\n\n# نحدد دليل العمل داخل الحاوية\nWORKDIR /usr/src/app\n\n# ننسخ ملفي package.json و package-lock.json\nCOPY package*.json ./\n\n# نثبت التبعيات\nRUN npm install --production\n\n# ننسخ الكود المصدري للتطبيق\nCOPY . .\n\n# نحدد المنفذ الذي سيستمع إليه التطبيق\nEXPOSE 3000\n\n# الأمر لتشغيل التطبيق\nCMD ["node", "app.js"]\n
\n

بناء الصورة وإرسالها إلى السجل:

\n
# بناء الصورة\ndocker build -t my-registry/node-app:v1 .\n\n# دفعها إلى Docker Hub أو سجلك الخاص\ndocker push my-registry/node-app:v1\n
\n

استبدل my-registry باسم سجلك (مثل docker.io/username/node-app).

\n
\n

2. إنشاء ملفات YAML لـ Kubernetes

\n

يستخدم Kubernetes نهجًا تصريحيًا: نصف الحالة المرغوبة للنظام في ملفات YAML، ويقوم K8s بجعل كل شيء يطابق هذه الحالة. سنحتاج إلى ثلاثة موارد رئيسية: Deployment و Service و Ingress.

\n

2.1. Deployment (deployment.yaml)

\n

يتولى Deployment مسؤولية تشغيل وتحديث البودات (الحاويات). يضمن أن العدد المطلوب من النسخ يعمل دائمًا.

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: node-app-deployment\n  labels:\n    app: node-app\nspec:\n  replicas: 3  # عدد النسخ (نسخ) التطبيق\n  selector:\n    matchLabels:\n      app: node-app\n  template:\n    metadata:\n      labels:\n        app: node-app\n    spec:\n      containers:\n      - name: node-app\n        image: my-registry/node-app:v1\n        ports:\n        - containerPort: 3000\n        env:\n        - name: PORT\n          value: "3000"\n        resources:\n          requests:\n            memory: "64Mi"\n            cpu: "250m"\n          limits:\n            memory: "128Mi"\n            cpu: "500m"\n
\n

نقاط رئيسية:

\n
    \n
  • replicas: 3 — تشغ

المدونات

توصيات الكتب