פריסת עומסי עבודה באמצעות SCTP

בדף הזה מוסבר איך לפרוס עומסי עבודה שמשתמשים בפרוטוקול 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, מבצעים את השלבים הבאים:

  1. כדי ליצור אשכול עם 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 ואילך.
  2. כדי להוסיף את האפליקציה לקונטיינר, צריך לוודא שקובץ האימג' של הקונטיינר כולל אפליקציה שמוגדרת לשימוש ב-SCTP. אפשר להשתמש בכל אפליקציה שתומכת ב-SCTP, כמו אפליקציה מותאמת אישית.

    הדוגמה הבאה היא של Dockerfile להעברת האפליקציה לקונטיינר, בהנחה שאתם משתמשים ב-Docker:

    FROM ubuntu:latest
    RUN apt-get update && apt-get install -y socat
    
    # Run a simple SCTP echo server.  This command uses socat to listen for
    # incoming SCTP connections on a specified port and echo back any received data.
    # The 'fork' option ensures that a new process is created for each connection.
    # Replace "PORT" below with the desired port number.
    CMD ["socat", "PIPE", "SCTP-LISTEN:PORT,fork"]
    

    יוצרים את קובץ האימג' ומעבירים אותו בדחיפה למאגר קונטיינרים כמו Artifact Registry. מידע נוסף על אופן הפעולה של הקובץ הזה זמין במאמר Dockerfile reference (הפניה ל-Dockerfile) במאמרי העזרה של Docker.

  3. כדי ליצור פריסה ושירות, שומרים את המניפסט הבא בשם 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 חייבים להיות זהים.
  4. כדי להחיל את הפריסה והשירות, מריצים את הפקודה הבאה:

    kubectl apply -f sctp-deployment.yaml
    
  5. כדי לאמת את הקישוריות של פרוטוקול 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 באפליקציה ומשנים את ההגדרות לפי הצורך.

המאמרים הבאים