Halaman ini membantu Anda menyelesaikan masalah terkait proses pengambilan image di Google Kubernetes Engine (GKE). Jika Anda menggunakan Image streaming, lihat Memecahkan masalah Image streaming untuk mendapatkan saran. Halaman ini berfokus pada pengambilan gambar standar.
Halaman ini ditujukan untuk Developer aplikasi yang ingin memastikan bahwa aplikasi mereka berhasil di-deploy dan untuk admin dan operator Platform yang ingin memahami akar penyebab kegagalan pull image dan memverifikasi konfigurasi platform. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud , lihat Peran dan tugas pengguna GKE Enterprise umum.
Proses pengambilan image adalah cara Kubernetes, dan karenanya GKE, mengambil image container dari registry. Jika pull gambar gagal, Anda mungkin melihat kelambatan di aplikasi, atau aplikasi tidak berfungsi sama sekali.
Untuk menentukan apakah pengambilan image adalah penyebab aplikasi Anda tidak berfungsi, halaman ini akan membantu Anda mendiagnosis kegagalan pengambilan image dengan menemukan dan memahami pesan error yang relevan. Kemudian, Anda akan mempelajari cara mengatasi penyebab umum kegagalan pull gambar berikut:
- Setelan autentikasi: cluster Anda tidak memiliki izin yang diperlukan untuk mengakses registry image container.
- Konektivitas jaringan: cluster Anda tidak dapat terhubung ke registry karena masalah DNS, aturan firewall, atau kurangnya akses internet di cluster yang menggunakan isolasi jaringan.
- Gambar tidak ditemukan di registry: nama atau tag gambar yang ditentukan tidak benar, gambar telah dihapus, atau registry tidak tersedia.
- Batasan performa: ukuran image yang besar, I/O disk yang lambat, atau kemacetan jaringan dapat menyebabkan penarikan lambat atau waktu tunggu habis.
- Arsitektur image tidak kompatibel: image di-build untuk arsitektur CPU yang berbeda dengan kumpulan node GKE Anda.
- Versi skema yang tidak kompatibel: Anda mungkin menggunakan containerd 2.0 atau yang lebih baru dengan skema Docker v1, yang tidak didukung.
Jika Anda telah melihat pesan peristiwa tertentu, telusuri pesan tersebut di halaman ini dan ikuti langkah-langkah pemecahan masalah yang tercantum. Jika Anda belum melihat pesan, ikuti bagian berikut secara berurutan. Jika masalah berlanjut, hubungi Layanan Pelanggan Cloud.
Memahami penarikan image
Sebelum Anda mulai memecahkan masalah, sebaiknya pahami lebih lanjut siklus proses gambar dan tempat Anda dapat menghosting gambar.
Siklus proses gambar
Saat Anda membuat Pod, kubelet menerima definisi Pod, yang mencakup spesifikasi untuk image. Kubelet memerlukan image ini agar dapat menjalankan container berdasarkan image. Sebelum mengambil image, kubelet akan memeriksa runtime penampung untuk melihat apakah image ada. Kubelet juga memeriksa kebijakan pull image Pod. Jika image tidak ada dalam cache runtime container, atau jika kebijakan pull image mewajibkannya, kubelet akan mengarahkan runtime container (containerd) untuk menarik image yang ditentukan dari registry. Pull image yang gagal mencegah container di Pod dimulai.
Setelah pull image berhasil, runtime container akan mengekstrak image untuk membuat sistem file dasar hanya baca untuk container. Runtime container menyimpan image ini dan image tetap ada selama container yang berjalan mereferensikannya. Jika tidak ada container yang berjalan yang mereferensikan image, image tersebut akan memenuhi syarat untuk pengumpulan sampah dan kubelet pada akhirnya akan menghapusnya.
Opsi hosting gambar
Sebaiknya gunakan salah satu opsi berikut untuk menghosting gambar:
Artifact Registry: Artifact Registry adalah pengelola paket yang dikelola sepenuhnya oleh Google. Artifact Registry terintegrasi erat dengan layanan Google Cloud lainnya dan menawarkan kontrol akses yang terperinci. Untuk mempelajari lebih lanjut, lihat Menangani image container dalam dokumentasi Artifact Registry.
Registry yang dihosting sendiri: registry yang dihosting sendiri menawarkan kontrol yang lebih besar, tetapi Anda juga harus mengelola registry tersebut. Pertimbangkan opsi ini jika Anda memiliki kebutuhan kepatuhan atau keamanan tertentu yang tidak dapat dipenuhi Artifact Registry.
Mendiagnosis kegagalan pull image
Untuk mendiagnosis kegagalan pull image, lakukan investigasi yang dijelaskan di bagian berikut:
- Melihat status dan peristiwa Pod.
- Memahami arti status.
- Gunakan pesan peristiwa untuk menemukan penyebab kegagalan pull gambar.
- Melihat log Logs Explorer.
Melihat status dan peristiwa Pod
Untuk membantu Anda memverifikasi bahwa pengambilan image gagal, GKE mencatat status berikut untuk Pod:
ImagePullBackOff
ErrImagePull
ImageInspectError
InvalidImageName
RegistryUnavailable
SignatureValidationFailed
ImagePullBackOff
dan ErrImagePull
adalah status yang paling umum.
Selain status ini, peristiwa Kubernetes membantu Anda menemukan penyebab kegagalan pengambilan image.
Untuk mengonfirmasi apakah pengambilan image Anda gagal, periksa pesan status, lalu baca pesan peristiwa dengan memilih salah satu opsi berikut:
Konsol
Selesaikan langkah-langkah berikut:
Di konsol Google Cloud, buka halaman Workload.
Pilih beban kerja yang ingin Anda selidiki. Jika Anda tidak yakin workload mana yang perlu diperiksa, tinjau kolom Status. Kolom ini menunjukkan workload mana yang mengalami masalah.
Di halaman Details untuk beban kerja, temukan bagian Managed pods, lalu klik nama Pod dengan status yang menunjukkan kegagalan pull image.
Di halaman Details untuk Pod, klik tab Events.
Tinjau informasi dalam tabel. Kolom Pesan mencantumkan peristiwa Kubernetes, yang menampilkan informasi selengkapnya tentang pengambilan image yang gagal. Kolom Alasan mencantumkan status Pod.
kubectl
Selesaikan langkah-langkah berikut:
Lihat status Pod Anda:
kubectl get pods -n NAMESPACE
Ganti
NAMESPACE
dengan namespace tempat Pod Anda berjalan.Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE POD_NAME_1 2/2 Running 0 7d5h POD_NAME_2 0/1 ErrImagePull 0 7d5h
Kolom
Status
menunjukkan Pod mana yang mengalami kegagalan pull gambar.Lihat peristiwa untuk Pod dengan kegagalan pengambilan image:
kubectl describe POD_NAME -n NAMESPACE
Ganti
POD_NAME
dengan nama Pod yang Anda identifikasi di langkah sebelumnya.Bagian
Events
menampilkan informasi selengkapnya tentang apa yang terjadi selama pull gambar yang gagal.Outputnya mirip dengan hal berikut ini:
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning Failed 5m (x4 over 7m) kubelet, NODE Failed to pull image "IMAGE_ADDRESS": rpc error: code = Unknown desc = Error response from daemon: repository IMAGE_ADDRESS not found Warning Failed 5m (x4 over 7m) kubelet, NODE Error: ErrImagePull Normal BackOff 5m (x6 over 7m) kubelet, NODE Back-off pulling image "IMAGE_ADDRESS" Warning Failed 2m (x20 over 7m) kubelet, NODE Error: ImagePullBackOff
Dalam output ini,
IMAGE_ADDRESS
adalah alamat lengkap gambar. Contoh,us-west1-docker.pkg.dev/my-project/my-repo/test:staging
.
Memahami arti status
Untuk lebih memahami arti berbagai status, lihat deskripsi berikut:
ImagePullBackOff
: kubelet gagal menarik image, tetapi akan terus mencoba lagi dengan penundaan yang meningkat (atau backoff) hingga lima menit.ErrImagePull
: error umum yang tidak dapat dipulihkan selama proses pull image.ImageInspectError
: runtime container mengalami masalah saat mencoba memeriksa image container.InvalidImageName
: nama image container yang ditentukan dalam definisi Pod Anda tidak valid.RegistryUnavailable
: registry tidak dapat diakses. Hal ini biasanya merupakan masalah konektivitas jaringan.SignatureValidationFailed
: tanda tangan digital image penampung tidak dapat diverifikasi.
Menggunakan pesan peristiwa untuk menemukan penyebab kegagalan pengambilan gambar
Tabel berikut mencantumkan pesan peristiwa yang terkait dengan kegagalan pengambilan gambar dan langkah-langkah pemecahan masalah yang harus Anda ikuti jika menemukan salah satu pesan ini.
Pesan yang terkait dengan kegagalan pengambilan gambar sering kali memiliki awalan berikut:
Failed to pull image "IMAGE_ADDRESS": rpc error: code = CODE = failed to pull and unpack image "IMAGE_ADDRESS": failed to resolve reference "IMAGE_ADDRESS":
Pesan ini menyertakan nilai-nilai berikut:
IMAGE_ADDRESS
: alamat lengkap gambar. Contoh,us-west1-docker.pkg.dev/my-project/my-repo/test:staging
.CODE
: kode error yang terkait dengan pesan log. Misalnya,NotFound
atauUnknown
.
Beberapa penyebab kegagalan pengambilan gambar tidak memiliki pesan peristiwa terkait. Jika Anda tidak melihat pesan peristiwa apa pun dalam tabel berikut, tetapi masih mengalami masalah pengambilan gambar, sebaiknya lanjutkan membaca halaman ini.
Pesan peristiwa | Pemecahan masalah mendetail |
---|---|
Autentikasi | |
|
|
|
|
Konektivitas jaringan | |
|
|
|
|
|
|
Gambar tidak ditemukan | |
|
|
Waktu tunggu gambar habis | |
|
|
Skema tidak kompatibel | |
|
Melihat log Logs Explorer
Untuk memeriksa peristiwa pengambilan image historis atau mengaitkan kegagalan pengambilan image dengan aktivitas komponen lainnya, lihat log dengan Logs Explorer:
Di Konsol Google Cloud, buka halaman Logs Explorer.
Di panel kueri, masukkan kueri berikut:
log_id("events") resource.type="k8s_pod" resource.labels.cluster_name="CLUSTER_NAME" jsonPayload.message=~"Failed to pull image"
Ganti
CLUSTER_NAME
dengan nama cluster tempat Pod dengan error pull image berjalan.Klik Jalankan kueri dan tinjau hasilnya.
Menyelidiki setelan autentikasi
Bagian berikut membantu Anda memverifikasi bahwa lingkungan GKE Anda memiliki setelan autentikasi yang tepat untuk mengambil gambar dari repositori.
Untuk memeriksa apakah Anda memiliki masalah autentikasi yang menyebabkan masalah pengambilan gambar, lakukan investigasi yang dijelaskan di bagian berikut:
- Verifikasi akses ke gambar.
- Verifikasi konfigurasi imagePullSecret dan spesifikasi Deployment.
- Memverifikasi cakupan akses node untuk repositori Artifact Registry pribadi
- Verifikasi setelan Kontrol Layanan VPC untuk mengakses Artifact Registry.
Memverifikasi akses ke gambar
Jika Anda mengalami error pengambilan image 403 Forbidden
, pastikan komponen
yang diperlukan dapat mengakses image penampung.
Metode untuk memverifikasi dan menerapkan peran yang diperlukan guna memberikan akses yang diperlukan berbeda-beda, bergantung pada jenis repositori yang menyimpan gambar Anda. Untuk memverifikasi dan memberikan akses, pilih salah satu opsi berikut:
Artifact Registry
Jika Anda menggunakan imagePullSecret, akun layanan yang ditautkan dengan Secret memerlukan izin baca ke repositori. Jika tidak, akun layanan node pool memerlukan izin.
- Ikuti petunjuk dalam dokumentasi IAM untuk melihat peran yang ditetapkan ke akun layanan Anda.
Jika akun layanan Anda tidak memiliki peran IAM Artifact Registry Reader (
roles/artifactregistry.reader
), berikan peran tersebut:gcloud artifacts repositories add-iam-policy-binding REPOSITORY_NAMEREPOSITORY_LOCATION \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role="roles/artifactregistry.reader"
Ganti kode berikut:
REPOSITORY_NAME
: nama repositori Artifact Registry Anda.REPOSITORY_LOCATION
: Region repositori Artifact Registry Anda.SERVICE_ACCOUNT_EMAIL
: alamat email akun layanan yang diperlukan. Jika Anda tidak mengetahui alamatnya, cantumkan semua alamat email akun layanan di project Anda menggunakan perintahgcloud iam service-accounts list
.
Container Registry
Jika Anda menggunakan imagePullSecret, akun layanan yang ditautkan dengan Secret memerlukan izin baca ke repositori. Jika tidak, akun layanan node pool memerlukan izin.
- Ikuti petunjuk dalam dokumentasi IAM untuk melihat peran yang ditetapkan ke akun layanan Anda.
Jika akun layanan Anda tidak memiliki peran IAM Storage Object Viewer (
roles/storage.objectViewer
), berikan peran tersebut agar akun layanan dapat membaca dari bucket:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role=roles/storage.objectViewer
Ganti kode berikut:
SERVICE_ACCOUNT_EMAIL
: email akun layanan yang diperlukan. Anda dapat mencantumkan semua akun layanan dalam project menggunakan perintahgcloud iam service-accounts list
.BUCKET_NAME
: nama bucket Cloud Storage yang berisi image Anda. Anda dapat mencantumkan semua bucket dalam project menggunakan perintahgcloud storage ls
.
Jika administrator registry Anda menyiapkan repositori gcr.io
di Artifact Registry untuk menyimpan image bagi domain gcr.io
, dan bukan di Container Registry, Anda harus memberikan akses baca ke Artifact Registry, bukan Container Registry.
Registry yang dihosting sendiri
Bergantung pada cara mengonfigurasi registry yang dihosting sendiri, Anda mungkin memerlukan kunci, sertifikat, atau keduanya untuk mengakses image.
Jika Anda menggunakan kunci, gunakan imagePullSecret. imagePullSecret adalah cara yang aman untuk memberikan kredensial yang diperlukan cluster untuk mengakses registry yang dihosting sendiri. Untuk contoh yang menunjukkan cara mengonfigurasi imagePullSecret, lihat Mengambil Image dari Registry Pribadi dalam dokumentasi Kubernetes.
Untuk mengamankan koneksi HTTPS ke registry, Anda mungkin juga memerlukan sertifikat, yang memverifikasi integritas koneksi ke server jarak jauh. Sebaiknya gunakan Secret Manager untuk mengelola Certificate Authority yang ditandatangani sendiri. Untuk mempelajari lebih lanjut, lihat Mengakses registry pribadi dengan sertifikat CA pribadi.
Memverifikasi konfigurasi imagePullSecret dan spesifikasi Deployment
Jika Anda menggunakan imagePullSecret, pastikan Anda membuat Secret yang menyimpan kredensial autentikasi untuk mengambil image dan semua Deployment menentukan Secret yang Anda tentukan. Untuk informasi selengkapnya, lihat Menentukan imagePullSecrets di Pod dalam dokumentasi Kubernetes.
Memverifikasi cakupan akses node untuk repositori Artifact Registry pribadi
Jika Anda menyimpan image container di repositori Artifact Registry pribadi, node Anda mungkin tidak memiliki cakupan akses yang benar. Jika hal ini terjadi, Anda mungkin
melihat error pull image 401 Unauthorized
.
Untuk memverifikasi cakupan akses dan memberikannya jika diperlukan, ikuti langkah-langkah berikut:
Identifikasi node yang menjalankan Pod:
kubectl describe pod POD_NAME | grep "Node:"
Ganti
POD_NAME
dengan nama Pod yang mengalami kegagalan pull image.Pastikan node yang Anda identifikasi di langkah sebelumnya memiliki cakupan penyimpanan yang benar:
gcloud compute instances describe NODE_NAME \ --zone="COMPUTE_ZONE \ --format="flattened(serviceAccounts[].scopes)"
Ganti kode berikut:
NODE_NAME
: nama node yang Anda identifikasi di langkah sebelumnya.COMPUTE_ZONE
: Zona Compute Engine tempat node berada.
Output harus berisi setidaknya salah satu cakupan akses berikut:
serviceAccounts[0].scopes[0]: https://www.googleapis.com/auth/devstorage.read_only
serviceAccounts[0].scopes[0]: https://www.googleapis.com/auth/cloud-platform
Jika node tidak berisi salah satu cakupan ini, pengambilan gambar akan gagal.
Buat ulang node pool tempat node tersebut berada dengan cakupan yang memadai. Karena Anda tidak dapat mengubah node yang sudah ada, Anda harus membuat ulang node dengan cakupan yang benar.
Sebaiknya buat node pool dengan cakupan
gke-default
. Cakupan ini memberikan akses ke cakupan berikut:https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/monitoring
https://www.googleapis.com/auth/service.management.readonly
https://www.googleapis.com/auth/servicecontrol
https://www.googleapis.com/auth/trace.append
Jika cakupan
gke-default
tidak sesuai, berikan cakupandevstorage.read_only
ke kumpulan node, yang memungkinkan akses hanya untuk membaca data.gke-default
Buat node pool dengan cakupan
gke-default
:gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --zone=COMPUTE_ZONE \ --scopes="gke-default"
Ganti kode berikut:
NODE_POOL_NAME
: nama node pool baru.CLUSTER_NAME
: nama cluster yang ada.COMPUTE_ZONE
: zona Compute Engine yang menjadi bagian dari node pool baru.
devstorage.read_only
Buat node pool dengan cakupan
devstorage.read_only
:gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --zone=COMPUTE_ZONE \ --scopes="https://www.googleapis.com/auth/devstorage.read_only"
Ganti kode berikut:
NODE_POOL_NAME
: nama node pool baru.CLUSTER_NAME
: nama cluster yang ada.COMPUTE_ZONE
: zona Compute Engine yang menjadi tempat node pool baru.
Memverifikasi setelan Kontrol Layanan VPC untuk mengakses Artifact Registry
Jika Anda menggunakan Kontrol Layanan VPC, pastikan perimeter layanan mengizinkan akses ke Artifact Registry. Untuk mempelajari selengkapnya, lihat Melindungi repositori di perimeter layanan dalam dokumentasi Artifact Registry.
Menyelidiki konektivitas jaringan
Selama pengambilan gambar, konektivitas jaringan dapat mencegah proses selesai.
Untuk memeriksa apakah masalah konektivitas jaringan menyebabkan masalah pengambilan gambar, lakukan investigasi yang dijelaskan di bagian berikut:
- Selidiki resolusi DNS.
- Selidiki konfigurasi firewall Anda.
- Selidiki konektivitas internet endpoint registry eksternal.
- Selidiki apakah waktu koneksi ke Google API habis.
Menyelidiki resolusi DNS
Jika Anda melihat error pull image server misbehaving
, resolusi DNS mungkin merupakan
penyebab kegagalan pull image.
Untuk menyelidiki masalah terkait resolusi DNS, coba solusi berikut:
- Memecahkan masalah server metadata. Server metadata node me-resolve semua kueri DNS. Masalah apa pun yang melibatkan server ini dapat mengganggu resolusi nama, mencegah koneksi ke repositori, dan menyebabkan pengambilan gambar gagal.
- Jika Anda menggunakan Cloud DNS untuk resolusi DNS, pastikan zona pribadi, zona penerusan, zona peering, dan kebijakan respons yang dikelola Cloud DNS Anda dikonfigurasi dengan benar. Konfigurasi yang salah di area ini dapat mengganggu resolusi DNS. Untuk mempelajari Cloud DNS lebih lanjut, lihat Menggunakan Cloud DNS untuk GKE. Untuk mendapatkan saran tentang cara memecahkan masalah Cloud DNS di GKE, lihat Memecahkan Masalah Cloud DNS di GKE.
- Jika Anda menggunakan kube-dns untuk resolusi DNS, pastikan kube-dns berfungsi dengan benar. Untuk mendapatkan saran tentang cara memecahkan masalah kube-dns, lihat Memecahkan masalah kube-dns di GKE.
- Jika node cluster tidak memiliki alamat IP eksternal (hal ini umum terjadi jika Anda menggunakan isolasi jaringan), aktifkan Akses Google Pribadi di subjaringan yang digunakan oleh cluster dan pastikan Anda memenuhi persyaratan jaringan. Jika Anda menggunakan Cloud NAT, Google Cloud akan otomatis mengaktifkan Akses Google Pribadi.
Menyelidiki konfigurasi firewall Anda
Jika masalah pada firewall menyebabkan kegagalan pengambilan image, Anda mungkin melihat pesan error berikut:
Failed to start Download and install k8s binaries and configurations
Mendiagnosis masalah pada firewall
Jika Anda menggunakan cluster Standar dan ingin mengonfirmasi apakah masalah pada firewall menyebabkan masalah pada pengambilan image, ikuti langkah-langkah berikut:
Gunakan SSH untuk terhubung ke node yang mengalami masalah:
gcloud compute ssh NODE_NAME --zone=ZONE_NAME
Ganti kode berikut:
NODE_NAME
: nama node.ZONE_NAME
: Zona Compute Engine tempat node dibuat.
Kirim log terbaru untuk Layanan
kube-node-installation.service
dankube-node-configuration.service
ke file teks bernamakube-node-installation_status.txt
dankube-node-configuration_status.txt
:systemctl status kube-node-installation.service > kube-node-installation_status.txt systemctl status kube-node-configuration.service > kube-node-configuration_status.txt
Jika log ini tidak menyertakan informasi saat pengambilan gambar Anda gagal, buat salinan lengkap log:
sudo journalctl -u kube-node-installation.service > kube-node-installation_logs.txt sudo journalctl -u kube-node-configuration.service > kube-node-configuration_logs.txt
Tinjau konten file
kube-node-installation_status.txt
dankube-node-configuration_status.txt
. Jika Anda melihati/o timeout
dalam output, masalahnya mungkin ada pada firewall Anda.
Menyelesaikan masalah terkait konfigurasi firewall
Untuk mengatasi masalah pada firewall, coba solusi berikut:
Identifikasi dan selesaikan aturan firewall yang memblokir traffic jaringan. Misalnya, Anda mungkin memiliki aturan yang memblokir traffic ke registry yang menyimpan gambar Anda.
Mengakses Log Aliran VPC:
Di Konsol Google Cloud, buka halaman Logs Explorer.
Di panel kueri, masukkan kueri berikut:
resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/[compute.googleapis.com%2Fvpc_flows](http://compute.googleapis.com%2Fvpc_flows)" resource.labels.subnetwork_name="SUBNET_NAME",
Ganti kode berikut:
PROJECT_ID
: ID project Google Cloud Anda.SUBNET_NAME
: nama subnetwork Anda.
Untuk mempelajari lebih lanjut, lihat Mengakses log aliran menggunakan kueri dalam dokumentasi VPC.
Jika Anda menemukan aturan firewall yang memblokir traffic yang diperlukan, perbarui aturan tersebut.
Jika node cluster tidak memiliki alamat IP eksternal (hal ini umum terjadi jika Anda menggunakan isolasi jaringan), aktifkan Akses Google Pribadi di subjaringan yang digunakan oleh cluster dan pastikan Anda memenuhi persyaratan jaringan. Jika Anda menggunakan Cloud NAT, Google Cloud akan otomatis mengaktifkan Akses Google Pribadi.
Menyelidiki konektivitas internet endpoint registry eksternal
Jika konfigurasi jaringan Anda mengarahkan traffic melalui endpoint registry eksternal, endpoint tersebut mungkin tidak memiliki konektivitas internet. Jika endpoint tidak memiliki akses, pengambilan gambar mungkin gagal dan Anda akan melihat error pengambilan gambar i/o timeout
.
Untuk memeriksa konektivitas jaringan dari endpoint registry eksternal ke
registry, gunakan ping
atau traceroute
:
ping REGISTRY_ENDPOINT
Atau
traceroute REGISTRY_ENDPOINT
Ganti REGISTRY_ENDPOINT
dengan endpoint registry.
Nilai ini dapat berupa nama host atau alamat IP.
Jika Anda menemukan error pada konektivitas, tinjau rute VPC:
Di Konsol Google Cloud, buka Routes.
Tinjau kolom Prioritas dan pastikan rute dengan prioritas tertinggi mengarah ke sumber yang memiliki akses ke registry. Rute dengan nilai yang lebih rendah diutamakan.
Selidiki apakah waktu koneksi ke Google API habis
Jika menggunakan
isolasi jaringan,
Anda mungkin mengalami error saat waktu tunggu koneksi ke API dan layanan Google
habis, yang menyebabkan error pull image i/o timeout
.
Error ini terjadi karena node Anda tidak dapat menjangkau salah satu API berikut saat mencoba mengambil image dari registry:
containerregistry.googleapis.com
artifactregistry.googleapis.com
Untuk memastikan Anda dapat terhubung ke API yang diperlukan, coba solusi berikut:
- Aktifkan Akses Google Pribadi. Node tanpa alamat IP eksternal memerlukan Akses Google Pribadi untuk menjangkau alamat IP eksternal Google API dan layanan Google.
- Gunakan domain yang didukung.
Tinjau kebijakan firewall Anda:
Di konsol Google Cloud, buka Kebijakan firewall.
Verifikasi apakah Anda memiliki aturan yang memblokir traffic TCP keluar di port
443
hingga199.36.153.4/30
,199.36.153.8/30
, atau rentang alamat IP yang digunakan oleh domain yang Anda pilih untuk Google API dan layanan. Rentang alamat IP199.36.153.4/30
dan199.36.153.8/30
masing-masing digunakan untuk Akses Google Pribadi dan Akses Google yang Dibatasi. Traffic TCP di port443
ke rentang ini ditujukan untuk mengakses Google API dan layanan Google.Jika Anda menemukan salah satu aturan ini, buat aturan firewall keluar untuk mengizinkan traffic tersebut.
Jika Anda menggunakan Artifact Registry, pastikan lingkungan Anda memenuhi persyaratan untuk menggunakan Artifact Registry dengan isolasi jaringan.
Pastikan alamat IP virtual (VIP) (
199.36.153.4/30
atau199.36.153.8/30
) memiliki rute VPC yang dikonfigurasi:Di konsol Google Cloud, buka jaringan VPC.
Di kolom Nama, klik default.
Di halaman detail jaringan VPC, klik tab Routes.
Tinjau tabel rute.
Jika jaringan VPC Anda berisi rute default (tujuan
0.0.0.0/0
atau::0/0
) dan next hop untuk rute tersebut adalah gateway internet default (Default jaringan), gunakan rute tersebut untuk VIP agar dapat mengakses Google API dan layanan Google.Jika Anda mengganti rute default dengan rute kustom yang next hop-nya bukan gateway internet default, penuhi persyaratan pemilihan rute untuk Google API dan layanan Google dengan menggunakan pemilihan rute kustom.
Menyelidiki alasan kubelet tidak dapat menemukan image Anda
Jika kubelet tidak dapat menemukan image, Anda mungkin melihat error image not found
dan mengalami kegagalan pengambilan image.
Untuk membantu kubelet menemukan image Anda, coba solusi berikut:
- Tinjau manifes Pod Anda dan pastikan nama gambar dan tag gambar Anda sudah dieja dengan benar. Setiap kesalahan ejaan atau format akan menyebabkan penarikan gambar gagal.
- Pastikan image masih ada di registry tempat Anda menyimpannya. Jika image memiliki jalur registry lengkap, pastikan image tersebut ada di registry Docker yang Anda gunakan. Jika Anda hanya memberikan nama image, periksa registry Docker Hub.
- Jika cluster Anda menggunakan isolasi jaringan, coba solusi berikut:
Selidiki penyebab waktu tunggu penarikan image habis atau penarikan image lambat
Jika Anda menggunakan image yang sangat besar untuk workload GKE, waktu tunggu
pull image mungkin habis dan menyebabkan error context cancelled
. Meskipun gambar
tidak memiliki batas ukuran yang ditentukan, error context cancelled
sering kali menunjukkan
bahwa ukuran gambar adalah penyebabnya.
Anda mungkin juga melihat pengambilan gambar yang tidak gagal, tetapi memerlukan waktu jauh lebih lama dari
biasanya. Jika Anda ingin memiliki dasar pengukuran waktu pengambilan gambar reguler,
tinjau entri log Successfully pulled image
. Misalnya, pesan log
berikut menunjukkan bahwa pull image memerlukan waktu 30,313387996 detik:
Successfully pulled image "IMAGE_ADDRESS" in 30.313387996s.
Waktu tunggu habis dan pengambilan gambar lambat memiliki banyak penyebab yang sama. Untuk mengatasi masalah ini, coba solusi berikut:
- Periksa pemadaman. Jika Anda hanya melihat masalah ini selama jangka waktu tertentu, periksa apakah ada Google Cloud penghentian layanan.
- Periksa performa disk. I/O disk yang lambat dapat meningkatkan waktu pengambilan image.
Pertimbangkan untuk mengupgrade ke Persistent Disk dengan SSD (
pd-ssd
) atau menggunakan disk yang lebih besar untuk meningkatkan performa. Untuk saran selengkapnya, lihat Memecahkan masalah terkait performa disk. - Mengurangi ukuran gambar. Misalnya, Anda mungkin dapat memindahkan beberapa data dari image container ke Volume Persisten.
- Manfaatkan penyimpanan dalam cache image untuk waktu startup Pod yang cepat. GKE menyimpan cache image di node. Selama pengambilan image, runtime container hanya mendownload lapisan yang belum ada di cache. Untuk memaksimalkan efektivitas mekanisme penyimpanan dalam cache ini dan meminimalkan waktu pull image, strukturkan Dockerfile Anda untuk menempatkan bagian image yang sering berubah (seperti kode aplikasi Anda) di akhir file dan gunakan image dasar yang lebih kecil.
- Aktifkan streaming Image. Fitur ini dapat mempercepat startup Pod dan download gambar. Untuk mempelajari lebih lanjut, lihat Menggunakan streaming Image untuk mengambil image container.
- Pastikan akun layanan default memiliki izin yang diperlukan. Mengubah peran yang ditetapkan ke akun layanan default dapat mengganggu beban kerja, termasuk pengambilan image. Untuk mendapatkan saran selengkapnya, lihat Mengidentifikasi cluster dengan akun layanan node yang tidak memiliki izin penting.
- Periksa konfigurasi proxy. Jika ada proxy antara cluster GKE dan repositori yang dikelola non-Google, proxy tersebut dapat menyebabkan latensi.
- Periksa software pihak ketiga. Beberapa software pihak ketiga dapat mengganggu pengambilan gambar. Selidiki apakah ada alat yang baru diinstal yang mungkin menyebabkan konflik.
Memverifikasi bahwa manifes image menggunakan arsitektur yang tepat
Jika image yang Anda coba tarik dibuat untuk arsitektur komputer yang berbeda dengan yang digunakan oleh node pool Anda, pengambilan image akan gagal.
Untuk mengonfirmasi apakah manifes image Anda menggunakan arsitektur yang tepat, ikuti langkah-langkah berikut:
Untuk mengonfirmasi arsitektur yang digunakan image Anda, lihat manifes untuk image Anda. Misalnya, untuk melihat image Docker, jalankan perintah berikut:
docker manifest inspect --verbose IMAGE_NAME
Ganti
IMAGE_NAME
dengan nama gambar yang ingin Anda lihat.Outputnya mirip dengan hal berikut ini:
... "Platform": { "architecture": "amd64", "os": "linux" } ...
Dalam contoh ini, arsitektur yang didukung adalah
amd64
.Tinjau jenis mesin yang digunakan oleh kumpulan node Anda:
gcloud container node-pools list --cluster CLUSTER_NAME --location LOCATION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster tempat Pod dengan error pull image berjalan.LOCATION
: Zona atau region Compute Engine tempat node dibuat. Misalnya,us-central1-a
atauus-central1
.
Outputnya mirip dengan hal berikut ini:
NAME: example-node-pool MACHINE_TYPE: e2-standard-2 DISK_SIZE_GB: 100 NODE_VERSION: 1.30.8-gke.1162000
Dalam contoh ini, jenis mesinnya adalah
e2-standard-2
.Bandingkan nilai di kolom
architecture
danMACHINE_TYPE
, lalu pastikan kedua nilai tersebut kompatibel. Misalnya, jika image memiliki arsitekturamd64
, image tersebut akan kompatibel dengan node pool yang menggunakane2-standard-2
sebagai jenis mesinnya. Namun, jika kumpulan node menggunakant2a-standard-1
(jenis mesin berbasis Arm), jenis mesin ini akan menyebabkan kegagalan.Jika arsitektur image tidak kompatibel dengan jenis mesin kumpulan node, build ulang image untuk menargetkan arsitektur yang diperlukan.
Memverifikasi kompatibilitas versi skema gambar
Menggunakan containerd 2.0 dengan image skema Docker v1 menyebabkan pengambilan image gagal karena containerd 2.0 menghapus dukungan untuk mengambil image Skema Docker 1 di GKE 1.33. Jika masalah ini adalah penyebab kegagalan pull gambar, Anda mungkin melihat pesan error berikut:
Failed to get converter for "IMAGE_ADDRESS": Pulling Schema 1 images have been deprecated and disabled by default since containerd v2.0. As a workaround you may set an environment variable `CONTAINERD_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE=1`, but this will be completely removed in containerd v2.1.
Untuk mengatasi masalah ini, identifikasi dan migrasikan image ini dengan mengikuti petunjuk di Bermigrasi dari image Docker Skema 1.
Langkah berikutnya
Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.