خطوات الاستخدام
الخطوة الأولى: أدخل محتوى ملف قيم Helm (values.yaml) الخاص بك في حقل الإدخال. هذا الملف عادةً ما يحتوي على إعدادات مخصصة لنشر تطبيق Kubernetes باستخدام Helm. تأكد من نسخ المحتوى بالكامل بما في ذلك الأسطر الفارغة والتعليقات، حيث ستعمل الحاسبة على تجاوزها تلقائياً. مثال: إذا كان لديك ملف بقيم مثل `replicaCount: 3` و `service.type: LoadBalancer`، قم بلصقه كما هو. ستحلل الحاسبة النص وتحدد الأسطر التي تحتوي على تكوينات فعلية.
الخطوة الثانية: تقوم الحاسبة بتحليل النص المدخل باستخدام خوارزمية ذكية. أولاً، تقسم النص إلى أسطر فردية. ثم لكل سطر، تفحص ما إذا كان فارغًا (لا يحتوي على أي حرف غير مسافة) أو إذا كان تعليقًا (يبدأ بـ '#' في YAML). يتم تجاهل هذه الأسطر. الأسطر التي تحتوي على مفاتيح وقيم مثل `key: value` أو قوائم (تبدأ بـ '-') تعتبر أسطر تكوين. يتم أيضًا التعامل مع الأسطر التي تحتوي على مسافات بادئة (indentation) كجزء من بنية YAML، ولكنها تُحتسب كأسطر تكوين إذا كانت تحتوي على بيانات.
الخطوة الثالثة: بعد التصفية، تقوم الحاسبة بإحصاء عدد الأسطر المتبقية. هذا العدد يمثل إجمالي 'تجاوزات القيم' (عدد الأسطر غير الفارغة وغير التعليقية). هذا الرقم مهم لتقييم حجم التعقيد في ملف القيم، حيث يشير ارتفاع العدد إلى وجود العديد من الإعدادات المخصصة التي قد تحتاج إلى مراجعة. على سبيل المثال، مشروع بسيط قد يحتوي على 20-50 سطرًا، بينما مشروع معقد قد يتجاوز 200 سطر.
الخطوة الرابعة: تعرض الحاسبة النتيجة النهائية مع تفصيل بسيط: عدد الأسطر الكلي في الملف، عدد الأسطر الفارغة، عدد أسطر التعليقات، وعدد أسطر التكوين الفعلية. يمكنك استخدام هذه المعلومات لتحسين ملف القيم الخاص بك، مثل إزالة التعليقات الزائدة أو الأسطر الفارغة غير الضرورية، مما يقلل من حجم الملف ويحسن قابلية القراءة.
أمثلة محلولة
تطبيقات عملية على تجاوزات قيم Helm بخطوات الحل كاملة.
الحل
لنفترض أن ملف values.yaml يحتوي على المحتوى التالي:
```yaml
# WordPress Helm Values
# عدد النسخ
replicaCount: 2
# نوع الخدمة
service:
type: ClusterIP
port: 80
# قاعدة البيانات
database:
host: mysql.local
user: wordpress
password: "strongpassword"
# يجب تغيير كلمة المرور
database: wp_db
# الموارد
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
# متغيرات البيئة
extraEnv:
- name: WORDPRESS_DEBUG
value: "false"
# تعليق واحد فارغ
```
التحليل:
- السطر 1: تعليق (# WordPress Helm Values) -> يُتجاهل
- السطر 2: تعليق -> يُتجاهل
- السطر 3: فارغ -> يُتجاهل
- السطر 4: تكوين (`replicaCount: 2`) -> يُحتسب (1)
- السطر 5: فارغ -> يُتجاهل
- السطر 6: تكوين (`service:`) -> يُحتسب (2)
- السطر 7: تكوين مدمج (` type: ClusterIP`) -> يُحتسب (3)
- السطر 8: تكوين مدمج (` port: 80`) -> يُحتسب (4)
- السطر 9: فارغ -> يُتجاهل
- السطر 10: تعليق (# قاعدة البيانات) -> يُتجاهل
- السطر 11: تكوين (`database:`) -> يُحتسب (5)
- السطر 12: تكوين مدمج (` host: mysql.local`) -> يُحتسب (6)
- السطر 13: تكوين مدمج (` user: wordpress`) -> يُحتسب (7)
- السطر 14: تكوين مدمج (` password: "strongpassword"`) -> يُحتسب (8)
- السطر 15: تعليق (# يجب تغيير كلمة المرور) -> يُتجاهل
- السطر 16: تكوين مدمج (` database: wp_db`) -> يُحتسب (9)
- السطر 17: فارغ -> يُتجاهل
- السطر 18: تعليق -> يُتجاهل
- السطر 19: تكوين (`resources:`) -> يُحتسب (10)
- السطر 20: تكوين مدمج (` requests:`) -> يُحتسب (11)
- السطر 21: تكوين مدمج (` memory: "256Mi"`) -> يُحتسب (12)
- السطر 22: تكوين مدمج (` cpu: "250m"`) -> يُحتسب (13)
- السطر 23: تكوين مدمج (` limits:`) -> يُحتسب (14)
- السطر 24: تكوين مدمج (` memory: "512Mi"`) -> يُحتسب (15)
- السطر 25: تكوين مدمج (` cpu: "500m"`) -> يُحتسب (16)
- السطر 26: فارغ -> يُتجاهل
- السطر 27: تعليق -> يُتجاهل
- السطر 28: تكوين (`extraEnv:`) -> يُحتسب (17)
- السطر 29: تكوين مدمج (` - name: WORDPRESS_DEBUG`) -> يُحتسب (18)
- السطر 30: تكوين مدمج (` value: "false"`) -> يُحتسب (19)
- السطر 31: تعليق (# تعليق واحد فارغ) -> يُتجاهل
- السطر 32: فارغ -> يُتجاهل
إجمالي الأسطر الكلية: 32، الأسطر الفارغة: 6، أسطر التعليقات: 6، أسطر التكوين الفعلية: 19. لذا عدد تجاوزات القيم هو 19 سطرًا. هذا يشمل جميع الأسطر التي تحتوي على مفاتيح وقيم، سواء كانت من المستوى الأعلى أو متداخلة.
الحل
لنأخذ مثالًا على ملف Helm values يحتوي على قوائم ومفاتيح متداخلة متعددة المستويات:
```yaml
# تكوين NGINX Ingress Controller
podAnnotations:
prometheus.io/scrape: "true"
prometheus.io/port: "10254"
serviceAccount:
name: "nginx-ingress"
# التعليق هنا
create: true
ingressClass: nginx
hostNetwork: false
ports:
- name: http
containerPort: 80
hostPort: 80
- name: https
containerPort: 443
hostPort: 443
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: nginx
topologyKey: kubernetes.io/hostname
```
التحليل:
- أسطر التعليقات (السطر 1، 8) تُتجاهل.
- الأسطر الفارغة (السطر 5، 11، 13، 16، 18، 29) تُتجاهل.
- الأسطر غير الفارغة وغير التعليقية: كل سطر يحتوي على مفتاح أو قيمة.
احتساب الأسطر:
1. `podAnnotations:` (1)
2. ` prometheus.io/scrape: "true"` (2)
3. ` prometheus.io/port: "10254"` (3)
4. `serviceAccount:` (4)
5. ` name: "nginx-ingress"` (5)
6. ` create: true` (6)
7. `ingressClass: nginx` (7)
8. `hostNetwork: false` (8)
9. `ports:` (9)
10. ` - name: http` (10) - هذا السطر يعتبر ضمن القائمة، يُحتسب.
11. ` containerPort: 80` (11)
12. ` hostPort: 80` (12)
13. ` - name: https` (13)
14. ` containerPort: 443` (14)
15. ` hostPort: 443` (15)
16. `resources:` (16)
17. ` requests:` (17)
18. ` cpu: 100m` (18)
19. ` memory: 128Mi` (19)
20. ` limits:` (20)
21. ` cpu: 200m` (21)
22. ` memory: 256Mi` (22)
23. `affinity:` (23)
24. ` podAntiAffinity:` (24)
25. ` preferredDuringSchedulingIgnoredDuringExecution:` (25)
26. ` - weight: 100` (26)
27. ` podAffinityTerm:` (27)
28. ` labelSelector:` (28)
29. ` matchLabels:` (29)
30. ` app: nginx` (30)
31. ` topologyKey: kubernetes.io/hostname` (31)
إجمالي الأسطر: 36 كلية (بما في ذلك الفارغة والتعليقات)، أسطر التكوين الفعلية: 31. لاحظ أن الحاسبة تعتبر كل سطر يحتوي على أي نص غير تعليق (حتى المسافات البادئة) سطر تكوين، بشرط ألا يكون فارغًا. القوائم (مثل `- name: http`) تُحتسب كأسطر تكوين مستقلة.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة تجاوزات قيم Helm.
مرجع — ملف values صغير
- قيم Helm
- # header # replicas replicaCount: 2 service: type: ClusterIP port: 80
مرجع — تعليقات فقط
- قيم Helm
- # a # b
مرجع — تجاوز مفرد
- قيم Helm
- enabled: true