Kontrak runtime container

Halaman ini mencantumkan persyaratan dan perilaku utama container di Penyajian 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. Penyajian Knative secara khusus mendukung format ABI x86_64 Linux.

Memproses permintaan pada port yang benar

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

Dalam instance penampung penayangan Knative, nilai PORT variabel lingkungan selalu mencerminkan porta tujuan pengiriman permintaan. Defaultnya adalah 8080.

Enkripsi lapisan transpor (TLS)

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

Respons

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

Variabel lingkungan

Variabel lingkungan berikut secara otomatis ditambahkan ke instance container:

Nama Deskripsi Contoh
PORT Port yang akan diproses oleh server HTTP Anda. 8080
K_SERVICE Nama layanan penayangan 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 penampung Anda dapat ditulis dan tunduk kepada hal-hal berikut perilaku:

  • Ini adalah sistem file dalam memori, jadi menulis ke sistem file menggunakan container dalam memori instance.
  • Data yang ditulis ke sistem file tidak akan dipertahankan ketika instance container dihentikan.

Siklus proses instance container

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

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

Memulai

Instance container Anda harus memproses permintaan dalam 4 menit setelah dimulai. Selama waktu startup ini, instance container merupakan CPU yang dialokasikan.

Komputasi tercakup dalam permintaan

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

Nonaktif

Instance container dapat dinonaktifkan kapan saja.

Ketika sebuah instance kontainer perlu dimatikan, permintaan masuk yang baru yang dirutekan ke instance lain dan permintaan yang sedang diproses diberi waktu untuk diselesaikan. Instance container kemudian menerima sinyal SIGTERM menunjukkan awal periode 10 detik sebelum dimatikan (dengan sinyal SIGKILL). Selama periode ini, instance container akan diberi alokasi CPU dan ditagih. Jika instance container tidak menangkap sinyal SIGTERM, langsung mematikannya.

Kecuali jika instance container harus tetap tidak ada aktivitas karena jumlah minimum instance penampung setelan konfigurasi, tidak akan dibiarkan tidak ada aktivitas selama lebih dari 15 menit.

Resource instance container

Permintaan resource untuk instance container Anda dijadwalkan di node dari cluster GKE Anda. Setiap {i>node<i} membagikan jumlah total komputasi yang tersedia untuk cluster GKE Anda.

Oleh karena itu, jumlah resource komputasi yang tersedia Layanan penayangan Knative hanya dibatasi pada jumlah resource dalam node tersebut. Pelajari selengkapnya tentang menghitung resource untuk permintaan.

Misalnya, jika Anda mengalokasikan 512 MiB memori untuk kontainer, container berjalan di satu-satunya pod di dalam node yang memiliki memori 8 GiB, {i>container<i} itu bisa mencoba menggunakan lebih banyak RAM.

CPU

Secara default, isian antrean proxy mencadangkan 25 milliCPU dan tidak ada batasan jumlah vCPU yang dapat digunakan oleh layanan penayangan Knative Anda. Antrean konsumsi sumber daya {i>proxy<i} tergantung pada berapa banyak permintaan yang dimasukkan ke dalam 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 dijalankan di beberapa core secara bersamaan. Tujuan vCPU hanya dialokasikan selama startup dan permintaan instance container diproses, proses ini akan di-throttle jika tidak.

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

Memori

Secara default, isian antrean proxy tidak mencadangkan memori apa pun dan tidak ada batasan jumlah memori yang layanan penyaluran Knative Anda. Jika diinginkan, Anda dapat mengonfigurasi batas memori untuk layanan penyaluran Knative Anda. Untuk informasi selengkapnya tentang cara GKE menangani memori, lihat Memori dan resource CPU 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 penampung penayangan Knative secara default ditetapkan ke beberapa serentak, dengan setiap penampung instance dapat menerima lebih dari satu permintaan secara bersamaan. Anda dapat mengubahnya dengan menyetel konkurensi.

Sandbox instance container

Penayangan Knative tidak menggunakan sandbox container.

Server metadata instance container

Instance penampung penayangan Knative mengekspos server metadata yang dapat Anda gunakan untuk mengambil detail tentang instance container Anda, 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 penayangan Knative ini
/computeMetadata/v1/instance/region Region layanan penyaluran Knative ini
/computeMetadata/v1/instance/id ID unik instance container (juga tersedia di log).
/computeMetadata/v1/instance/service-accounts/default/token Menghasilkan token untuk akun layanan runtime layanan penayangan Knative ini