بينما تستخدم المؤسسات الخدمات الصغيرة والهندسة المعمارية السحابية، يصبح Kubernetes الشيء الطبيعي لتنظيم الحاويات. بقدر ما يبسط Kubernetes نشر وإدارة الحاويات، فإن تحميل العمل على نطاق واسع يجعل الحياة معقدة، وتصبح الممارسات القوية ضرورية.
في هذه المقالة، سأغطي الاستراتيجيات التقنية وأفضل الممارسات لإدارة الأعباء على نطاق واسع في Kubernetes.
معرفة التحديات في توسيع Kubernetes
يتطلب التوسيع في Kubernetes التغلب على عقبات مثل:
- جدولة موارد العنقود. استخدام محسن لوحدات المعالجة المركزية والذاكرة والقرص عبر العقد.
- تعقيد الشبكة. التواصل المتسق بين الخدمات في بيئات كبيرة وموزعة.
- الأعطال والقابلية للتوسيع. التعامل مع التوفر أثناء الأعطال وأثناء سيناريو التوسيع/التقليص.
- التكاليف التشغيلية. إزالة العمليات المتكررة مثل التوسيع والرصد وتوازن الأحمال.
- الأمان على نطاق واسع. ضوابط الوصول بناءً على الأدوار (RBAC)، الأسرار، وسياسات الشبكة في العناقيد الكبيرة.
في هذه المقالة، سأستعرض أمثلة على التغلب على مثل هذه العقبات باستخدام مجموعة من قدرات Kubernetes الأصلية والأدوات المكملة.
القدرات والأدوات
1. جدولة فعالة لموارد العنقود
الأداء عند مستوى كبير يتم تحديده مباشرة من خلال توزيع الموارد عند المستوى الكبير. هناك مجموعة متنوعة من القدرات في Kubernetes للاستخدام الأمثل للموارد:
الطلبات والحدود
تعيين طلبات وحدود الـ CPU والذاكرة سيتسبب في توزيع عادل للموارد ولن يسمح للجيران الضارين باستهلاك كل الموارد.
apiVersion v1
kind Pod
metadata
name resource-demo
spec
containers
name app
image nginx
resources
requests
memory"128Mi"
cpu"500m"
limits
memory"256Mi"
cpu"1"
أفضل الممارسات:
- استخدم الحصة لفرضها على مستوى مساحة الأسماء.
- قم بتحليل الاستخدام بانتظام باستخدام
kubectl top
وقم بعمل أي تعديلات مطلوبة على الحدود.
Cluster Autoscaler
يقوم الـ autoscaler بتحجيم عدد عقد العقدة الخاصة بك ديناميكيًا وفقًا لطلب العمل.
kubectl apply -f https://github.com/kubernetes/autoscaler/releases/download/cluster-autoscaler-<version>/cluster-autoscaler.yaml
أفضل الممارسات:
- قم بوسم عمليات الـ autoscaler الخاصة بك بشكل مناسب لعقداتك.
- راقب سلوك التحجيم لتجنب التحميض الزائد.
2. Horizontal and Vertical Pod Autoscaling
Horizontal Pod Autoscaler (HPA) و Vertical Pod Autoscaler (VPA) قدرات التحجيم التلقائي موجودة بشكل أصلي في Kubernetes، ولكن شبكات الخدمة مثل Istio و Linkerd تجعل وتبسط التواصل بين الخدمات أسهل وأكثر كفاءة.
Horizontal Pod Autoscaler (HPA)
HPA يقوم بتحجيم نسخ الـ pods وفقًا لـ CPU، الذاكرة، أو مقاييس مخصصة.
مثال: استخدام الـ CPU للتحجيم التلقائي
apiVersion autoscaling/v2
kind HorizontalPodAutoscaler
metadata
name hpa-example
spec
scaleTargetRef
apiVersion apps/v1
kind Deployment
name web-app
minReplicas2
maxReplicas10
metrics
type Resource
resource
name cpu
target
type Utilization
averageUtilization50
موسع الحاويات الرأسية (VPA)
يقوم موسع الحاويات الرأسية بتكييف طلب وحدة تشغيل الحاوية والحد الزمني.
kubectl apply -f https://github.com/kubernetes/autoscaler/releases/download/vertical-pod-autoscaler-<version>/vpa.yaml
3. تحسين الشبكات على نطاق واسع
شبكة الخدمة
تجعل شبكات الخدمة مثل Istio و Linkerd التواصل بين الخدمات أسهل وأكثر كفاءة من خلال تجريد أحمال الخدمة ومحاولات إعادة الاتصال ومخاوف التشفير.
مثال: Istio VirtualService لتوجيه حركة المرور
apiVersion networking.istio.io/v1beta1
kind VirtualService
metadata
name example-route
spec
hosts
example.com
http
route
destination
host service-v1
weight80
destination
host service-v2
weight20
سياسات الشبكة
استخدم سياسات الشبكة لتقييد حركة المرور بين الحاويات لتعزيز الأمان.
apiVersion networking.k8s.io/v1
kind NetworkPolicy
metadata
name restrict-traffic
spec
podSelector
matchLabels
app web-app
policyTypes
Ingress
ingress
from
podSelector
matchLabels
role backend
4. تعزيز قابلية المراقبة
تعتبر قابلية المراقبة حاسمة في التحكم في Kubernetes على مستوى أكبر. استخدم أدوات مثل Prometheus و Grafana و Jaeger للمقاييس والسجلات وتتبع الأثر.
مقاييس Prometheus
استخدم تعليقات Prometheus لجمع مقاييس الحاوية.
apiVersion v1
kind Pod
metadata
annotations
prometheus.io/scrape"true"
prometheus.io/port"8080"
labels
app monitored-app
spec
containers
name app
image monitored-app latest
ports
containerPort8080
5. بناء المرونة
ميزانية اضطراب الحاويات (PDB)
استخدم PDB للحفاظ على توافر أدنى للحاويات أثناء الصيانة والترقيات.
apiVersion policy/v1
kind PodDisruptionBudget
metadata
name pdb-example
spec
minAvailable2
selector
matchLabels
app web-app
التحديثات التدريجية
نشر التحديثات تدريجيًا بطريقة لا تسبب أي انقطاع.
kubectl set image deployment/web-app web-app=web-app:v2 --record
kubectl rollout status deployment/web-app
6. تأمين Kubernetes على نطاق واسع
تكوين RBAC
استخدم RBAC لتقييد امتيازات المستخدم والتطبيق.
apiVersion rbac.authorization.k8s.io/v1
kind Role
metadata
namespace default
name pod-reader
rules
apiGroups""
resources"pods"
verbs"get" "list" "watch"
إدارة السرائر
استخدم Kubernetes Secrets لإدارة المعلومات الحساسة بشكل آمن. استخدم Kubernetes Secrets لإدارة المعلومات الحساسة بشكل آمن.
apiVersion v1
kind Secret
metadata
name db-credentials
type Opaque
data
username dXNlcg==
password cGFzc3dvcmQ=
7. GitOps للتلقائيات
استخدم GitOps مع أدوات مثل ArgoCD و Flux. قم بإصدار وتخزين تعليمات Kubernetes في مستودعات Git وامتلك تزامن العناقيد معها تلقائيًا.
8. اختبار بمقياس كبير
قم بمحاكاة أعباء العمل بمقياس كبير باستخدام أدوات مثل K6 و Locust. تحقق من التكوين وتعيين الموارد والتوسيع في بيئات الاختبار.
9. التعامل مع التخزين بمقياس كبير
توفير حجوم التخزين الدائمة الديناميكية
يتم توفير تخزين التطبيقات بشكل ديناميكي بواسطة الأتمتة.
apiVersion storage.k8s.io/v1
kind StorageClass
metadata
name fast-storage
provisioner kubernetes.io/aws-ebs
parameters
type gp2
fsType ext4
10. تحسين أنابيب CI/CD لـ Kubernetes
بناء ودفع صورة Docker
قم بتبسيط إنشاء ونشر صور الحاويات باستخدام أدوات CI/CD مثل Jenkins و GitHub Actions و GitLab CI.
الاستنتاج
لتوسيع Kubernetes، يجب على الشخص أن يمتلك مزيجًا فعالًا من استخدام الموارد بكفاءة والأتمتة وقابلية الملاحظة وعمليات الأمان القوية. من خلال الاستفادة الكاملة من إمكانيات Kubernetes الأصلية ودمجها مع الأدوات الداعمة، يمكن أن تكون أعباء العمل الخاصة بك عالية الأداء وآمنة وقوية في أي مقياس.
Source:
https://dzone.com/articles/best-practices-managing-kubernetes-at-scale