כשהארגונים משתמשים במיקרו-שירותים ובארכיטקטורות מבוססות ענן, קוברנטיס הופך לנורמה עבור ניהול קונטיינרים. למרות שקוברנטיס מפשט את ההשקה והניהול של קונטיינרים, העומסים בהיקפים גדולים מקנים חיים מורכבים, ונדרשות פרקטיקות חזקות.
במאמר זה, אני אעסוק באסטרטגיות טכניות ובפרקטיקות הטובות ביותר לניהול עומסים בהיקף גדול בקוברנטיס.
הכרת אתגרים בהגדלת קוברנטיס
הרחבה בקוברנטיס מחייבת התמודדות עם מכשולים כמו:
- תזמון משאבי קלאסטר. שימוש אופטימלי במעבד, זיכרון ודיסק על פני צמתים.
- מורכבות רשת. תקשורת עקבית בין שירותים בסביבות גדולות ומפוזרות.
- שגיאות והגדלה. טיפול בזמינות במהלך תקלות ובמהלך תרחיש הגדלה/הקטנה.
- עומסים תפעוליים. הסרת פעולות חוזרות כמו הגדלה, ניטור ואיזון עומסים.
- אבטחה בהיקף גדול. בקרות גישה מבוססות תפקידים (RBAC), סודות, ומדיניות רשת בקלאסטרים גדולים.
במאמר זה, אני אעבור על דוגמאות להתמודדות עם מכשולים כאלה בשילוב עם יכולות קוברנטיס מקוריות וכלים משלימים.
יכולות וכלים
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
ובצעו שינויים דרושים למגבלות.
סקיילר אוטומטי לקבוצה
הסקיילר אוטומטית מגדיל את מספר הצמתים בקבוצת הקלטות שלכם לפי דרישת העבודה.
kubectl apply -f https://github.com/kubernetes/autoscaler/releases/download/cluster-autoscaler-<version>/cluster-autoscaler.yaml
שיטות מומלצות:
- תייגו את פעולות הסקיילר שלכם בצורה מתאימה עבור הצמתים שלכם.
- ניטור התנהגות הסקיילר כדי למנוע תחושת יתר-הספק.
2. סקיילר פודים אופקי ואנכי
סקיילר פודים אופקי (HPA) וסקיילר פודים אנכי (VPA) יכולות הסקיילינג אוטומטי קיימות ב־Kubernetes באופן טבעי, אך רשתות שירות כמו Istio ו־Linkerd מקלות ומפשטות את התקשורת בין שירותים ועושות אותה יעילה יותר.
סקיילר פודים אופקי (HPA)
HPA מגדיל כפיליות של פודים לפי שימוש ב־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. שיפור רמות התפקוד
רמות התפקוד חיוניות לשליטה בקוברנטיס ברמה גדולה יותר. השתמשו בכלים כמו 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)
השתמשו ב־PDBs לשמירה על זמינות מינימלית של הפודים במהלך תחזוקה ושדרוגים.
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. מאבטחים את הקוברנטיס בסקאלה
הגדרת 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. גרסה ואחסון של manifest של 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, ו-GitLab CI.
מסקנה
על מנת להתכפיל את Kubernetes, עליך להשתמש בשילוב של שימוש יעיל במשאבים, אוטומציה, יכולת לצפות, ותהליכי אבטחה חזקים. על ידי השימוש המלא ביכולות הטבעיות של Kubernetes ובשילובם עם כלים נלווים, עבודתך יכולה להיות בעלת ביצועים גבוהים, בטוחה, ועמידה בכל קנה מידה.
Source:
https://dzone.com/articles/best-practices-managing-kubernetes-at-scale