مراقبة وموثوقية المنصة
إدارة التكاليف وFinOps
3 دقيقة للقراءة
فرق المنصة مسؤولة عن تكاليف البنية التحتية. ممارسات FinOps (العمليات المالية) تساعد على تحسين الإنفاق مع الحفاظ على قدرات المنصة. يغطي هذا الدرس رؤية التكاليف والتخصيص واستراتيجيات التحسين.
لماذا FinOps لفرق المنصة
بدون FinOps:
┌─────────────────────────────────────────────────────────┐
│ فاتورة السحابة الشهرية: $500,000 │
│ │
│ "أين تذهب هذه الأموال؟" │
│ "أي الفرق تنفق أكثر؟" │
│ "هل لدينا موارد زائدة؟" │
│ "كيف نضع ميزانية للعام القادم؟" │
└─────────────────────────────────────────────────────────┘
مع FinOps:
┌─────────────────────────────────────────────────────────┐
│ فاتورة السحابة الشهرية: $500,000 │
│ │
│ فريق الطلبات: $150,000 (30%) ↓ 5% مقابل الشهر الماضي│
│ فريق المستخدمين: $120,000 (24%) ↑ 8% - ميزة جديدة │
│ فريق المنصة: $ 80,000 (16%) = مستقر │
│ موارد خاملة: $ 50,000 (10%) ← يحتاج إجراء │
│ خدمات مشتركة: $100,000 (20%) │
└─────────────────────────────────────────────────────────┘
تثبيت Kubecost
Kubecost يوفر رؤية تكاليف Kubernetes:
# تثبيت Kubecost مع Helm
helm repo add kubecost https://kubecost.github.io/cost-analyzer/
helm repo update
helm install kubecost kubecost/cost-analyzer \
--namespace kubecost \
--create-namespace \
--set kubecostToken="YOUR_TOKEN" \
--set prometheus.server.retention="15d"
# الوصول لواجهة Kubecost
kubectl port-forward -n kubecost deployment/kubecost-cost-analyzer 9090
# افتح http://localhost:9090
تخصيص التكاليف
وسم الموارد للإسناد الدقيق للتكاليف:
# تسميات Kubernetes لتخصيص التكاليف
cost_labels:
required:
- team: "orders|users|platform|data"
- environment: "production|staging|development"
- product: "checkout|search|recommendations"
optional:
- cost-center: "CC-12345"
- project: "project-name"
# مثال deployment مع تسميات التكلفة
apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service
labels:
team: orders
environment: production
product: checkout
cost-center: CC-12345
spec:
template:
metadata:
labels:
team: orders
environment: production
product: checkout
وسم تكلفة Crossplane
وسم تكاليف البنية التحتية تلقائيًا:
# composition-with-cost-tags.yaml
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: database-aws-with-tags
spec:
compositeTypeRef:
apiVersion: platform.acme.com/v1alpha1
kind: XDatabase
resources:
- name: rds-instance
base:
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
spec:
forProvider:
tags:
ManagedBy: crossplane
Platform: internal-developer-platform
patches:
# إضافة وسم الفريق من المطالبة
- type: FromCompositeFieldPath
fromFieldPath: metadata.labels[team]
toFieldPath: spec.forProvider.tags.Team
# إضافة وسم البيئة
- type: FromCompositeFieldPath
fromFieldPath: metadata.labels[environment]
toFieldPath: spec.forProvider.tags.Environment
# إضافة مركز التكلفة
- type: FromCompositeFieldPath
fromFieldPath: spec.costCenter
toFieldPath: spec.forProvider.tags.CostCenter
لوحة مراقبة التكاليف
# قواعد Prometheus لمقاييس التكلفة
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: cost-metrics
namespace: monitoring
spec:
groups:
- name: cost.metrics
rules:
# التكلفة لكل فريق (من Kubecost)
- record: cost:team:monthly
expr: |
sum by (team) (
kubecost_cluster_cost_total{aggregation="team"}
) * 720 # ساعات في الشهر
# التكلفة لكل مساحة اسم
- record: cost:namespace:monthly
expr: |
sum by (namespace) (
kubecost_namespace_cost_total
) * 720
# تكلفة الموارد الخاملة
- record: cost:idle:daily
expr: |
sum(kubecost_idle_cost_total) * 24
# نسبة كفاءة التكلفة
- record: cost:efficiency:ratio
expr: |
1 - (sum(kubecost_idle_cost_total) /
sum(kubecost_total_cost))
تحسين الموارد
تحديد وإصلاح الموارد المهدرة:
# استراتيجيات تحسين الموارد
optimization:
right_sizing:
description: "مطابقة طلبات الموارد للاستخدام الفعلي"
tools:
- توصيات Kubecost
- VPA (المقياس العمودي التلقائي للـ Pod)
prometheus_query: |
# CPU زائد التخصيص (الطلب > 2x الفعلي)
(
sum by (namespace, pod) (kube_pod_container_resource_requests{resource="cpu"})
/
sum by (namespace, pod) (rate(container_cpu_usage_seconds_total[1h]))
) > 2
idle_resources:
description: "موارد تعمل ولكن لا تُستخدم"
checks:
- "Deployments بدون حركة مرور"
- "PVCs غير مركبة"
- "موازنات تحميل بدون اتصالات"
spot_instances:
description: "استخدام spot/preemptible للأحمال غير الحرجة"
candidates:
- بيئات التطوير
- مشغلات CI/CD
- المعالجة الدفعية
reserved_capacity:
description: "الالتزام بالتوفير للأحمال المتوقعة"
targets:
- قواعد بيانات الإنتاج
- خدمات المنصة الأساسية
سياسات FinOps
تنفيذ حواجز التكلفة:
# سياسة Kyverno لضوابط التكلفة
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-resource-limits
spec:
validationFailureAction: enforce
rules:
- name: require-limits
match:
resources:
kinds:
- Pod
validate:
message: "حدود CPU والذاكرة مطلوبة"
pattern:
spec:
containers:
- resources:
limits:
memory: "?*"
cpu: "?*"
---
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-cost-labels
spec:
validationFailureAction: enforce
rules:
- name: require-team-label
match:
resources:
kinds:
- Deployment
- StatefulSet
validate:
message: "تسمية الفريق مطلوبة لتخصيص التكلفة"
pattern:
metadata:
labels:
team: "?*"
تقارير التكلفة
توليد تقارير تكلفة الفريق:
# تكوين تقارير التكلفة
cost_reports:
weekly:
recipients: "team-leads@acme.com"
content:
- "التكلفة لكل فريق (تغيير أسبوع على أسبوع)"
- "أعلى 10 موارد تكلفة"
- "توصيات التحسين"
monthly:
recipients: "finance@acme.com, engineering-vp@acme.com"
content:
- "التكلفة لكل فريق ومنتج"
- "تحليل الاتجاه"
- "الميزانية مقابل الفعلي"
- "التوقعات للشهر القادم"
alerts:
- name: "تجاوز الميزانية"
condition: "team_cost > budget * 1.1"
action: "إخطار قائد الفريق"
- name: "اكتشاف شذوذ"
condition: "daily_cost > avg_daily_cost * 2"
action: "تنبيه فريق المنصة"
Showback مقابل Chargeback
# نماذج تخصيص التكلفة
allocation_models:
showback:
description: "إظهار تكاليف الفرق دون فرض رسوم"
use_case: "بناء ثقافة الوعي بالتكلفة"
implementation:
- تقارير التكلفة الشهرية لكل فريق
- رؤية لوحة التحكم
- بدون إنفاذ الميزانية
chargeback:
description: "تحصيل من الفرق للاستخدام الفعلي"
use_case: "المؤسسات الناضجة مع ملكية الميزانية"
implementation:
- نظام فوترة داخلي
- تنبيهات وإنفاذ الميزانية
- سير عمل الموافقة للطلبات الكبيرة
recommendation: |
ابدأ بـ showback لبناء الوعي،
ثم انتقل إلى chargeback عندما تكون الفرق جاهزة
في الدرس التالي، سنستكشف أنماط موثوقية المنصة بما في ذلك الإيجار المتعدد والعزل. :::