أحمد حايس
الرئيسيةمن أناالدوراتالمدونةالعروض
أحمد حايس

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

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

تعلم أسرعوصول مباشر للدورات والمسارات من الموبايل.
تنقل أوضحالروابط الأساسية والدعم في مكان واحد بدون تشتيت.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • العروض
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالعروضالمدونةالدخول
DevOps بالعربي

Helm Charts للمبتدئ: ادارة 30 ملف YAML بـ template واحد

📅 ٨ مايو ٢٠٢٦⏱ 5 دقائق قراءة
Helm Charts للمبتدئ: ادارة 30 ملف YAML بـ template واحد
المستوى المطلوب: مبتدئ — هذا المقال موجّه لمن استخدم kubectl apply من قبل لكن لم يبني Helm Chart بنفسه.

لو عندك 4 microservices على Kubernetes وكل واحد بينزل على 3 بيئات (dev، staging، production)، يبقى عندك 36 ملف YAML شبه متطابقين بتعدّلهم بـ Find & Replace. Helm بيقلّب الـ 36 ملف لـ 4 templates و 3 ملفات values بس، فبتنزّل وقت الـ deploy من 18 دقيقة لـ 40 ثانية، وبتشيل أكتر من 90% من أخطاء النسخ واللصق.

لوحة تحكم Kubernetes تعرض pods متعددة منظّمة في clusters باستخدام Helm Charts

ليه Helm مش رفاهية لو عندك أكتر من 3 services على Kubernetes

المشكلة مش إن YAML صعب. المشكلة إن نفس الـ YAML بيتكرر مع تغيير حرف أو رقم. image: myapp:1.4.2 في dev، image: myapp:1.4.0 في prod، replicas: 1 هنا، replicas: 4 هناك. وكل تعديل بسيط بيخلّيك تفتح 12 ملف وتعدّل في كل واحد.

المشكلة باختصار

فريق صغير من 6 مهندسين بيدير 4 services على Kubernetes كان بيقضي 18 دقيقة في كل deploy على staging. السبب مش الـ cluster بطيء — السبب إن الـ YAML بيتكتب يدوياً، وفي 11% من الـ deploys بيحصل typo بيكسر شيء (نقطة ناقصة في indentation، أو مرجع secret غلط).

الافتراض هنا إنك بتنشر تطبيقك على Kubernetes ≥ 1.27 وعندك أكتر من service واحد. لو عندك service واحد بيتنشر مرة في الأسبوع، Helm overkill — هترجعله في قسم "متى لا تستخدم Helm".

مثال للمبتدئ: مكتب طباعة الكروت الشخصية

تخيّل مكتب بيطبع كروت شخصية لشركة فيها 200 موظف. الطريقة الغبية: تطبع 200 كرت كل واحد من الصفر. الطريقة الذكية: تعمل قالب واحد فيه فراغات للاسم والوظيفة والتليفون، وقاعدة بيانات فيها الـ 200 صف. القالب + البيانات = 200 كرت بضغطة واحدة.

Helm نفس الفكرة بالظبط. القالب (template) هو ملف YAML فيه فراغات، والقيم (values) هي الملف اللي بيملا الفراغات دي. التطبيق بياخد الاتنين، وبيطلّع YAML نهائي جاهز للـ kubectl apply.

التعريف العلمي بدقة

Helm هو package manager لـ Kubernetes (زي npm لـ Node أو apt لـ Ubuntu). الوحدة الأساسية فيه اسمها Chart، وهي مجلد فيه:

  • Chart.yaml: metadata (الاسم، الإصدار، الوصف).
  • values.yaml: القيم الافتراضية.
  • templates/: ملفات YAML مكتوبة بصيغة Go template engine ({{ .Values.image }}).

لما تشغّل helm install، الأداة بتاخد الـ templates، تستبدل المتغيرات بالقيم من values.yaml (أو من ملف بديل تختاره أنت)، تتأكد إن الناتج YAML سليم، وبعدين تبعته للـ Kubernetes API. الناتج النهائي بيسمى Release ولكل release اسم وإصدار، فبتقدر تعمل rollback لأي إصدار سابق بأمر واحد.

شاشة تعرض ملفات YAML متعددة بقيم مختلفة لكل بيئة dev و staging و production

ابني أول Chart في 5 دقائق

هنفترض إن عندك تطبيق Node.js بسيط بيشتغل على port 3000 وعايز تنشره. الخطوات:

  1. ولّد هيكل Chart جاهز.
  2. عدّل values.yaml بمعطيات تطبيقك.
  3. عدّل الـ templates لو محتاج تعديلات إضافية.
  4. اعمل preview قبل التنفيذ.
  5. نفّذ helm install.
Bash
# 1. ولّد Chart فيه deployment + service + ingress جاهزين
helm create myapp

# 2. شوف الهيكل
tree myapp -L 2
# myapp/
# ├── Chart.yaml
# ├── values.yaml
# ├── charts/
# └── templates/
#     ├── deployment.yaml
#     ├── service.yaml
#     ├── ingress.yaml
#     └── _helpers.tpl

# 3. عدّل values.yaml بقيم تطبيقك
cat > myapp/values.yaml <<EOF
replicaCount: 2
image:
  repository: my-registry/node-api
  tag: "1.4.2"
service:
  type: ClusterIP
  port: 3000
EOF

# 4. اعمل preview للـ YAML النهائي قبل ما تطبّقه
helm template myapp ./myapp

# 5. نفّذ الـ install على الـ namespace dev
helm install myapp-dev ./myapp --namespace dev --create-namespace

# 6. شوف الـ release
helm list --namespace dev

# 7. عدّل قيمة بدون ما تلمس أي ملف YAML
helm upgrade myapp-dev ./myapp \
  --namespace dev \
  --set image.tag=1.4.3

# 8. لو الإصدار الجديد كسر شيء، rollback في 4 ثواني
helm rollback myapp-dev 1 --namespace dev

الفرق بين helm template و helm install مهم. template بتطلّع YAML على الشاشة بدون ما تبعت أي حاجة للـ cluster — استخدمها دايماً للمراجعة قبل الـ install.

3 ملفات values لـ 3 بيئات بدل 36 ملف

الفايدة الحقيقية بتظهر لما تنشر نفس الـ chart على بيئات مختلفة بقيم مختلفة:

Bash
# ملف لكل بيئة بقيمها فقط (5-15 سطر)
# values-dev.yaml: replicaCount=1, tag=latest
# values-staging.yaml: replicaCount=2, tag=1.4.2-rc
# values-prod.yaml: replicaCount=6, tag=1.4.0

helm install myapp-prod ./myapp \
  --namespace prod \
  --values values-prod.yaml

على الفريق اللي ذكرته فوق، الـ deploy نزل من 18 دقيقة لـ 40 ثانية، ونسبة الـ deploys اللي بتفشل بسبب typo نزلت من 11% لـ 0% خلال 8 أسابيع.

الـ Trade-offs الحقيقية (مش كله ورد)

  1. منحنى التعلم: Go templates مش لغة سهلة لو ماشتغلتش عليها قبل كده. الـ {{- if .Values.ingress.enabled }} ممكن يربك المبتدئ في الأول. الكسب: يوم تعلّم يوفّر يومين شغل أسبوعياً.
  2. debugging أصعب: لو فيه خطأ في الـ template، رسالة الخطأ بتقولك "line 14" في ملف ما تعرفش هو ايه. الحل: helm template --debug.
  3. إصدارات الـ chart: أنت محتاج تخلّي ملف Chart.yaml فيه version صحيح، وتعدّله مع كل تغيير، يعني انضباط زيادة. لو نسيت، الـ rollback بيبقى مربك.
  4. الـ secrets: Helm مش بيشفّر الـ values افتراضياً. لو حطيت password في values-prod.yaml ورفعته على Git، انت كده فضحته. الحل: استخدم helm-secrets أو External Secrets Operator.

متى لا تستخدم Helm

Helm مش الحل الصح في 3 حالات:

  • عندك service واحد: ملف YAML واحد بـ kubectl apply -f أبسط وأوضح. الـ overhead الذهني للـ chart مش مبرّر.
  • الفريق مرتاح أكتر مع Kustomize: Kustomize بيشتغل بـ overlays بدون template engine. أبسط لو احتياجك بسيط، لكن أقل قوة لو عندك logic معقد.
  • عندك GitOps محكم بـ ArgoCD/Flux: ArgoCD بيدعم Helm وKustomize، فاختيارك بين الاتنين بيرجع للنقطة فوق. مش لازم تختار Helm لمجرد إنه "المعيار".

الخطوة التالية

افتح terminal دلوقتي ونفّذ helm create test-chart ثم helm template test-chart ./test-chart. هتشوف الـ YAML الكامل اللي Helm بيولّده. لو عندك service فعلي شغّال على Kubernetes حالياً، جرّب تحوّل ملفات الـ kubectl apply القديمة لـ chart واحد، واقيس الفرق في وقت الـ deploy خلال أسبوعين.

المصادر

  • Helm Quickstart Guide — التوثيق الرسمي
  • Chart Template Guide — Helm.sh
  • Kubernetes Configuration Best Practices
  • Helm Source Repository — GitHub
  • Helm Graduated CNCF Project Page
]]>

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة