Blank white background with no objects or features visible.

تعلن TrueFoundry عن استحواذها على Seldon AI، موسعة بذلك لوحة التحكم الخاصة بها للذكاء الاصطناعي للمؤسسات. البيان الصحفي الكامل →

التوسع إلى الصفر في Kubernetes: نظرة عميقة على Elasti

By TrueFoundry

Published: July 4, 2026

Elasti هو حل مبتكر مفتوح المصدر مصمم لتحسين استخدام موارد Kubernetes عن طريق تمكين الخدمات من التحجيم إلى الصفر خلال فترات الخمول والتحجيم مرة أخرى عند الطلب. تم بناؤه ببنية مكونة من جزأين — وحدة تحكم Kubernetes ومحلل طلبات — يدير Elasti توفر الخدمة بسلاسة مع تقليل التكاليف. يهدف هذا المنشور إلى تقديم شرح فني لبنيته، وتثبيته، وسير عملياته، مما يضمن قدرتك على دمج Elasti وتوسيعه بفعالية في بيئات Kubernetes الخاصة بك.

💡تُدرج هذه الميزة ضمن مجموعة Truefoundry للتحجيم التلقائي. للحصول على تفاصيل إضافية، يرجى الرجوع إلى الـ وثائق.

مشهد التحجيم إلى الصفر

بينما يوفر Kubernetes إمكانيات تحجيم قوية من خلال HPA وحلول مثل KEDA، يظل التحجيم إلى صفر نسخة متماثلة يمثل تحديًا. تندرج الأساليب الحالية عادةً ضمن فئتين:

  1. التحجيم الأصلي لـ KEDA - بينما يمكن لـ KEDA تحجيم عمليات النشر إلى الصفر باستخدام مقاييس الأحداث، يؤدي هذا إلى إنشاء فترة زمنية قد تُفقد خلالها الطلبات الواردة أثناء فترة البدء البارد للتحجيم.
  2. شبكات الخدمات الكاملة (على سبيل المثال، Knative) - توفر تحجيمًا شاملاً إلى الصفر ولكنها تتطلب تغييرات معمارية كبيرة وتتحمل أعباء تشغيلية عالية.
  3. وكلاء HTTP (على سبيل المثال، KEDA HTTP Add-on) - تحافظ على طبقات وكيل دائمة تُحدث زمن انتقال حتى بعد تحجيم الخدمات.

لماذا Elasti؟

تم إنشاء Elasti لمعالجة هذه القيود بثلاثة أهداف تصميم رئيسية:

  1. تكامل خفيف الوزن - يعمل مع عمليات النشر/الخدمات الحالية دون الحاجة إلى تغييرات في الكود.
  2. لا يوجد حمل إضافي من الوكيل - يخرج من مسار الطلب بمجرد توسيع نطاق الخدمات.
  3. توسيع نطاق مُحسّن التكلفة - توسيع نطاق حقيقي إلى الصفر دون الحاجة إلى مكونات تعمل باستمرار.

كيف يعمل

يتكون Elasti من مكونين أساسيين يعملان معًا لإدارة توسيع نطاق الخدمة:

وحدة التحكم (المشغل):

  • يراقب موارد ElastiService في مجموعة Kubernetes الخاصة بك.
  • يقوم بتوسيع نطاق الخدمات ديناميكيًا بين 0 و 1 بناءً على مقاييس حركة المرور في الوقت الفعلي.

المحلل:

  • يعمل كوكيل لاعتراض الطلبات الواردة عندما يتم تقليص حجم الخدمة.
  • يضع هذه الطلبات في قائمة انتظار ويُعلم وحدة التحكم بتوسيع نطاق الخدمة مرة أخرى، مما يضمن عدم فقدان أي طلب.

تدفق مستقر للطلبات إلى الخدمات

في هذا الوضع، يتم التعامل مع جميع الطلبات مباشرة بواسطة وحدات خدمة البودات (service pods). لا يتدخل محلل Elasti في مسار الطلب. تستمر وحدة تحكم Elasti في استقصاء Prometheus بالاستعلام المكون وتتحقق من النتيجة مقابل قيمة العتبة لمعرفة ما إذا كان يمكن تقليص حجم الخدمة.

تدفق مستقر

تقليص الحجم إلى 0 عندما لا توجد طلبات

إذا أعاد الاستعلام من Prometheus قيمة أقل من العتبة، فسيقوم Elasti بتقليص حجم الخدمة إلى 0. قبل أن يتم تقليصها إلى 0، يقوم بإعادة توجيه الطلبات ليتم إرسالها إلى محلل Elasti ثم يقوم بتعديل Rollout/deployment ليصبح عدد النسخ المتماثلة (replicas) 0. كما يقوم بعد ذلك بإيقاف Keda مؤقتًا (إذا كان Keda قيد الاستخدام) لمنعه من توسيع نطاق الخدمة، نظرًا لأن Keda مُكوّن بـ minReplicas كـ 1.

التقليص إلى 0

توسيع النطاق من 0 عند وصول الطلب الأول.

نظرًا لتقليص الخدمة إلى 0، ستصل جميع الطلبات إلى محلل Elasti. عند وصول الطلب الأول، سيقوم Elasti بتوسيع نطاق الخدمة إلى الحد الأدنى من النسخ المستهدفة (minTargetReplicas) المكونة. ثم يستأنف Keda لمواصلة التوسيع التلقائي في حال وجود تدفق مفاجئ للطلبات. كما يغير الخدمة لتشير إلى وحدات الخدمة الفعلية (pods) بمجرد تشغيل الوحدة. تتم إعادة محاولة الطلبات التي وصلت إلى ElastiResolver لمدة تصل إلى 6 دقائق ويتم إرسال الاستجابة مرة أخرى إلى العميل. إذا استغرقت الوحدة (pod) أكثر من 6 دقائق للتشغيل، يتم إسقاط الطلب.

مقلص حاليًا إلى 0
تلقي طلب

البدء

نشر تطبيق بسيط باستخدام Elasti

  1. إنشاء مجموعة محلية

minikube start

أو

kind create cluster --name elasti-demo

أو


إنشاء مجموعة محلية باستخدام Docker Desktop

  1. إعداد Prometheus

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
 --namespace monitoring \
 --create-namespace \
 --set alertmanager.enabled=false \
 --set grafana.enabled=false \
 --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false

تثبيت وإعداد Prometheus في مساحة اسم المراقبة مساحة الاسم

سيتم استخدام Prometheus لقراءة المقاييس من مدخل Nginx، والتي ستستخدمها Elasti لاحقًا للاستعلام عن المقاييس، وبناءً عليها ستقرر متى يتم توسيع نطاق الخدمة إلى الصفر ومنه.

  1. إعداد مدخل Nginx

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx \
 --namespace ingress-nginx \
 --set controller.metrics.enabled=true \
 --set controller.metrics.serviceMonitor.enabled=true \
 --create-namespace

ينشر وحدة تحكم Nginx في ingress-nginx مساحة الاسم

ستُستخدم وحدة التحكم لتوجيه حركة المرور إلى خدمة httpbin التجريبية الخاصة بنا.

4. إعداد Elasti:

helm repo add elasti https://charts.truefoundry.com/elasti
helm repo update
helm install elasti oci://tfy.jfrog.io/tfy-helm/elasti \
 --namespace elasti --create-namespace

تثبيت Elasti باستخدام helm في مساحة الاسم elasti

بعد تثبيت Elasti، ستلاحظ أن مكونيه الأساسيين يعملان:

  • وحدة التحكم/المشغل: يتولى إدارة تبديل حركة المرور وتوسيع نطاقها من خلال مراقبة المقاييس.
  • المُحلِّل: يعترض الطلبات الواردة ويضعها في قائمة انتظار ويعمل كوكيل لها

لمزيد من التكوينات المتقدمة، اطلع على values.yaml للاطلاع على جميع خيارات التكوين في ملف قيم helm.

  1. نشر تطبيق تجريبي

kubectl create namespace elasti-demo
kubectl apply -n elasti-demo -f \
https://raw.githubusercontent.com/truefoundry/elasti/refs/heads/main/playground/config/demo-application.yaml

نشر خدمة httpbin في elasti-demo مساحة الاسم

ستُستخدم خدمة httpbin هذه لتوضيح كيفية تكوين خدمة للتعامل مع حركة المرور عبر elasti.

  1. إنشاء مورد ElastiService:

أنشئ ملف yaml بالتكوين التالي لـ ElastiService.

apiVersion: elasti.truefoundry.com/v1alpha1
kind: ElastiService
metadata:
 name: httpbin-elasti
 namespace: elasti-demo
spec:
 minTargetReplicas: 1
 service: httpbin
 cooldownPeriod: 5
 scaleTargetRef:
   apiVersion: apps/v1
   kind: deployments
   name: httpbin
 triggers:
   - type: prometheus
     metadata:
       query: sum(rate(nginx_ingress_controller_nginx_process_requests_total[1m])) or vector(0)
       serverAddress: http://kube-prometheus-stack-prometheus.monitoring.svc.cluster.local:9090
       threshold: "0.5"

demo-elasti-service.yaml

بمجرد إنشاء الملف، قم بتطبيق ElastiService

kubectl apply -f https://raw.githubusercontent.com/truefoundry/elasti/refs/heads/main/playground/config/demo-elastiService.yaml

بعض الحقول الرئيسية في مواصفات CRD هي:

  • minTargetReplicas: الحد الأدنى من النسخ المتماثلة التي يتم تشغيلها عند وصول الطلب الأول.
  • cooldownPeriod: الحد الأدنى للوقت (بالثواني) للانتظار بعد التوسع قبل النظر في تقليص الحجم
  • triggers: قائمة بالشروط التي تحدد متى يتم تقليص الحجم (يدعم حاليًا مقاييس Prometheus فقط)
  • scaleTargetRef:  مرجع إلى هدف التوسع مماثل للمستخدم في HorizontalPodAutoscaler.

لمزيد من التفاصيل وتكوين ElastiService لحالة الاستخدام الخاصة بك، يرجى الرجوع إلى هذا المستند.

اختبار الإعداد

بهذه الخطوات، أصبح لديك الآن:

  • Ingress nginx يعمل كوحدة تحكم Ingress الخاصة بك.
  • Prometheus تم إعداده لجمع المقاييس (بما في ذلك تلك من Ingress NGINX).
  • httpbin منشور ومتاح عبر مسار Ingress.

يساعدك هذا التكوين على اختبار سيناريوهات التوجيه الواقعية ومراقبة أداء ومقاييس حركة مرور الدخول الخاصة بك.

لاختبار هذا الإعداد، يمكنك إرسال طلبات إلى موازن التحميل nginx ومراقبة وحدات البود (pods) لخدمتنا التجريبية.

kubectl port-forward svc/nginx-ingress-nginx-controller \
 -n ingress-nginx 8080:80

توجيه المنفذ إلى وحدة التحكم nginx

kubectl get pods -n elasti-demo -w

ابدأ بمراقبة خدمة httpbin

الآن يمكنك إرسال طلب إلى http://localhost:8080/httpbin وستلاحظ توسيع نطاق الخدمة إلى نسخة واحدة بواسطة elasti.

curl -v http://localhost:8080/httpbin

أرسل طلبًا إلى خدمة httpbin

سيتم تقليص حجم الخدمة مرة أخرى بعد عدم وجود نشاط لمدة cooldownPeriod ثانية محددة في ElastiService (5 ثوانٍ في هذه الحالة).

إلغاء تثبيت Elasti

لإلغاء تثبيت Elasti، ستحتاج إلى إزالة جميع خدمات ElastiService المثبتة أولاً. ثم، احذف ملف التثبيت ببساطة.

kubectl delete elastiservices --all
helm uninstall elasti -n elasti
kubectl delete namespace elasti

مقارنات

جدول مقارنة الميزات:

Feature Elasti Knative KEDA HTTP Addon
Scale to Zero
Works with existing services
Zero additional latency
Resource footprint Low High Low
Setup complexity Low High Medium

متى تختار Elasti

Elasti هو الخيار الأمثل عندما:

  • تحتاج إلى إضافة إمكانية التوسع إلى الصفر (scale-to-zero) لخدمات HTTP الحالية
  • ترغب في ضمان عدم فقدان أي طلبات أثناء عمليات التحجيم
  • تفضل حلاً خفيف الوزن بأقل قدر من التكوين
  • تحتاج إلى التكامل مع أدوات التحجيم التلقائي (autoscalers) الموجودة (HPA/KEDA)

كلمات أخيرة

تم تطوير Elasti لمعالجة تحدٍ محدد في Kubernetes: تطبيق التوسع الحقيقي إلى الصفر (scale-to-zero) دون التضحية بسلامة الطلبات أو فرض أعباء إضافية مفرطة. يدعم هذا الحل التحجيم التلقائي الأصلي (native autoscaling) مع HPA و KEDA، مما يضمن بقاء تكوينات الخدمات الحالية دون تغيير مع تحقيق الاستخدام الفعال للموارد.

من خلال إتاحة هذه الأداة كمصدر مفتوح، نهدف إلى توفير حل قوي للبيئات التي تتطلب توسعًا حقيقيًا إلى الصفر، وعدم فقدان أي طلبات، وبصمة تشغيلية ضئيلة.

نرحب بالمساهمات والملاحظات من المجتمع — استكشف الـ وثيقة التطوير لمزيد من التفاصيل.

The fastest way to build, govern and scale your AI

Sign Up
Table of Contents

One Gateway for Every LLM, Agent and MCP Server

Book a 30-min with our AI expert

Book a Demo

The fastest way to build, govern and scale your AI

Book Demo
Summarize with
ChatGPT logo by OpenAI
Perplexity AI logo
Blurry red snowflake on white background, symmetrical frosty design with soft edges and abstract shape.

Discover More

November 5, 2025
|
5 min read

توطين البيانات في عصر الذكاء الاصطناعي الوكيل: كيف تمكّن بوابات الذكاء الاصطناعي التوسع السيادي والامتثال

October 5, 2023
|
5 min read

<Webinar> عرض الذكاء الاصطناعي التوليدي للمؤسسات

Best Fine Tuning Tools for Model Training
May 3, 2024
|
5 min read

أفضل 6 أدوات ضبط دقيق لتدريب النماذج في عام 2026

May 25, 2023
|
5 min read

النماذج اللغوية الكبيرة مفتوحة المصدر: تبنّها أو تندثر

July 4, 2026
|
5 min read

تكاملات منصة التعلم الآلي #1: Weights & Biases

Use Cases
Engineering and Product
July 4, 2026
|
5 min read

تكامل Pillar Security مع TrueFoundry

No items found.
July 4, 2026
|
5 min read

التخزين المؤقت الدلالي لنماذج اللغة الكبيرة (LLMs): تقليل التكلفة وزمن الاستجابة بما يتجاوز التخزين المؤقت للبادئات

No items found.
July 4, 2026
|
5 min read

تكاملات أدوات التعلم الآلي #2 DVC لإدارة إصدارات بياناتك

Engineering and Product
Use Cases
No items found.

Recent Blogs

Black left pointing arrow symbol on white background, directional indicator.
Black left pointing arrow symbol on white background, directional indicator.

Frequently asked questions

What does Kubernetes scale to zero mean?

Kubernetes scale to zero means reducing the number of running pods for a workload all the way down to zero replicas during periods of inactivity. When no traffic or demand is present, the deployment consumes no compute resources and incurs no cloud costs. When a new request arrives, the system automatically scales back up from zero and serves the workload.

Which tools enable scale to zero in Kubernetes?

The primary tools enabling scale to zero in Kubernetes include KEDA (Kubernetes Event-Driven Autoscaling), which scales based on external event sources like queues and HTTP traffic, and Knative Serving, which provides serverless-style scale-to-zero behavior for containerized workloads. TrueFoundry's deployment infrastructure also builds on these primitives to offer scale-to-zero for ML model serving, reducing GPU and CPU costs during idle periods.

Does Kubernetes support scale to zero natively?

Kubernetes does not support scale to zero natively through its built-in Horizontal Pod Autoscaler (HPA), as HPA has a minimum replica count of one. Achieving true scale-to-zero requires additional tools such as KEDA or Knative, which extend Kubernetes' autoscaling capabilities to include zero-replica deployments triggered by external events or HTTP request-based scaling.

Take a quick product tour
Start Product Tour
Product Tour