בדף הזה מוסבר איך לפרוס עומסי עבודה שמשתמשים בפרוטוקול Stream Control Transmission Protocol (SCTP) באשכולות Standard של Google Kubernetes Engine (GKE).
פרוטוקול SCTP נתמך בטכנולוגיית Cilium. מכיוון ש-GKE Dataplane V2 מיושם באמצעות Cilium, אפשר להשתמש ב-SCTP רק באשכולות שבהם הופעל GKE Dataplane V2. עם תמיכה ב-SCTP, אפשר להפעיל תקשורת ישירה ב-SCTP לתעבורת נתונים בין פודים ובין פודים לשירותים. מידע נוסף זמין במאמר תמיכה ב-SCTP ב-Cilium.
הדף הזה מיועד לאופרטורים ולמפתחים שמקצים ומגדירים משאבי ענן ופורסים אפליקציות ושירותים. מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שמוזכרים בתוכן זמין במאמר תפקידים נפוצים של משתמשי GKE ומשימות. Google Cloud
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
דרישות ומגבלות
הדרישות והמגבלות הבאות חלות על תמיכה ב-SCTP באשכולות GKE Standard:
- האשכול צריך להריץ GKE בגרסה 1.32.2-gke.1297000 ואילך.
- צמתים באשכול חייבים להשתמש בתמונות של צמתים מסוג Ubuntu. אין תמיכה ב-SCTP בתמונות של מערכת הפעלה שמותאמת לקונטיינרים.
- כדי להפעיל תמיכה ב-SCTP, צריך לוודא שקובצי האימג' של הקונטיינרים מבוססי Ubuntu ומערכת ההפעלה של צומת GKE הבסיסי נטענו עם מודול הליבה
sctp. - זמן ההגדרה של שיוך SCTP יכול להיות ארוך יותר מזמן ההגדרה של חיבור TCP. אתם צריכים לתכנן את האפליקציות שלכם באופן שיאפשר להן להתמודד עם עיכובים פוטנציאליים בזמן יצירת שיוכים.
- מידע נוסף על התמיכה של Cilium ב-SCTP זמין בתיעוד של Cilium.
פריסת עומסי עבודה באמצעות SCTP
לפני שפורסים עומסי עבודה בסביבת הייצור, חשוב לבדוק היטב את הפריסה בסביבה שאינה סביבת ייצור.
החל מגרסה 1.32.2-gke.1297000 של GKE, SCTP מופעל כברירת מחדל באשכולות שמשתמשים ב-GKE Dataplane V2 ובתמונות צומת של Ubuntu. כדי לפרוס עומסי עבודה עם SCTP, מבצעים את השלבים הבאים:
כדי ליצור אשכול עם GKE Dataplane V2 ותמונות Ubuntu, מריצים את הפקודה הבאה:
gcloud container clusters create CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=CLUSTER_VERSION \ --enable-dataplane-v2 \ --image-type=ubuntu_containerdמחליפים את הערכים הבאים:
-
CLUSTER_NAME: השם של האשכול. -
CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור זמין לאשכולות אזוריים. -
CLUSTER_VERSION: גרסת GKE, שצריכה להיות 1.32.2-gke.1297000 ואילך.
-
כדי להוסיף את האפליקציה לקונטיינר, צריך לוודא שקובץ האימג' של הקונטיינר כולל אפליקציה שמוגדרת לשימוש ב-SCTP. אפשר להשתמש בכל אפליקציה שתומכת ב-SCTP, כמו אפליקציה מותאמת אישית.
הדוגמה הבאה היא של
Dockerfileלהעברת האפליקציה לקונטיינר, בהנחה שאתם משתמשים ב-Docker:יוצרים את קובץ האימג' ומעבירים אותו בדחיפה למאגר קונטיינרים כמו Artifact Registry. מידע נוסף על אופן הפעולה של הקובץ הזה זמין במאמר Dockerfile reference (הפניה ל-Dockerfile) במאמרי העזרה של Docker.
כדי ליצור פריסה ושירות, שומרים את המניפסט הבא בשם
sctp-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: sctp-app spec: replicas: 1 selector: matchLabels: app: sctp-app template: metadata: labels: app: sctp-app spec: containers: - name: sctp-container image: CONTAINER_IMAGE ports: - containerPort: PORT protocol: SCTP --- apiVersion: v1 kind: Service metadata: name: sctp-service spec: selector: app: sctp-app ports: - protocol: SCTP port: PORT targetPort: PORT type: ClusterIPמחליפים את מה שכתוב בשדות הבאים:
-
CONTAINER_IMAGE: קובץ האימג' של הקונטיינר שיצרתם בשלב הקודם. -
PORT: מספרי היציאה של SCTP ויציאת היעד של האפליקציה. הערכים שלportושלtargetPortחייבים להיות זהים.
-
כדי להחיל את הפריסה והשירות, מריצים את הפקודה הבאה:
kubectl apply -f sctp-deployment.yamlכדי לאמת את הקישוריות של פרוטוקול SCTP לשירות, יוצרים Pod באותו אשכול ומריצים את הפקודה הבאה:
kubectl run sctp-client \ --image=ubuntu:latest \ --namespace=default \ -it --rm \ --command -- bash -c 'apt-get update && apt-get install -y socat && (echo "Hello, SCTP!"; sleep 1) | socat - SCTP:sctp-service:PORT'הפלט אמור להיראות כך:
Preparing to unpack .../socat_1.8.0.0-4build3_amd64.deb ... Setting up socat (1.8.0.0-4build3) ... Hello, SCTP!
פתרון בעיות
אם נתקלתם בבעיות בקישוריות SCTP, כדאי לפעול לפי ההנחיות הבאות כדי לנסות לזהות את מקור הבעיה:
בודקים את היומנים של ה-Pod. כדי לבדוק אם יש שגיאות ביומנים של האפליקציה, מריצים את הפקודה הבאה:
kubectl logs POD_NAMEהיומנים האלה יכולים לעזור לכם לזהות את הסיבה לקריסת ה-Pod.
בודקים את הסטטוס של אובייקט השירות SCTP:
kubectl describe service SCTP_SERVICE_NAMEבודקים את מדיניות הרשת. מדיניות רשת יכולה להגביל תעבורת SCTP. צריך לוודא שמדיניות הרשת מאפשרת את תעבורת ה-SCTP הנדרשת לאפליקציות.
בודקים את הסטטוס של GKE Dataplane V2. כדי לוודא ש-GKE Dataplane V2 מופעל באשכול, מריצים את הפקודה הבאה:
kubectl -n kube-system get pods -l k8s-app=cilium -o wideמוודאים שהפלט כולל Pods עם הקידומת
anetd-. anetd הוא בקר הרשת של GKE Dataplane V2.כדי לשפר את קצב העברת הנתונים, מגדילים את הערך של הפרמטרים
sysctlnet.core.wmem_defaultו-net.core.rmem_default. לדוגמה, 4194304 (4MB). מידע נוסף זמין במאמר בנושא אפשרויות הגדרה של Sysctl.יכול להיות שתיתקלו בבעיות אם תשתמשו בתרגום כתובת רשת (NAT) עם SCTP ב-GKE. מידע נוסף על התמיכה של Cilium ב-SCTP זמין במסמכי התיעוד של Cilium.
מנות SCTP כפופות ליחידת השידור המקסימלית (MTU) של הרשת. מוודאים שערך ה-MTU של הרשת מספיק לתנועת ה-SCTP.
הביצועים של SCTP יכולים להיות מושפעים מגורמים כמו זמן אחזור ברשת, אובדן מנות ושינויים בגרעין. עוקבים אחרי הביצועים של SCTP באפליקציה ומשנים את ההגדרות לפי הצורך.
המאמרים הבאים
- מידע על תמיכה ב-SCTP זמין במסמכי התיעוד של Cilium.
- איך מפעילים את GKE Dataplane V2 באשכול.