בדף הזה מוסבר איך לפרוס עומסי עבודה שמשתמשים בפרוטוקול Stream Control Transmission Protocol (SCTP) באשכולות Standard של Google Kubernetes Engine (GKE).
יש תמיכה ב-SCTP בטכנולוגיית Cilium. מכיוון ש-GKE Dataplane V2 מוטמע באמצעות Cilium, אפשר להשתמש ב-SCTP רק באשכולות שבהם הופעל GKE Dataplane V2. עם תמיכה ב-SCTP, אתם יכולים להפעיל תקשורת SCTP ישירה לתנועה בין Pod ל-Pod ובין Pod לשירות. מידע נוסף זמין במאמר תמיכה ב-SCTP ב-Cilium.
הדף הזה מיועד לאופרטורים ולמפתחים שמקצים ומגדירים משאבי ענן ופורסים אפליקציות ושירותים. מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שמוזכרים ב Google Cloudתוכן זמין במאמר תפקידים נפוצים של משתמשים ומשימות ב-GKE.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:
- מפעילים את Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-Google Cloud CLI למשימה הזו, מתקינים ואז מאתחלים את ה-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 במאמרי העזרה של 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בודקים את כללי מדיניות הרשת. מדיניות רשת ב-Kubernetes יכולה להגביל את התנועה של 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.כדי לשפר את קצב העברת הנתונים, מגדילים את הפרמטרים
sysctlו-net.core.rmem_defaultשלnet.core.wmem_defaultלערך גבוה יותר, למשל 4194304 (4MB). מידע נוסף זמין במאמר בנושא אפשרויות ההגדרה של Sysctl.יכול להיות שתיתקלו בבעיות אם תשתמשו בתרגום כתובת רשת (NAT) עם SCTP ב-GKE. מידע נוסף על התמיכה של Cilium ב-SCTP זמין במסמכי התיעוד של Cilium.
חבילות SCTP כפופות ליחידת השידור המקסימלית (MTU) של הרשת. מוודאים שה-MTU של הרשת מספיק לתנועת הנתונים של SCTP.
הביצועים של SCTP יכולים להיות מושפעים מגורמים כמו זמן האחזור של הרשת, אובדן מנות ושינויים בקרנל. עוקבים אחרי הביצועים של ה-SCTP של האפליקציה ומשנים את ההגדרות לפי הצורך.
המאמרים הבאים
- מידע על תמיכה ב-SCTP זמין במסמכי התיעוד של Cilium.
- איך מפעילים את GKE Dataplane V2 באשכול.