Halaman ini menunjukkan cara menggunakan Streaming image di Google Kubernetes Engine (GKE) untuk mengambil image container dengan melakukan streaming data image sesuai kebutuhan aplikasi Anda.
Cluster Autopilot baru yang menjalankan GKE versi 1.25.5-gke.1000 dan yang lebih baru secara otomatis menggunakan streaming Image untuk mengambil image yang memenuhi syarat. Petunjuk di halaman ini hanya berlaku untuk cluster Standard.
Ringkasan
Streaming image adalah metode pengambilan image container di tempat GKE melakukan streaming data dari image yang memenuhi syarat sesuai permintaan aplikasi Anda. Anda dapat menggunakan streaming Image agar workload dapat diinisialisasi tanpa menunggu seluruh image didownload, yang dapat mempersingkat waktu inisialisasi dengan signifikan. Waktu pengambilan yang disingkat memberi Anda manfaat berikut:
- Penskalaan otomatis yang lebih cepat
- Mengurangi latensi saat mengambil image berukuran besar
- Startup Pod yang lebih cepat
Dengan streaming Image, GKE menggunakan sistem file jarak jauh sebagai sistem file root untuk setiap container yang menggunakan image container yang memenuhi syarat. GKE melakukan streaming data image dari sistem file jarak jauh sesuai kebutuhan workload Anda. Tanpa streaming Image, GKE mendownload seluruh image container ke setiap node dan menggunakannya sebagai sistem file root untuk workload Anda.
Saat melakukan streaming data image, GKE mendownload seluruh image container ke disk lokal di latar belakang dan men-cache-nya. GKE kemudian menyajikan permintaan pembacaan data di masa mendatang dari image yang di-cache.
Saat Anda men-deploy workload yang perlu membaca file tertentu di image container, backend streaming Image hanya menyajikan file yang diminta tersebut.
Persyaratan
Anda harus memenuhi persyaratan berikut untuk menggunakan streaming Image di cluster GKE Autopilot dan Standard:
Anda harus mengaktifkan Container File System API.
Cluster Autopilot baru harus menjalankan GKE versi 1.25.5-gke.1000 atau yang lebih baru agar streaming Image dapat diaktifkan secara otomatis. Untuk mengetahui petunjuknya, lihat Menetapkan versi dan saluran rilis cluster Autopilot baru.
Cluster GKE Standard yang baru dan yang sudah ada harus menjalankan versi 1.18.6-gke.4801 atau yang lebih baru.
Anda harus menggunakan Container-Optimized OS dengan image node containerd. Node Autopilot selalu menggunakan image node ini.
Image container Anda harus disimpan di Artifact Registry.
Jika mengaktifkan node pribadi di cluster, Anda harus mengaktifkan Akses Google Pribadi di subnet agar node dapat mengakses Layanan streaming Image.
Jika Kontrol Layanan VPC melindungi image container dan Anda menggunakan streaming Image, Anda juga harus menyertakan Image streaming API (
containerfilesystem.googleapis.com
) di perimeter layanan.Jika node GKE dalam cluster tidak menggunakan akun layanan default, Anda harus memastikan bahwa akun layanan kustom Anda memiliki peran IAM Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
) dalam project yang menghosting image penampung.
Batasan
- Anda tidak dapat menggunakan Secret untuk mengambil image container di versi GKE sebelum 1.23.5-gke.1900.
- Image container yang menggunakan Manifes Image V2, skema versi 1 tidak memenuhi syarat.
- Image container yang dienkripsi dengan kunci enkripsi yang dikelola pelanggan (CMEK) memenuhi syarat untuk streaming Image di GKE versi 1.25.3-gke.1000 atau yang lebih baru. Di versi sebelumnya, GKE mendownload image ini tanpa melakukan streaming data. Anda masih dapat menggunakan CMEK untuk melindungi persistent disk yang terpasang dan boot disk kustom di cluster yang menggunakan streaming Image.
- Image container dengan lapisan duplikat tidak didukung. GKE mendownload image ini tanpa melakukan streaming data. Periksa apakah ada lapisan kosong atau lapisan duplikat pada image penampung Anda.
- Repositori Artifact Registry harus berada di
region
yang sama dengan node GKE Anda, atau di
multi-region
yang sesuai dengan region tempat node Anda berjalan. Contoh:
- Jika node Anda berada di
us-east1
, streaming Image tersedia untuk repositori di regionus-east1
atau multi-regionus
karena GKE dan Artifact Registry berjalan di lokasi pusat data di Amerika Serikat. - Jika node Anda berada di region
northamerica-northeast1
, node tersebut berjalan di Kanada. Dalam situasi ini, streaming Image hanya tersedia untuk repositori di region yang sama.
- Jika node Anda berada di
- Jika workload Anda membaca banyak file di sebuah image selama inisialisasi, Anda mungkin melihat peningkatan waktu inisialisasi karena latensi yang ditambahkan oleh pembacaan file jarak jauh.
- Anda mungkin tidak melihat manfaat streaming Image saat pengambilan pertama image yang memenuhi syarat. Namun, setelah streaming Image men-cache image, image di masa mendatang akan mendapatkan manfaat cluster dari streaming Image.
- Cluster GKE Standard menggunakan konfigurasi level cluster untuk menentukan apakah akan mengaktifkan streaming Image di node pool baru yang dibuat menggunakan penyediaan otomatis node. Namun, Anda tidak dapat menggunakan pemisahan workload untuk membuat node pool dengan streaming Image yang diaktifkan saat streaming Image dinonaktifkan di level cluster.
- Kemampuan file Linux seperti
CAP_NET_RAW
didukung dengan streaming Image di GKE versi 1.22.6-gke.300 dan yang lebih baru. Untuk versi GKE sebelumnya, kemampuan ini tidak tersedia saat file image di-streaming, atau saat image disimpan ke disk lokal. Untuk menghindari potensi gangguan, jangan gunakan streaming Image untuk container dengan kemampuan ini di versi GKE sebelum 1.22.6-gke.300. Jika container Anda bergantung pada kemampuan file Linux, container mungkin gagal memulai dengan error izin ditolak saat berjalan dengan streaming Image yang diaktifkan.
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
.
Mengaktifkan Container File System API.
Mengaktifkan streaming Image di cluster
Anda dapat mengaktifkan streaming Image di cluster Standard baru atau yang sudah ada
menggunakan flag --enable-image-streaming
gcloud CLI, atau
konsol Google Cloud. Secara default, node pool di cluster mewarisi
setelan streaming Image di level cluster. Anda dapat mengubah perilaku ini
dengan
mengaktifkan atau menonaktifkan streaming Image di node pool
cluster.
Semua cluster Autopilot baru yang menjalankan GKE versi 1.25.5-gke.1000 dan yang lebih baru menggunakan streaming Image untuk mengambil image yang memenuhi syarat. Untuk mengetahui petunjuknya, lihat Menetapkan versi dan saluran rilis cluster Autopilot baru. Petunjuk berikut hanya berlaku untuk cluster GKE Standard.
Di cluster baru
Anda dapat mengaktifkan streaming Image di cluster baru menggunakan gcloud CLI atau konsol Google Cloud.
gcloud
Untuk membuat cluster baru dengan streaming Image yang diaktifkan, jalankan perintah berikut:
gcloud container clusters create CLUSTER_NAME \
--zone=COMPUTE_ZONE \
--image-type="COS_CONTAINERD" \
--enable-image-streaming
Ganti kode berikut:
CLUSTER_NAME
: nama cluster baru.COMPUTE_ZONE
: zona Compute Engine untuk cluster baru Anda. Untuk cluster regional, gunakan flag--region=COMPUTE_REGION
. Pastikan zona atau region adalah region yang sama atau berada di multi-region repositori Artifact Registry yang berisi image.
Konsol
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik add_box Buat.
Di bagian GKE Standard, klik Konfigurasikan.
Dari panel navigasi, pada bagian Cluster, klik Fitur.
Di bagian Lainnya, pilih kotak centang Aktifkan streaming Image.
Konfigurasikan cluster sesuai kebutuhan, lalu klik Buat.
Di cluster yang sudah ada
Anda dapat mengaktifkan streaming Image di cluster yang sudah ada dan memenuhi persyaratan menggunakan gcloud CLI atau konsol Google Cloud.
gcloud
Guna memperbarui cluster yang sudah ada untuk menggunakan streaming Image, jalankan perintah berikut menggunakan gcloud CLI:
gcloud container clusters update CLUSTER_NAME \
--enable-image-streaming
Konsol
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik nama cluster yang ingin diubah.
Di halaman Cluster, pada bagian Fitur, klik edit di samping streaming Image.
Di kotak dialog Edit streaming Image, pilih kotak centang Aktifkan streaming Image.
Klik Simpan perubahan.
Setelah Anda mengubah cluster, GKEakan mengaktifkan streaming Image di node pool yang sudah ada otomatis secara default. Jika Anda secara eksplisit mengaktifkan atau menonaktifkan streaming Image di setiap node pool, node pool tersebut tidak mewarisi perubahan setelan level cluster.
Mengubah setelan streaming Image akan mematuhi ketersediaan pemeliharaan saat diupdate di level cluster, tetapi tidak di level node pool.
Perubahan ini memerlukan pembuatan ulang node, yang dapat menyebabkan gangguan pada workload yang sedang berjalan. Untuk mengetahui detail tentang perubahan khusus ini, temukan baris yang sesuai dalam tabel perubahan manual yang membuat ulang node menggunakan strategi upgrade node dan mematuhi kebijakan pemeliharaan. Untuk mempelajari update node lebih lanjut, lihat Merencanakan gangguan update node.
Memastikan streaming Image diaktifkan di cluster
Anda dapat memeriksa apakah streaming Image diaktifkan di level cluster menggunakan gcloud CLI atau konsol Google Cloud.
gcloud
Jalankan perintah berikut:
gcloud container clusters describe CLUSTER_NAME \
--flatten "nodePoolDefaults.nodeConfigDefaults"
Setelan ini diaktifkan jika outputnya mirip dengan yang berikut ini:
gcfsConfig:
enabled: true
...
Setelan ini dinonaktifkan jika outputnya mirip dengan yang berikut ini:
gcfsConfig: {}
...
Konsol
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik nama cluster yang ingin diperiksa.
Di halaman Cluster, pada bagian Fitur, di samping streaming Image, Anda akan melihat apakah setelan diaktifkan atau tidak.
Mengaktifkan streaming Image di node pool
Secara default, node pool mewarisi setelan streaming Image di level cluster. Anda dapat mengaktifkan atau menonaktifkan streaming Image di node pool tertentu menggunakan gcloud CLI.
Di node pool baru
Untuk membuat node pool baru dengan streaming Image yang diaktifkan, jalankan perintah berikut:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=COMPUTE_ZONE \
--image-type="COS_CONTAINERD" \
--enable-image-streaming
Ganti kode berikut:
NODE_POOL_NAME
: nama node pool baru.CLUSTER_NAME
: nama cluster untuk node pool.COMPUTE_ZONE
: zona Compute Engine cluster Anda. Untuk cluster regional, gunakan flag--region=COMPUTE_REGION
.
Di node pool yang sudah ada
Anda dapat mengaktifkan streaming Image di node pool yang sudah ada dan memenuhi persyaratan.
Guna memperbarui node pool yang sudah ada untuk menggunakan streaming Image, jalankan perintah berikut:
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--enable-image-streaming
Mengubah setelan streaming Image akan mematuhi ketersediaan pemeliharaan saat diupdate di level cluster, tetapi tidak di level node pool.
Perubahan ini memerlukan pembuatan ulang node, yang dapat menyebabkan gangguan pada workload yang sedang berjalan. Untuk mengetahui detail tentang perubahan spesifik ini, temukan baris yang sesuai dalam tabel perubahan manual yang membuat ulang node menggunakan strategi upgrade node tanpa mematuhi kebijakan pemeliharaan. Untuk mempelajari update node lebih lanjut, lihat Merencanakan gangguan update node.
Memastikan streaming Image diaktifkan di node pool
Periksa apakah streaming Image diaktifkan untuk node pool:
gcloud container node-pools describe POOL_NAME \
--cluster=CLUSTER_NAME \
Setelan ini diaktifkan jika outputnya mirip dengan yang berikut ini:
gcfsConfig:
enabled: true
...
Setelan ini dinonaktifkan jika outputnya mirip dengan yang berikut ini:
gcfsConfig: {}
...
Menjadwalkan workload menggunakan streaming Image
Setelah Anda mengaktifkan streaming Image di cluster, GKE secara otomatis menggunakan streaming Image saat mengambil image container yang memenuhi syarat dari Artifact Registry tanpa memerlukan konfigurasi lebih lanjut.
GKE menambahkan label cloud.google.com/gke-image-streaming: "true"
ke node di node pool dengan streaming Image yang diaktifkan. Di GKE
Standard, jika Anda mengaktifkan atau menonaktifkan streaming Image di node pool
tertentu sehingga cluster Anda memiliki campuran node yang menggunakan streaming Image dan
node yang tidak, Anda dapat menggunakan
pemilih node
dalam deployment untuk mengontrol apakah GKE menjadwalkan
beban kerja Anda di node yang menggunakan streaming Image.
Pada contoh berikut, Anda menjadwalkan Deployment yang menggunakan image container besar di cluster dengan streaming Image diaktifkan. Kemudian, Anda dapat membandingkan performanya dengan image yang diambil tanpa mengaktifkan streaming Image.
Buat cluster baru dengan streaming Image yang diaktifkan:
gcloud container clusters create CLUSTER_NAME \ --zone=COMPUTE_ZONE \ --enable-image-streaming \ --image-type="COS_CONTAINERD"
Dapatkan kredensial untuk cluster:
gcloud container clusters get-credentials CLUSTER_NAME \ --zone=COMPUTE_ZONE
Simpan manifes berikut sebagai
frontend-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: frontend spec: replicas: 1 selector: matchLabels: app: guestbook tier: frontend template: metadata: labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5 env: - name: GET_HOSTS_FROM value: "dns" resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 80
Image container
gb-frontend
berukuran 327 MB.Terapkan manifes ke cluster Anda:
kubectl apply -f frontend-deployment.yaml
Pastikan GKE membuat Deployment:
kubectl get pods -l app=guestbook
Outputnya mirip dengan yang berikut ini:
NAMESPACE NAME READY STATUS RESTARTS AGE default frontend-64bcc69c4b-pgzgm 1/1 Completed 0 3s
Dapatkan log aktivitas Kubernetes untuk melihat aktivitas pengambilan image:
kubectl get events --all-namespaces
Outputnya mirip dengan yang berikut ini:
NAMESPACE LAST SEEN TYPE REASON OBJECT MESSAGE default 11m Normal Pulling pod/frontend-64bcc69c4b-pgzgm Pulling image "us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5" default 11m Normal Pulled pod/frontend-64bcc69c4b-pgzgm Successfully pulled image "us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5" in 1.536908032s default 11m Normal ImageStreaming node/gke-riptide-cluster-default-pool-f1552ec4-0pjv Image us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5 is backed by image streaming. ...
Dalam output ini:
- Peristiwa
Pulled
menunjukkan waktu yang dibutuhkan bagi streaming Image untuk mengambil image. Peristiwa
ImageStreaming
menunjukkan bahwa node menggunakan streaming Image untuk menyajikan image container.
- Peristiwa
Membandingkan performa dengan pengambilan image standar
Pada contoh opsional ini, Anda membuat cluster baru dengan streaming Image
yang dinonaktifkan dan men-deploy Deployment frontend
untuk membandingkan performa dengan
streaming Image.
Buat cluster baru dengan streaming Image yang dinonaktifkan:
gcloud container clusters create CLUSTER2_NAME\ --zone=COMPUTE_ZONE \ --image-type="COS_CONTAINERD"
Dapatkan kredensial untuk cluster:
gcloud container clusters get-credentials CLUSTER2_NAME \ --zone=COMPUTE_ZONE
Deploy Deployment
frontend
dari contoh sebelumnya:kubectl apply -f frontend-deployment.yaml
Dapatkan log aktivitas Kubernetes:
kubectl get events --all-namespaces
Outputnya mirip dengan yang berikut ini:
NAMESPACE LAST SEEN TYPE REASON OBJECT MESSAGE default 87s Normal Pulled pod/frontend-64bcc69c4b-qwmfp Successfully pulled image "us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5" in 23.929723476s
Perhatikan waktu yang dibutuhkan GKE untuk mengambil keseluruhan image. Pada contoh output ini, GKE memerlukan waktu hampir 24 detik. Dengan streaming Image yang diaktifkan, GKE hanya perlu waktu 1,5 detik untuk mengambil data image yang diperlukan oleh workload untuk memulai.
Pembersihan
Agar tidak ditagih, hapus cluster yang Anda buat di contoh sebelumnya:
gcloud container clusters delete CLUSTER_NAME CLUSTER2_NAME
Menonaktifkan streaming Image
Jika menggunakan GKE Autopilot, Anda tidak dapat menonaktifkan streaming Image di masing-masing cluster. Anda dapat menonaktifkan Container File System API yang menonaktifkan streaming Image untuk seluruh project.
Jika menggunakan cluster GKE Standard, Anda dapat menonaktifkan streaming Image di masing-masing cluster atau node pool tertentu, seperti yang dijelaskan di bagian berikut.
Menonaktifkan streaming Image di cluster GKE Standard
Anda dapat menonaktifkan streaming Image di cluster GKE Standard yang sudah ada menggunakan gcloud CLI atau konsol Google Cloud.
gcloud
Untuk menonaktifkan streaming Image di cluster yang sudah ada, jalankan perintah berikut:
gcloud container clusters update CLUSTER_NAME \
--no-enable-image-streaming
Konsol
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik nama cluster yang ingin diubah.
Di halaman Cluster, pada bagian Fitur, klik edit di samping streaming Image.
Di kotak dialog Edit streaming Image, hapus kotak centang Aktifkan streaming Image.
Klik Simpan perubahan.
Mengubah setelan streaming Image akan mematuhi ketersediaan pemeliharaan saat diupdate di level cluster, tetapi tidak di level node pool.
Perubahan ini memerlukan pembuatan ulang node, yang dapat menyebabkan gangguan pada workload yang sedang berjalan. Untuk mengetahui detail tentang perubahan khusus ini, temukan baris yang sesuai dalam tabel perubahan manual yang membuat ulang node menggunakan strategi upgrade node dan mematuhi kebijakan pemeliharaan. Untuk mempelajari update node lebih lanjut, lihat Merencanakan gangguan update node.
Di node pool baru
Untuk menonaktifkan streaming Image saat membuat node pool baru, tentukan
flag --no-enable-image-streaming
, seperti dalam perintah berikut:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=COMPUTE_ZONE \
--no-enable-image-streaming
Di node pool yang sudah ada
Untuk menonaktifkan streaming Image di node pool yang sudah ada, jalankan perintah berikut:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--no-enable-image-streaming
Mengubah setelan streaming Image akan mematuhi ketersediaan pemeliharaan saat diupdate di level cluster, tetapi tidak di level node pool.
Perubahan ini memerlukan pembuatan ulang node, yang dapat menyebabkan gangguan pada workload yang sedang berjalan. Untuk mengetahui detail tentang perubahan spesifik ini, temukan baris yang sesuai dalam tabel perubahan manual yang membuat ulang node menggunakan strategi upgrade node tanpa mematuhi kebijakan pemeliharaan. Untuk mempelajari update node lebih lanjut, lihat Merencanakan gangguan update node.
Pencadangan memori untuk streaming Image
GKE mencadangkan resource memori untuk streaming Image selain memori yang dicadangkan untuk menjalankan komponen sistem node. GKE tidak mencadangkan resource CPU tambahan untuk streaming Image. Di cluster GKE Standard, pencadangan ini mengubah resource memori yang tersedia untuk Anda minta di Pod. Di Autopilot GKE, GKE mengelola alokasi sistem, sehingga penjadwalan workload Anda tidak terpengaruh.
Untuk mengetahui detail pencadangan memori yang dibuat GKE untuk komponen node, lihat arsitektur cluster Standard.
Di node yang menggunakan streaming Image, GKE membuat pencadangan memori tambahan berikut untuk reservasi baru:
- Tidak ada memori tambahan untuk mesin dengan memori kurang dari 1 GiB
- 1% dari 4 GiB pertama memori
- 0,8% dari 4 GiB berikutnya memori (hingga 8 GiB)
- 0,4% dari 8 GiB berikutnya memori (hingga 16 GiB)
- 0,24% dari 112 GiB berikutnya memori (hingga 128 GiB)
- 0,08% dari memori apa pun di atas 128 GiB
Pemecahan masalah
GKE tidak menggunakan sistem file streaming Image
Jika log aktivitas GKE Anda tidak menampilkan aktivitas streaming Image,
image Anda tidak didukung oleh sistem file jarak jauh. Jika sebelumnya GKE
mengambil image di node, ini adalah perilaku yang wajar karena GKE
menggunakan cache lokal image untuk pengambilan berikutnya, bukan menggunakan streaming Image.
Anda dapat memastikannya dengan mencari Container image IMAGE_NAME already present on machine
di kolom Message
untuk peristiwa Pod Pulled
.
Jika Anda tidak melihat aktivitas streaming Image saat pengambilan image pertama di
node, pastikan Anda memenuhi persyaratan untuk streaming Image. Jika
memenuhi persyaratan, Anda dapat mendiagnosis masalah dengan memeriksa log
Layanan streaming Image (bernama gcfsd
):
Buka halaman Logs Explorer di konsol Google Cloud:
Di kolom Kueri, tentukan kueri berikut:
logName="projects/PROJECT_ID/logs/gcfsd" resource.labels.cluster_name="CLUSTER_NAME"
Ganti kode berikut:
PROJECT_ID
: Nama project Anda.CLUSTER_NAME
: Nama cluster Anda.
Klik Jalankan kueri.
Anda juga dapat memeriksa log gcfsd
menggunakan Logs Explorer:
Buka Logs Explorer di konsol Google Cloud:
Di kolom Kueri, tentukan kueri berikut:
logName="projects/PROJECT_ID/logs/gcfsd"
Ganti
PROJECT_ID
dengan ID project Google Cloud Anda.
PermissionDenied
Jika log gcfsd
menampilkan pesan error yang mirip dengan yang berikut ini, node
tidak memiliki cakupan API yang benar. GKE mengambil image container
untuk workload tanpa menggunakan streaming Image.
level=fatal msg="Failed to create a Container File System client: rpc error:
code = PermissionDenied desc = failed to probe endpoint: rpc error: code = PermissionDenied
desc = Request had insufficient authentication scopes."
Anda dapat memperbaikinya dengan memberikan cakupan yang tepat ke node untuk memungkinkannya menggunakan
streaming Image. Tambahkan cakupan devstorage.read_only
ke cluster atau
node pool, mirip dengan perintah berikut:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=COMPUTE_ZONE \
--image-type="COS_CONTAINERD" \
--enable-image-streaming \
--scope="https://www.googleapis.com/auth/devstorage.read_only"
FailedPrecondition
Jika Anda melihat pesan error dengan code = FailedPrecondition
, berarti image
tidak diimpor ke sistem file jarak jauh streaming Image.
Anda mungkin melihat error ini jika mencoba menggunakan streaming Image dengan node pool yang sudah ada. Jika node di node pool sudah memiliki image container di disk, GKE menggunakan image lokal, bukan menggunakan streaming Image untuk mendapatkan image tersebut.
Untuk memperbaikinya, coba langkah berikut:
- Tunggu beberapa menit dan coba deploy lagi workload Anda.
- Tambahkan node atau node pool baru dan jadwalkan workload di node tersebut.
InvalidArgument
Jika Anda melihat pesan error dengan code=InvalidArgument
, image container
yang digunakan workload Anda tidak memenuhi syarat untuk streaming Image. Pastikan image
memenuhi persyaratan. Jika image Anda tidak ada di Artifact Registry,
coba migrasikan ke Artifact Registry.
backend.FileContent failed
Error berikut mungkin muncul saat membaca file container dengan streaming Image yang diaktifkan:
level=error msg="backend.FileContent failed" error="rpc error: code = ResourceExhausted desc = Quota exceeded for quota metric 'Content requests per project per region' and limit 'Content requests per project per region per minute per region' of service 'containerfilesystem.googleapis.com' for consumer 'project_number:PROJECT_NUMBER'." layer_id="sha256:1234567890" module=gcfs_backend offset=0 path=etc/passwd size=4096
Error ini menunjukkan bahwa project telah melampaui kuota yang diperlukan untuk membaca file dari layanan sistem file container jarak jauh. Untuk mengatasi masalah ini, tingkatkan kuota berikut:
- Permintaan konten per project per region per menit per region
- Permintaan konten per project per region
GKE mendownload image tanpa melakukan streaming data
Image container yang menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) hanya memenuhi syarat untuk streaming Image di GKE versi 1.25.3-gke.1000 atau yang lebih baru. Image container dengan lapisan duplikat tidak memenuhi syarat untuk streaming Image. Lihat Batasan untuk mengetahui informasi selengkapnya.
Memeriksa lapisan kosong atau lapisan duplikat
Untuk memeriksa apakah ada lapisan kosong atau lapisan duplikat pada image container, jalankan perintah berikut:
docker inspect IMAGE_NAME
Ganti IMAGE_NAME
dengan nama image container.
Di output perintah, periksa entri pada "Layers"
.
Jika salah satu entri sama persis dengan output "sha256"
berikut,
image container memiliki lapisan kosong dan tidak memenuhi syarat untuk streaming Image.
"Layers": [ ... "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4", ... ]
Jika ada entri duplikat seperti dalam contoh berikut, image container memiliki lapisan duplikat dan tidak memenuhi syarat untuk streaming Image.
"Layers": [
"sha256:28699c71935fe3ffa56533db44ad93e5a30322639f7be70d5d614e06a1ae6d9b",
...
"sha256:28699c71935fe3ffa56533db44ad93e5a30322639f7be70d5d614e06a1ae6d9b",
...
]
Perintah mv
dan panggilan sistem renameat2
gagal pada file symlink
Untuk node GKE yang menjalankan versi 1.25 dan yang lebih baru, saat
streaming Image diaktifkan, perintah mv
dan panggilan sistem renameat2
mungkin gagal pada file symlink di image container dengan pesan error "Tidak ada
perangkat atau alamat tersebut". Masalah ini disebabkan oleh regresi di kernel Linux terbaru.
Panggilan sistem ini tidak umum, sehingga sebagian besar image tidak terpengaruh oleh masalah ini. Masalah ini biasanya terjadi pada tahap inisialisasi container saat aplikasi sedang disiapkan untuk menjalankan dan memindahkan file. Anda tidak dapat menguji image secara lokal, sehingga GKE merekomendasikan penggunaan streaming Image di lingkungan pengujian untuk menemukan masalah sebelum image digunakan dalam produksi.
Perbaikan tersedia di versi patch GKE berikut:
- 1.25: 1.25.14-gke.1351000 dan yang lebih baru
- 1.26: 1.26.9-gke.1345000 dan yang lebih baru
- 1.27: 1.27.6-gke.100 dan yang lebih baru
- 1.28: 1.28.1-gke.1157000 dan yang lebih baru
Atau, untuk mengatasi masalah ini di workload yang terpengaruh, Anda dapat mencoba mengganti
kode yang mengarah ke panggilan sistem renameat2
. Jika tidak dapat mengubah kode, Anda
harus menonaktifkan streaming Image di node pool untuk mengatasi
masalah.