Men-deploy workload dengan SCTP


Halaman ini menjelaskan cara men-deploy workload yang menggunakan Stream Control Transmission Protocol (SCTP) di cluster Standard Google Kubernetes Engine (GKE).

SCTP didukung di teknologi Cilium. Karena GKE Dataplane V2 diimplementasikan menggunakan Cilium, Anda hanya dapat menggunakan SCTP pada cluster yang telah diaktifkan dengan GKE Dataplane V2. Dengan dukungan SCTP, Anda dapat mengaktifkan komunikasi SCTP langsung untuk traffic Pod-to-Pod dan Pod-to-Service. Untuk mempelajari lebih lanjut, lihat Dukungan SCTP di Cilium.

Halaman ini ditujukan bagi Operator dan Developer yang menyediakan dan mengonfigurasi resource cloud serta men-deploy aplikasi dan layanan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang dirujuk dalam konten, lihat Peran dan tugas pengguna umum GKE Enterprise. Google Cloud

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Persyaratan dan batasan

Dukungan SCTP di cluster GKE Standard memiliki persyaratan dan batasan berikut:

  • Cluster Anda harus menjalankan GKE versi 1.32.2-gke.1297000 atau yang lebih baru.
  • Node cluster harus menggunakan image node Ubuntu. SCTP tidak didukung untuk image Container-Optimized OS.
  • Untuk mengaktifkan dukungan SCTP, pastikan image container berbasis Ubuntu dan OS node GKE yang mendasarinya dimuat dengan modul kernel sctp.
  • Anda tidak dapat menggunakan SCTP di cluster yang diaktifkan dengan dukungan multi-jaringan untuk Pod.
  • Waktu penyiapan untuk asosiasi SCTP dapat lebih lama daripada waktu penyiapan untuk koneksi TCP. Desain aplikasi Anda untuk menangani potensi penundaan saat asosiasi dibuat.
  • Untuk mempelajari lebih lanjut apa yang didukung dan tidak didukung Cilium dengan SCTP, lihat dokumentasi Cilium.

Men-deploy workload dengan SCTP

Praktik terbaik:

Uji deployment Anda secara menyeluruh di lingkungan non-produksi sebelum men-deploy beban kerja ke produksi.

Mulai GKE versi 1.32.2-gke.1297000, SCTP diaktifkan secara default di cluster yang menggunakan GKE Dataplane V2 dan image node Ubuntu. Untuk men-deploy workload dengan SCTP, selesaikan langkah-langkah berikut:

  1. Untuk membuat cluster dengan GKE Dataplane V2 dan image Ubuntu, jalankan perintah berikut:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --cluster-version=CLUSTER_VERSION \
        --enable-dataplane-v2 \
        --image-type=ubuntu_containerd
    

    Ganti nilai berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • CONTROL_PLANE_LOCATION: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.
    • CLUSTER_VERSION: versi GKE, yang harus berupa 1.32.2-gke.1297000 atau yang lebih baru.
  2. Untuk membuat container aplikasi, pastikan image container Anda menyertakan aplikasi yang dikonfigurasi untuk menggunakan SCTP. Anda dapat menggunakan aplikasi apa pun yang mendukung SCTP, seperti aplikasi kustom.

    Berikut adalah contoh Dockerfile untuk memasukkan aplikasi ke dalam container, dengan asumsi Anda menggunakan 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"]
    

    Bangun dan kirim image ke registry container seperti Artifact Registry. Untuk mengetahui informasi selengkapnya tentang cara kerja file ini, lihat referensi Dockerfile dalam dokumentasi Docker.

  3. Untuk membuat Deployment dan Layanan, simpan manifes berikut sebagai 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
    

    Ganti kode berikut:

    • CONTAINER_IMAGE: image container yang Anda buat di langkah sebelumnya.
    • PORT: nomor port SCTP dan port target aplikasi. Nilai untuk port dan targetPort harus sama.
  4. Untuk menerapkan Deployment dan Service, jalankan perintah berikut:

    kubectl apply -f sctp-deployment.yaml
    
  5. Untuk memverifikasi konektivitas SCTP untuk Layanan, buat Pod dalam cluster yang sama dan jalankan perintah berikut:

    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'
    

    Outputnya mirip dengan hal berikut ini:

    Preparing to unpack .../socat_1.8.0.0-4build3_amd64.deb ...
    Setting up socat (1.8.0.0-4build3) ...
    Hello, SCTP!
    

Pemecahan masalah

Jika Anda mengalami masalah dengan konektivitas SCTP, ikuti panduan ini untuk membantu menentukan sumber masalah:

  • Periksa log Pod. Untuk memeriksa apakah ada error dalam log aplikasi Anda, jalankan perintah berikut:

    kubectl logs POD_NAME
    

    Log ini dapat membantu Anda mengidentifikasi penyebab Pod mengalami error.

  • Periksa status objek Layanan SCTP:

    kubectl describe service SCTP_SERVICE_NAME
    
  • Periksa kebijakan jaringan Anda. Kebijakan jaringan dapat membatasi traffic SCTP. Pastikan kebijakan jaringan Anda mengizinkan traffic SCTP yang diperlukan untuk aplikasi Anda.

  • Periksa status GKE Dataplane V2. Untuk memverifikasi bahwa GKE Dataplane V2 diaktifkan di cluster Anda, jalankan perintah berikut:

    kubectl -n kube-system get pods -l k8s-app=cilium -o wide
    

    Pastikan output menyertakan Pod dengan awalan anetd-. anetd adalah pengontrol jaringan untuk GKE Dataplane V2.

  • Untuk meningkatkan throughput, tingkatkan parameter sysctl net.core.wmem_default dan net.core.rmem_default ke nilai yang lebih besar, misalnya, 4194304 (4 MB). Untuk mengetahui informasi selengkapnya, lihat Opsi konfigurasi Sysctl.

  • Anda mungkin menghadapi masalah jika menggunakan Network Address Translation (NAT) dengan SCTP di GKE. Untuk mengetahui informasi selengkapnya tentang apa yang didukung Cilium dengan SCTP, lihat dokumentasi Cilium.

  • Paket SCTP tunduk pada Unit Transmisi Maksimum (MTU) jaringan. Pastikan MTU jaringan Anda cukup untuk traffic SCTP Anda.

  • Performa SCTP dapat dipengaruhi oleh faktor-faktor seperti latensi jaringan, kehilangan paket, dan penyesuaian kernel. Pantau performa SCTP aplikasi Anda dan sesuaikan setelan sesuai kebutuhan.

Langkah berikutnya