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

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

  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 במאמרי העזרה של 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
    
  • בודקים את כללי מדיניות הרשת. מדיניות רשת ב-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 של האפליקציה ומשנים את ההגדרות לפי הצורך.

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