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

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

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

ابدأ الدورة

نشر JavaScript (Node.js) على Kubernetes: دليل أساسي عملي



تطوير الويب الحديث لا يمكن تصوره بدون الحاويات والتنسيق. إذا كنت تكتب بلغة JavaScript (Node.js)، فسيأتي الوقت عاجلاً أم آجلاً حيث يطرح السؤال: كيف تشغل التطبيق بشكل موثوق في بيئة الإنتاج، وتضمن قابلية التوسع وتحمل الأعطال؟ الإجابة هي Kubernetes. إنها ليست مجرد أداة عصرية، بل هي المعيار الفعلي لإدارة التطبيقات المعبأة في حاويات.

في هذا الدليل، سنستعرض دورة النشر الكاملة لتطبيق Node.js بسيط على Kubernetes. ستتعلم كيفية تعبئة الكود في صورة Docker، وإنشاء المانيفستات اللازمة، وتشغيل كل شيء في الكتلة. المادة موجهة للمطورين الذين هم على دراية بأساسيات Node.js ويريدون إتقان ممارسات DevOps.



1. تحضير تطبيق Node.js للحاوية

قبل نشر التطبيق على Kubernetes، يجب تعبئته في حاوية. للقيام بذلك، سننشئ تطبيق Express بسيط. تأكد من تثبيت Node.js و npm لديك.

أنشئ ملف app.js:

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

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

app.get('/health', (req, res) => { res.status(200).send('OK');});

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

من المهم إضافة نقطة النهاية /health — سيستخدمها Kubernetes للتحقق من قابلية التشغيل (liveness probe).

الآن، أنشئ Dockerfile في جذر المشروع:

FROM node:18-alpine

WORKDIR /usr/src/app

COPY package*.json ./RUN npm install --production

COPY . .

EXPOSE 3000

CMD ["node", "app.js"]

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

docker build -t my-node-app:latest .docker run -p 3000:3000 my-node-app:latest

افتح http://localhost:3000 — يجب أن ترى استجابة JSON.



2. مانيفستات Kubernetes الأساسية لـ Node.js

يعمل Kubernetes مع التكوينات التصريحية (YAML). لنشر تطبيق Node.js، سنحتاج إلى موردين رئيسيين على الأقل: Deployment و Service.



2.1. Deployment

يدير Deployment نسخ تطبيقك. أنشئ ملف 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: my-node-app:latest        ports:        - containerPort: 3000        env:        - name: PORT          value: "3000"        livenessProbe:          httpGet:            path: /health            port: 3000          initialDelaySeconds: 5          periodSeconds: 10        readinessProbe:          httpGet:            path: /            port: 3000          initialDelaySeconds: 3          periodSeconds: 5

نقاط مهمة:

  • replicas: 3 — سينشئ Kubernetes 3 نسخ من تطبيقك لتحمل الأعطال.
  • livenessProbe — يتحقق مما إذا كان التطبيق حياً. إذا لم تكن هناك استجابة، سيعيد Kubernetes تشغيل الحاوية.
  • readinessProbe — يتحقق مما إذا كان التطبيق جاهزاً لاستقبال الحركة المرورية. طالما لم ينجح الفحص، لا تتلقى الحاوية الطلبات.


2.2. Service

يوفر Service الوصول الشبكي إلى الحاويات. أنشئ service.yaml:

apiVersion: v1kind: Servicemetadata:  name: node-app-servicespec:  selector:    app: node-app  ports:    - protocol: TCP                

المدونات

توصيات الكتب