Kontrak runtime container

Halaman ini berisi daftar persyaratan dan perilaku utama container di inferensi Knative.

Bahasa dan gambar yang didukung

Image container Anda dapat menjalankan kode yang ditulis dalam bahasa pemrograman pilihan Anda dan menggunakan image dasar apa pun, asalkan image tersebut mematuhi batasan yang tercantum di halaman ini.

File yang dapat dieksekusi di image container harus dikompilasi untuk Linux 64-bit. Inferensi Knative secara khusus mendukung format ABI x86_64 Linux.

Memproses permintaan pada port yang benar

Container harus memproses permintaan pada 0.0.0.0 di port tujuan pengiriman permintaan. Secara default, permintaan akan dikirim ke 8080, tetapi Anda dapat mengonfigurasi inferensi Knative untuk mengirim permintaan ke port pilihan Anda.

Di dalam instance container inferensi Knative, nilai variabel lingkungan PORT selalu mencerminkan port tujuan pengiriman permintaan. Nilai defaultnya adalah 8080.

Enkripsi lapisan transpor (TLS)

Container tidak boleh menerapkan keamanan lapisan transport secara langsung. TLS dihentikan oleh inferensi Knative untuk HTTPS dan gRPC, lalu permintaan akan di-proxy-kan sebagai HTTP atau gRPC ke container tanpa TLS.

Respons

Instance container Anda harus mengirim respons dalam waktu yang ditentukan di setelan waktu tunggu permintaan setelah menerima permintaan, termasuk waktu startup instance container. Jika tidak, permintaan akan berakhir dan error 504 akan ditampilkan.

Variabel lingkungan

Variabel lingkungan berikut akan otomatis ditambahkan ke container yang berjalan:

Nama Deskripsi Contoh
PORT Port yang akan diproses oleh server HTTP Anda. 8080
K_SERVICE Nama layanan inferensi Knative yang sedang dijalankan. hello-world
K_REVISION Nama revisi inferensi Knative yang sedang dijalankan. hello-world.1
K_CONFIGURATION Nama konfigurasi inferensi Knative yang membuat revisi. hello-world

Akses sistem file

Sistem file container Anda dapat ditulis dan tunduk pada perilaku berikut:

  • Ini adalah sistem file dalam memori, sehingga penulisan ke file ini akan menggunakan memori instance container.
  • Data yang ditulis ke sistem file tidak akan bertahan saat instance container dihentikan.

Siklus proses instance container

Sebagai respons terhadap permintaan yang masuk, layanan akan otomatis diskalakan ke sejumlah instance container, yang masing-masing menjalankan image container yang di-deploy.

Jika revisi tidak menerima traffic apa pun, revisi tersebut akan diskalakan ke jumlah minimum instance container yang dikonfigurasi (nol secara default).

Memulai

Instance container Anda harus memproses permintaan dalam waktu 4 menit setelah dimulai. Selama waktu startup ini, instance container diberi alokasi CPU.

Komputasi dicakup ke permintaan

Setelah startup, Anda hanya dapat melakukan komputasi dalam cakupan permintaan: instance container tidak memiliki CPU yang dialokasikan jika tidak memproses permintaan.

Nonaktif

Instance container dapat dinonaktifkan kapan saja.

Jika instance container perlu dinonaktifkan, permintaan masuk baru akan dirutekan ke instance lain dan permintaan yang saat ini sedang diproses akan diberi waktu untuk diselesaikan. Instance container kemudian menerima sinyal SIGTERM yang menunjukkan awal periode 10 detik sebelum dinonaktifkan (dengan sinyal SIGKILL). Selama periode ini, instance container mendapatkan alokasi CPU dan akan dikenai biaya. Jika instance container tidak menangkap sinyal SIGTERM, instance tersebut akan segera dinonaktifkan.

Kecuali jika instance container harus dibiarkan tidak beraktivitas karena setelan konfigurasi jumlah minimum instance container, maka instance tidak akan dibiarkan menganggur selama lebih dari 15 menit.

Resource instance container

Permintaan resource untuk instance container Anda dijadwalkan di node cluster GKE Anda. Setiap node berbagi jumlah total resource komputasi yang tersedia untuk cluster GKE Anda.

Oleh karena itu, jumlah resource komputasi yang tersedia untuk layanan inferensi Knative hanya dibatasi oleh jumlah resource yang tersedia di node tersebut. Pelajari lebih lanjut resource komputasi untuk permintaan.

Misalnya, jika Anda mengalokasikan memori 512 MiB untuk container, dan container tersebut berjalan di satu-satunya pod dalam node yang memiliki memori 8 GiB, container tersebut dapat mencoba menggunakan lebih banyak RAM.

CPU

Secara default, queue proxy sidecar mencadangkan 25 milliCPU dan tidak ada batasan jumlah vCPU yang dapat digunakan oleh layanan inferensi Knative Anda. Konsumsi resource queue proxy bergantung pada jumlah permintaan yang diantrekan dan ukuran permintaan.

vCPU diimplementasikan sebagai abstraksi hardware dasar untuk memberikan perkiraan waktu CPU yang setara untuk hardware hyper-thread tunggal pada platform CPU variabel. Instance container dapat dieksekusi pada beberapa core secara bersamaan. vCPU hanya dialokasikan selama startup instance container dan pemrosesan permintaan, jika tidak, vCPU akan dibatasi.

Untuk mengalokasikan nilai vCPU yang berbeda, lihat dokumentasi untuk mengalokasikan CPU.

Memori

Secara default, queue proxy sidecar tidak mencadangkan memori apa pun dan tidak ada batasan jumlah memori yang dapat digunakan oleh layanan inferensi Knative Anda. Jika diinginkan, Anda dapat mengonfigurasi batas memori untuk layanan inferensi Knative Anda. Untuk mengetahui informasi selengkapnya tentang cara GKE menangani memori, lihat Resource CPU dan memori yang dapat dialokasikan.

Penggunaan umum memori meliputi:

  • Kode yang dimuat ke dalam memori untuk menjalankan layanan
  • Menulis ke sistem file
  • Proses tambahan yang berjalan dalam container seperti server nginx
  • Sistem caching dalam memori seperti PHP OpCache
  • Penggunaan memori per permintaan

Serentak

Setiap instance container inferensi Knative secara default ditetapkan ke beberapa serentak, dengan setiap instance container dapat menerima lebih dari satu permintaan secara bersamaan. Anda dapat mengubahnya dengan menyetel konkurensi.

Sandbox instance container

Inferensi Knative tidak menggunakan sandbox container.

Server metadata instance container

Instance container inferensi Knative menampilkan server metadata yang dapat Anda gunakan untuk mengambil detail tentang instance container, seperti project ID, region, ID instance, atau akun layanan.

Anda dapat mengakses data ini dari server metadata menggunakan permintaan HTTP sederhana ke endpoint http://metadata.google.internal/ dengan header Metadata-Flavor: Google: library klien tidak diperlukan. Untuk mengetahui informasi selengkapnya, baca Mendapatkan metadata.

Tabel berikut mencantumkan beberapa informasi server metadata yang tersedia:

Jalur Deskripsi
/computeMetadata/v1/project/project-id Project ID layanan inferensi Knative ini
/computeMetadata/v1/instance/region Region layanan inferensi Knative ini
/computeMetadata/v1/instance/id ID unik instance container (juga tersedia dalam log).
/computeMetadata/v1/instance/service-accounts/default/token Membuat token untuk akun layanan runtime layanan inferensi Knative ini