حاسبة ميزانية موارد Kubernetes
تقارن طلبات وحدة المعالجة والذاكرة لحِمل العمل بحجم العُقدة، وتُظهر عدد العُقد التي تحتاجها والمورد الذي يُشكّل عنق الزجاجة والتكلفة الشهرية التقديرية. تتم جميع الحسابات في متصفحك.
آخر تحديث:
النتائج
أدخل القيم ثم اضغط "احسب".
يرجى إدخال أرقام صحيحة أكبر من الصفر في جميع الحقول.
- المورد المُقيِّد
- وحدة المعالجة
- استخدام وحدة المعالجة
- 41.7%
- استخدام الذاكرة
- 20.8%
- حاويات لكل عُقدة (متوسط)
- 6.0
- التكلفة الشهرية التقديرية
يُفترض حد أقصى 110 حاوية لكل عُقدة (افتراضي kubelet). لا تُحتسب DaemonSets أو تقارب الحاويات أو توزيع الطوبولوجيا؛ هذا تقدير أولي.
متى تستحق هذه الحسبة وقتك
قبل اختيار نوع العُقدة
نِسَب المعالجة إلى الذاكرة تختلف بين عائلات العُقد أكثر مما يختلف سعر النواة الواحدة. ومن يختار قبل أن يعرف أيّ مورد يقيّد حِمله ينتهي به الأمر مستأجرًا ذاكرة لا يمسّها أحد.
حين يرتفع عدد العُقد بلا سبب واضح
المُوسِّع التلقائي الذي يضيف عُقدة تلو الأخرى يشكو غالبًا من سوء التعبئة لا من زيادة الحِمل. وفي العنقود الذي أُشغّله أسفل هذه الصفحة تظهر الفجوة بوضوح: المعالجة تتراوح بين 4% و10% بينما الذاكرة ثابتة قرب 38% إلى 49%، وحاوية GitLab وحدها تحجز 3.8 غيغابايت مقابل 61 مِلي من المعالجة فقط.
قبل تغيير قيم الطلب
خفض طلب الذاكرة يبدو تعديلًا صغيرًا. أثره على عدد العُقد ليس صغيرًا دائمًا.
مثال محسوب: حين يقيّدك سقف الحاويات لا المعالجة ولا الذاكرة
خدمة مُجزّأة إلى نُسخ صغيرة كثيرة: 260 نسخة، لكل حاوية 50 مِلي من المعالجة و128 ميغابايت من الذاكرة. والعُقد بثماني أنوية و32 غيغابايت، محجوز منها 10% للنظام. تحسب الأداة ثلاثة حدود ثم تأخذ أكبرها.
- السعة القابلة للتخصيص: 7200 مِلي معالجة و29491 ميغابايت لكل عُقدة.
- المعالجة: 260 × 50 = 13000 مِلي. 13000 ÷ 7200 = 1.81، أي عُقدتان.
- الذاكرة: 260 × 128 = 33280 ميغابايت. 33280 ÷ 29491 = 1.13، أي عُقدتان أيضًا.
- عدد الحاويات: 260 مقابل سقف 110 لكل عُقدة. 260 ÷ 110 = 2.36، أي ثلاث عُقد.
- النتيجة ثلاث عُقد، والقيد هنا سقف الحاويات وحده.
المعالجة والذاكرة كلتاهما كانتا تكتفيان بعُقدتين، غير أنّ سقف kubelet فرض عُقدة ثالثة. وشراء عُقد أكبر لا يحلّ شيئًا هنا، لأنّ القيد ليس قيد موارد بل رقم قابل للضبط عبر max-pods. فمن رأى فاتورته ترتفع بينما لوحات المراقبة تُظهر موارد شبه خاملة، فليتحقق من هذا الرقم قبل أيّ شيء آخر.
أربعة أخطاء متكررة
الخلط بين الحدّ والطلب
المُجدوِل يوزّع الحاويات بناءً على الطلب وحده. فإن تركت الحدّ عند نواتين والطلب عند 100 مِلي، وضع Kubernetes الحاوية كأنها تحتاج 100 مِلي فقط. ولن يظهر أثر ذلك في الفاتورة، بل في زمن الاستجابة عند الازدحام.
اعتبار السعة الكلية سعةً متاحة
عُقدة بـ16 غيغابايت لن تستقبل حاوية بـ16 غيغابايت. فبعد حصص kubelet وبيئة التشغيل والنظام، ثم عتبة الإخلاء، يبقى عادةً ما بين 85% و90%. وحقل النفقات العامة أعلاه يمثّل هذه الفجوة.
إغفال حاويات DaemonSet
جامع السجلات ووكيل المقاييس وحاويات CNI وCSI تعمل بنسخة على كل عُقدة، فتنمو تكلفتها مع عدد العُقد لا مع عدد النُسخ. والحاسبة تغطّي حِملك أنت وحده، فاترك هامشًا فوقه.
نسيان سقف 110 حاوية
وهو ما رأيناه في المثال أعلاه. فحين تكثر النُسخ الصغيرة يصير العدد هو القيد بينما المعالجة والذاكرة نصف فارغتين.
أدوات تُستعمل إلى جانبها
- حاسبة CIDR / Subnet احسب عنوان الشبكة والبث وقناع الشبكة الفرعية ونطاق المضيفين القابل للاستخدام ونوع العنوان من تدوين CIDR.
- محلّل تعبير Cron حلّل تعبير cron حقلًا بحقل وشاهد أوقات التشغيل التالية. لـ Kubernetes CronJob والمهام المجدولة.
- مولّد UUID ولّد UUID v4 آمنًا تشفيريًا وv7 المرتّب زمنيًا. توليد دفعي وخيارات تنسيق.
- مُرمّز/مُفكّك Base64 رمّز النص إلى Base64 أو فُكّ ترميزه. متغيّر قياسي وآمن للروابط (base64url)؛ متوافق مع UTF-8، في المتصفح.
الأسئلة الشائعة
كم عُقدة يحتاج حِمل عمل Kubernetes الخاص بي؟
عدد العُقد هو الأكبر بين ثلاثة حدود: العُقد المطلوبة حسب وحدة المعالجة، وحسب الذاكرة، وحسب عدد الحاويات. تحسب الأداة كلًا منها وتعطي الأكبر باعتباره "العُقد المطلوبة"، وذلك الحد هو المورد المُقيِّد.
لماذا تكون السعة القابلة للتخصيص أقل من السعة الكلية للعُقدة؟
يُحجَز جزء من سعة كل عُقدة لـ kubelet وبيئة تشغيل الحاويات ونظام التشغيل عبر kube-reserved وsystem-reserved، إضافةً إلى عتبة إخلاء. تُجدوَل الحاويات على السعة "القابلة للتخصيص" المتبقية فقط، ولذلك تُدخِل نسبة النفقات الإضافية.
ما الحد الأقصى الافتراضي للحاويات لكل عُقدة؟
الافتراضي في kubelet هو 110 حاوية لكل عُقدة. إذا كان لديك نسخ صغيرة كثيرة، فقد يُشكّل هذا الحد عنق الزجاجة حتى مع توفر وحدة معالجة وذاكرة كافية.
هل أستخدم الطلبات (requests) أم الحدود (limits)؟
يتخذ مُجدوِل Kubernetes قرار التوزيع بناءً على الطلبات وليس الحدود. تستخدم هذه الأداة قيم الطلبات لتخطيط السعة. أما الحدود فتؤثر على سلوك الخنق/OOM عند ضغط الموارد على العُقدة.
ما مدى دقة هذا التقدير؟
إنه تقدير سعة من الدرجة الأولى. لا يحتسب DaemonSets أو قواعد مكافحة التقارب أو قيود توزيع الطوبولوجيا أو التوسع التلقائي العمودي أو التوزيع الإقليمي. استخدمه كخط أساس للعناقيد الإنتاجية وليس كقيمة نهائية.
مبنية على تشغيل عناقيد حقيقية
هذه الحاسبة ليست نظرية: أستخدم حسابات تحجيم العُقد نفسها في عنقود k3s إنتاجي صغير أُشغّله خلف هذا الموقع. وهذه لقطة حالية له:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
bilal-server Ready <none> 194d v1.33.5+k3s1
k8s-master Ready control-plane,master 194d v1.33.5+k3s1
$ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
bilal-server 333m 4% 7828Mi 49%
k8s-master 784m 10% 12097Mi 38%
$ kubectl top pods -n default
NAME CPU MEMORY
bilal-baget-6d568d945f-4hljh 5m 142Mi
bilal-filebrowser-76c987d67b-mgwwt 1m 10Mi
bilal-gitlab-57db68cdf-4thml 61m 3843Mi
bilal-mssql-59467b7576-wrl24 34m 1450Mi
bilal-registry-5c86777897-tffxm 2m 381Mi
bilal-website-c46c6fb8f-ctnck 26m 219Mi
maya-website-58877c476c-hvj9q 74m 263Mi
k3s v1.33.5 · عُقدتان · 194 يومًا تشغيل · استخدام 4-10% للمعالج و38-49% للذاكرة في الحالة المستقرة.