مقدمة: لماذا ننشر 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.
\n1.1. إنشاء خادم بسيط (app.js)
\nconst 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 "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\n1.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
2. إنشاء ملفات YAML لـ Kubernetes
\nيستخدم Kubernetes نهجًا تصريحيًا: نصف الحالة المرغوبة للنظام في ملفات YAML، ويقوم K8s بجعل كل شيء يطابق هذه الحالة. سنحتاج إلى ثلاثة موارد رئيسية: Deployment و Service و Ingress.
\n2.1. Deployment (deployment.yaml)
\nيتولى Deployment مسؤولية تشغيل وتحديث البودات (الحاويات). يضمن أن العدد المطلوب من النسخ يعمل دائمًا.
\napiVersion: 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— تشغ