Pembelian akaun Google Cloud: Pods sering melaporkan panduan lengkap untuk penyiasatan dan penghindaran ImagePullBackOff / ErrImagePull
Dalam operasi harian Google Kubernetes Engine (GKE) dan pelepasan CI/CD, yang paling menyusahkan adalah garis yang mempesonakan di bar status Pod
ErrImagePull
Atau
ImagePullBackOff
。
Ringkasnya,
ErrImagePull
Ini adalah kesalahan khusus yang dilemparkan oleh Kubet ketika dia gagal menarik cermin untuk pertama kalinya; dan
ImagePullBackOff
Ini adalah mekanisme perlindungan diri K8s-apabila mendapati bahawa gambar cermin tidak dapat ditarik, ia akan memasuki keadaan "penghindaran dan ujian semula" (selang ujian semula yang diperpanjang secara eksponensial).
Jika anda menghadapi masalah ini, jangan panik. Berikut adalah satu set tekan
Tidak termasuk keutamaan dari tinggi ke rendah
Pelan penyiasatan pertempuran sebenar yang disusun akan membantu anda memukul lesi secara langsung.
Langkah 1: Diagnosis pertama di tempat, tangkapan log ralat yang tepat
Meneka kebenaran atau rangkaian secara membuta tuli membuang masa. Mula-mula dapatkan mesej ralat pertama yang direkodkan oleh Kubernetes melalui baris arahan.
1. Lihat Peristiwa Pod (Events)
Jalankan arahan berikut dan tarik ke akhir untuk melihat
Acara
Blok:
Bash
Kubectl describe pod <pod-name> -n <namepace>
Perhatian
Failed
Keluaran khusus acara biasanya secara langsung menunjukkan kaki kuda:
Manifest tidak diketahui atau tidak dijumpai: Laluan cermin/Tag ditulis salah, atau tidak ada sama sekali di gudang.
PermissionDenied atau Unauthorized: Kebenaran IAM tidak mencukupi, dan nod tidak dapat melalui gudang.
Sambungan atau i/o timeout: Rangkaian tidak berfungsi (biasa dalam kelompok peribadi atau pemintas firewall).
Langkah 2: Penyiasatan dan Penyelesaian Lima Insentif Teras
Mengikut pengalaman persekitaran pengeluaran, lebih daripada 90% kegagalan lukisan cermin GKE disebabkan oleh 5 sebab berikut:
1. Kesalahan jalan cermin atau ejaan Tag (kesalahan tahap rendah yang paling biasa)
Setelah perkhidmatan cermin Google Cloud beralih sepenuhnya ke Artifact Registry (GAR), format laluannya agak ketat:
Plaintext
[REGION]-docker.pkg.de v/[PROJECT-ID]/[REPOSITORY]/[IMAGE]:[TAG]
# Contoh: asia-east1-docker.pkg.dev/my-gcp-project/my-repo/my-app:v1.0.0
Penyiasatan dan pembaikan:
Periksa ejaan: Periksa
Sama ada terdapat kesalahan ejaan huruf dalam awalan wilayah (seperti asia-east1), ID projek, nama gudang, dan nama cermin.
Periksa sama ada Tag wujud: Jalankan gcloud di terminal untuk mengesahkan sama ada versi cermin itu benar-benar wujud di awan: Senarai imej docker Bashgcloud artifacts asia-east1-docker.pkg.dev/my-project/my-repo
Perhatikan kebolehubahan Tag: Sekiranya gudang anda menghidupkan "Tag Immutability" (Tag Immutability), mendorong Tag dengan nama yang sama akan gagal, yang akan menyebabkan kluster gagal mendapatkan gambar cermin terkini.
2. Kebenaran IAM GCP tidak mencukupi (Akaun Perkhidmatan tidak dibenarkan)
Apabila simpul GKE (Node) meminta Artifact Registry untuk menarik gambar, ia bergantung pada
Akaun perkhidmatan GCP terikat dengan kumpulan nod (Akaun Perkhidmatan Node)
Daripada akaun peribadi anda atau Pod Workload Identity.
Sekiranya anda menggunakan akaun perkhidmatan lalai semasa membuat kumpulan simpul GKE, atau menggunakan akaun perkhidmatan khusus, tetapi tidak memberikan kebenaran membaca Artifact Registry, ia akan dilaporkan
PermissionDenied
。
Pengesanan dan pembaikan:
Dapatkan akaun perkhidmatan yang digunakan oleh kumpulan nod kluster: Basgcloud container node-pols decribe <node-pool-name> \-cluster <cluster-name> \-zone <zon> \-format = "nilai (config.
Berikan kebenaran membaca Artifact Registry (Artifact Registry Reader/roles/artictifactration. reader) kepada akaun perkhidmatan: Projek Basgcloud = "iam-policy-binding" <PROJECT-ID> \-klik = "NODE-SERVICE-ACCOUNT-EMAIL
* (Catatan: Sekiranya kluster GKE anda berada di Projek A dan gudang cermin berada di Projek B, pastikan anda berada di Projek B (Gudang
Projek) *
Berikan kebenaran Pembaca Registry Artifact ke akaun perkhidmatan nod Projek A!)
3. Rangkaian Kluster Swasta tidak berfungsi (Private GKE Network Issue)
Sekiranya anda menggunakan
Kluster GKE Swasta (Private Cluster)
, Node tidak mempunyai alamat IP rangkaian awam. Sekiranya kluster tidak mengkonfigurasi outlet extranet atau membuka akses Google peribadi, simpul tidak dapat dihubungkan ke
*. Pkg.de v
Muat turun cermin.
Pengesanan dan pembaikan:
Sekiranya untuk mendapatkan Imej Dalaman Google: Anda perlu membuka Akses Google Swasta di subnet, sehingga lalu lintas dapat langsung mengakses GAR melalui rangkaian dalaman Google tanpa melalui rangkaian awam. Kemas kini subnet komputer Basgcloud <SUBNET-NAME> \-region <REGION> \-enable-private-google-acess
Sekiranya untuk menarik cermin luaran (seperti Docker Hub, GitHub Packages): Node peribadi mesti menggunakan Cloud NAT untuk mengakses rangkaian luaran. Pastikan anda mempunyai pintu masuk Cloud NAT yang betul di VPC dan Region di mana kluster terletak.
4. Tidak ada ImagePullSecrets untuk menarik gudang pihak ketiga swasta
Sekiranya cermin anda disimpan di gudang peribadi pihak ketiga (seperti Harbour yang dibina sendiri, Hub Docker peribadi, Pendaftaran GitLab, dll.), Node GKE tidak dapat menggunakan pengesahan identiti terbina dalam GCP.
Pengesanan dan pembaikan:
Buat kunci Docker yang sepadan dalam K8s: bashubectl create decreter-registry my-registry-key \-docker-server =<YOUR-PRIVATE-REGISTRY> \-docker-username =<USERNAME> \-docker-racker =<PASSWORD>-KER-\ TOON-KER
Yang disebut secara eksplisit dalam Deployment / Pod YAML: YAMLspec: imagePullSecr
Ets:-name: my-registry-key containers: - name: my-app image: your-registry.com/team/app:v1
5. Masalah kelebihan sumber atau kuota projek (perkhidmatan dilumpuhkan kerana tunggakan akaun)
Kadang-kadang masalahnya bukan pada konfigurasi K8s itu sendiri, tetapi pada asas infrastruktur. Sekiranya projek GCP menghadapi sekatan kuota sumber, penguncian kuota, atau yang paling biasa-
Mengisi semula akaun Google Cloud
Sekiranya tunggakan disebabkan oleh kegagalan menyelesaikannya tepat pada waktunya, GCP akan menggantung atau menyekat beberapa perkhidmatan API buat sementara waktu (termasuk lebar jalur muat turun atau kapasiti akses penyimpanan Artifact Registry).
Pengesanan dan pembaikan:
Masukkan GCP Console untuk melihat halaman Billing (penyelesaian) untuk memastikan bahawa akaun penyelesaian berada dalam keadaan normal.
Pastikan saluran pengisian semula akaun Google Cloud syarikat tidak disekat, dan elakkan penurunan perkhidmatan automatik yang disebabkan oleh kad kredit yang tamat tempoh atau had anggaran, yang akan mencetuskan tamat masa atau penolakan sambungan cermin Pod dalam talian.
Langkah 3: Cadangan Pengesahan dan Pencegahan Pantas
Setelah menyelesaikan pembaikan, anda boleh memaksa Kubernetes untuk menarik semula pengesahan cermin dengan perintah berikut:
Bash
# Skema A: Padamkan Pod yang melaporkan ralat dan biarkan Deployment membina semula secara automatik
Kubectl delete pod <pod-name> -n <namspace>
# Skim B: Mulakan semula Deployment secara langsung
Kubectl roll restart deployment <deployment-name> -n <namepace>
Cadangan Amalan Terbaik:
Elakkan menggunakan: tag latest: Gunakan nombor versi tetap atau Git Commit SHA sebagai Tag untuk mengelakkan Kubelet menarik versi yang tidak dijangka kerana mekanisme cache.
Persekitaran pengeluaran membuka caching cermin atau Image Streaming: Untuk pencerminan besar, fungsi Image Streaming dapat diaktifkan pada GKE, yang sangat mempersingkat masa permulaan Pod dan tempoh menunggu muat turun cermin.
Mekanisme CI/CD yang baik: Sebelum barisan pemasangan mengemas kini Manifest, tambahkan satu langkah Pemeriksaan Imej untuk mengelakkan ImagePullBackOff yang disebabkan oleh penyebaran cermin yang tidak berjaya dari sumbernya.
Ikuti logik di atas untuk menyiasat langkah demi langkah, kebanyakan kesalahan penarik cermin GKE dapat dijumpai dan diselesaikan dalam beberapa minit.
