Dokumen ini berisi langkah-langkah pemecahan masalah untuk masalah umum yang mungkin Anda alami dengan runtime container di node Google Kubernetes Engine (GKE).
Jika Anda memerlukan bantuan lainnya, hubungi Cloud Customer Care.Jalur pemasangan dengan huruf drive sederhana gagal di kumpulan node Windows dengan container
Masalah ini telah diatasi pada container versi 1.6.6 dan yang lebih baru.
Cluster GKE yang menjalankan kumpulan node Windows Server yang menggunakan runtime dalam container sebelum versi 1.6.6 mungkin mengalami error saat memulai container seperti berikut:
failed to create containerd task : CreateComputeSystem : The parameter is incorrect : unknown
Untuk detail selengkapnya, lihat masalah GitHub #6589.
Solusi
Untuk mengatasi masalah ini, upgrade node pool ke versi GKE terbaru yang menggunakan runtime container versi 1.6.6 atau yang lebih baru.
Gambar container dengan command line CMD
atau ENTRYPOINT
yang di-escape sebelumnya (non-array) gagal di kumpulan node Windows dengan container
Masalah ini telah diatasi pada container versi 1.6 dan yang lebih baru.
Cluster GKE yang menjalankan kumpulan node Windows Server yang menggunakan runtime 1.5.X dalam container mungkin mengalami error saat memulai container seperti berikut:
failed to start containerd task : hcs::System::CreateProcess : The system cannot find the file specified.: unknown
Untuk mengetahui detail selengkapnya, lihat masalah GitHub #5067 dan masalah GitHub #6300.
Solusi
Untuk mengatasi masalah ini, upgrade node pool ke versi GKE terbaru yang menggunakan runtime container versi 1.6.6 atau yang lebih baru.
Volume image container dengan jalur yang tidak ada atau jalur seperti Linux (garis miring) gagal di kumpulan node Windows dengan container
Masalah ini telah diatasi pada container versi 1.6 dan yang lebih baru.
Cluster GKE yang menjalankan kumpulan node Windows Server yang menggunakan runtime 1.5.X dalam container mungkin mengalami error saat memulai container seperti berikut:
failed to generate spec: failed to stat "<volume_path>": CreateFile : The system cannot find the path specified.
Untuk detail selengkapnya, lihat Masalah GitHub #5671.
Solusi
Untuk mengatasi masalah ini, upgrade node pool ke versi GKE terbaru yang menggunakan runtime container versi 1.6.x atau yang lebih baru.
/etc/mtab
: File atau direktori tersebut tidak ada
Runtime container Docker mengisi symlink ini di dalam container secara default, tetapi runtime dalam container tidak mengisinya.
Untuk mengetahui detail selengkapnya, lihat Masalah GitHub #2419.
Solusi
Untuk mengatasi masalah ini, buat symlink /etc/mtab
secara manual selama proses build image.
ln -sf /proc/mounts /etc/mtab
Error penarikan image: bukan sebuah direktori
Versi GKE yang terpengaruh: semua
Saat Anda mem-build image dengan kaniko, image tersebut mungkin gagal diambil dengan container yang berisi pesan error "not a directory". Error ini terjadi jika gambar dibuat dengan cara khusus: saat perintah sebelumnya menghapus direktori dan perintah berikutnya membuat ulang file yang sama di direktori tersebut.
Contoh Dockerfile berikut dengan npm
yang mengilustrasikan masalah ini.
RUN npm cache clean --force
RUN npm install
Untuk detail selengkapnya, lihat Masalah GitHub #4659.
Solusi
Untuk mengatasi masalah ini, buat image menggunakan docker build
, yang tidak terpengaruh
oleh masalah ini.
Jika docker build
tidak tersedia bagi Anda, gabungkan perintah menjadi satu.
Contoh Dockerfile berikut menggabungkan RUN npm cache clean --force
dan
RUN npm install
:
RUN npm cache clean --force && npm install
Beberapa metrik sistem file tidak ada dan format metriknya berbeda
Versi GKE yang terpengaruh: semua
Endpoint /metrics/cadvisor
Kubelet menyediakan metrik Prometheus, seperti yang didokumentasikan dalam Metrik untuk komponen sistem Kubernetes.
Jika menginstal kolektor metrik yang bergantung pada endpoint tersebut, Anda mungkin melihat
masalah berikut:
- Format metrik di node Docker adalah
k8s_<container-name>_<pod-name>_<namespace>_<pod-uid>_<restart-count>
, tetapi format di node containerd adalah<container-id>
. Beberapa metrik sistem file tidak ada di node container, seperti berikut:
container_fs_inodes_free container_fs_inodes_total container_fs_io_current container_fs_io_time_seconds_total container_fs_io_time_weighted_seconds_total container_fs_limit_bytes container_fs_read_seconds_total container_fs_reads_merged_total container_fs_sector_reads_total container_fs_sector_writes_total container_fs_usage_bytes container_fs_write_seconds_total container_fs_writes_merged_total
Solusi
Anda dapat mengurangi masalah ini dengan menggunakan cAdvisor sebagai daemonset mandiri.
- Temukan rilis cAdvisor terbaru dengan pola nama
vX.Y.Z-containerd-cri
(misalnya,v0.42.0-containerd-cri
). - Ikuti langkah-langkah di Daemonset Kubernetes cAdvisor untuk membuat daemonset.
- Arahkan kolektor metrik yang diinstal untuk menggunakan endpoint
/metrics
cAdvisor yang menyediakan kumpulan lengkap metrik container Prometheus.
Alternatif
- Migrasikan solusi pemantauan Anda ke Cloud Monitoring, yang menyediakan serangkaian metrik container lengkap.
- Kumpulkan metrik dari summary API Kubelet
dengan endpoint
/stats/summary
.
Operasi berbasis lampiran tidak berfungsi dengan benar setelah runtime container dimulai ulang di Windows GKE
Versi GKE yang terpengaruh: 1.21 hingga 1.21.5-gke.1802, 1.22 hingga 1.22.3-gke.700
Cluster GKE yang menjalankan kumpulan node Windows Server yang menggunakan runtime dalam container (versi 1.5.4 dan 1.5.7-gke.0) mungkin mengalami masalah jika runtime container dimulai ulang secara paksa, dengan operasi pemasangan ke container yang sudah ada dan tidak dapat mengikat IO lagi. Masalah ini tidak akan menyebabkan kegagalan dalam panggilan API, tetapi data tidak akan dikirim atau diterima. Hal ini mencakup data untuk lampiran serta mencatat CLI dan API melalui server API cluster.
Solusi
Untuk mengatasi masalah ini, upgrade ke versi runtime container yang di-patch (1.5.7-gke.1) dengan rilis GKE yang lebih baru.
Pod menampilkan pesan error failed to allocate for range 0: no IP addresses available in range set
Versi GKE yang terpengaruh: 1.24.6-gke.1500 atau sebelumnya, 1.23.14-gke.1800 atau sebelumnya, dan 1.22.16-gke.2000 atau sebelumnya
Cluster GKE yang menjalankan kumpulan node yang menggunakan containerd mungkin mengalami masalah kebocoran IP dan menghabiskan semua IP Pod pada sebuah node. Pod yang dijadwalkan pada node yang terpengaruh akan menampilkan pesan error seperti berikut:
failed to allocate for range 0: no IP addresses available in range set: 10.48.131.1-10.48.131.62
Untuk mengetahui informasi selengkapnya tentang masalah ini, lihat masalah GitHub #5438 dalam container dan masalah GitHub #5768.
Terdapat masalah umum di GKE Dataplane V2 yang dapat memicu masalah ini. Namun, masalah ini dapat dipicu oleh penyebab lain, termasuk runc yang terhenti.
Solusi
Untuk mengatasi masalah ini, ikuti solusi yang disebutkan dalam Solusi untuk cluster GKE Standar untuk GKE Dataplane V2.
Perbedaan perilaku pemeriksaan eksekusi saat pemeriksaan melebihi waktu tunggu
Versi GKE yang terpengaruh: semua
Perilaku pemeriksaan eksekusi pada image containerd berbeda dengan perilaku
pada image dockershim
. Ketika pemeriksaan eksekutif, yang ditentukan untuk Pod, melebihi batas Kubernetes timeoutSeconds
yang dinyatakan, pada image dockershim
, pemeriksaan tersebut akan dianggap sebagai kegagalan pemeriksaan.
Pada image containerd, hasil pemeriksaan yang ditampilkan setelah batas timeoutSeconds
yang dideklarasikan akan diabaikan.
Solusi
Di GKE, gate fitur ExecProbeTimeout
disetel ke
false
dan tidak dapat diubah. Untuk mengatasi masalah ini, tingkatkan
nilai minimum timeoutSeconds
untuk semua pemeriksaan eksekutif yang terpengaruh atau implementasikan fungsi waktu tunggu
sebagai bagian dari logika pemeriksaan.
Memecahkan masalah terkait registry pribadi
Bagian ini memberikan informasi pemecahan masalah untuk konfigurasi registry pribadi dalam container.
Pengambilan image gagal dengan error x509: sertifikat ditandatangani oleh otoritas tidak dikenal
Masalah ini terjadi jika GKE tidak dapat menemukan sertifikat untuk domain registry pribadi tertentu. Anda dapat memeriksa error ini di Cloud Logging menggunakan kueri berikut:
Buka halaman Logs Explorer di konsol Google Cloud:
Jalankan kueri berikut:
("Internal error pulling certificate" OR "Failed to get credentials from metadata server" OR "Failed to install certificate")
Untuk mengatasi masalah ini, coba langkah-langkah berikut:
Di GKE Standard, buka file konfigurasi yang ada di jalur berikut:
/etc/containerd/hosts.d/DOMAIN/config.toml
Ganti
DOMAIN
dengan FQDN untuk registry.Pastikan file konfigurasi Anda berisi FQDN yang benar.
Pastikan jalur ke sertifikat di kolom
secretURI
dalam file konfigurasi sudah benar.Pastikan sertifikat ada di Secret Manager.
Sertifikat tidak ada
Masalah ini terjadi jika GKE tidak dapat mengambil sertifikat dari Secret Manager untuk mengonfigurasi container pada node Anda.
Untuk mengatasi masalah ini, coba langkah-langkah berikut:
- Pastikan node yang terpengaruh menjalankan Container-Optimized OS. {i>Node<i} Ubuntu dan Windows tidak didukung.
- Di file konfigurasi Anda, pastikan jalur ke secret di kolom
secretURI
sudah benar. - Pastikan akun layanan IAM cluster Anda memiliki izin yang benar untuk mengakses secret.
- Periksa apakah cluster memiliki cakupan akses
cloud-platform
. Untuk mengetahui petunjuknya, lihat Memeriksa cakupan akses.
Opsi registry tidak aman belum dikonfigurasi untuk jaringan lokal (10.0.0.0/8)
Versi GKE yang terpengaruh: semua
Pada image dalam container, opsi registry yang tidak aman tidak dikonfigurasi untuk jaringan lokal 10.0.0.0/8
. Jika menggunakan registry pribadi yang tidak aman, Anda mungkin melihat
pesan error seperti berikut:
pulling image: rpc error: code = Unknown desc = failed to pull and unpack image "IMAGE_NAME": failed to do request: Head "IMAGE_NAME": http: server gave HTTP response to HTTPS client
Untuk mengatasi masalah ini, coba langkah-langkah berikut:
- Gunakan Artifact Registry
- Konfigurasikan TLS di registry pribadi jika kasus penggunaan Anda mendukung opsi ini. Anda dapat menggunakan file konfigurasi dalam container untuk memberi tahu GKE agar menggunakan sertifikat yang Anda simpan di Secret Manager untuk mengakses registry pribadi Anda. Untuk mengetahui petunjuknya, lihat Mengakses registry pribadi dengan sertifikat CA pribadi.
Mengonfigurasi DaemonSets dengan hak istimewa untuk mengubah konfigurasi container Anda
Untuk cluster Standar, coba langkah-langkah berikut. Solusi ini tidak tersedia di Autopilot karena container dengan hak istimewa berisiko keamanan. Jika lingkungan Anda terekspos ke internet, pertimbangkan toleransi risiko Anda sebelum men-deploy solusi ini. Dalam semua kasus, kami sangat menyarankan Anda untuk mengonfigurasi TLS untuk registry pribadi Anda dan menggunakan opsi Secret Manager.
Tinjau manifes berikut:
Di kolom
.spec.containers.env
, ganti nilaiREGISTRY_ADDRESS
dari variabelADDRESS
dengan alamat registry HTTP lokal Anda dalam formatDOMAIN_NAME:PORT
. Misalnya,containers: - name: startup-script ... env: - name: ADDRESS value: "example.com:5000"
Deploy DaemonSet:
kubectl apply -f insecure-registry-ds.yaml
DaemonSet menambahkan registry tidak aman Anda ke konfigurasi containerd di setiap node.
containerd mengabaikan pemetaan perangkat untuk pod dengan hak istimewa
Versi GKE yang terpengaruh: semua
Untuk Pod Kubernetes dengan hak istimewa,
runtime container mengabaikan pemetaan perangkat apa pun yang diteruskan oleh volumeDevices.devicePath
ke sana, dan sebagai gantinya membuat setiap perangkat di host tersedia untuk container
dalam /dev
.
kebocoran container shim proses ketika node berada di bawah tekanan I/O
Versi GKE yang terpengaruh: 1.25.0 hingga 1.25.15-gke.1040000, 1.26.0 hingga 1.26.10-gke.1030000, 1.27.0 hingga 1.27.6-gke.1513000, dan 1.28.0-gke1.0.30.
Saat node GKE mengalami tekanan I/O, containerd mungkin gagal
menghapus proses containerd-shim-runc-v2
saat Pod dihapus, yang mengakibatkan
kebocoran proses. Jika terjadi kebocoran pada node, Anda akan melihat lebih banyak
proses containerd-shim-runc-v2
di node tersebut daripada jumlah Pod di
node tersebut. Anda mungkin juga melihat peningkatan penggunaan memori dan CPU beserta PID tambahan.
Untuk mengetahui detailnya, lihat masalah GitHub
Memperbaiki shim yang bocor yang disebabkan oleh tekanan IO yang tinggi.
Untuk mengatasi masalah ini, upgrade node Anda ke versi berikut atau yang lebih baru:
- 1.25.15-gke.1040000
- 1.26.10-gke.1030000
- 1.27.6-gke.1513000
- 1.28.3-gke.1061000
Jenis alamat IPv6 diaktifkan pada pod yang menjalankan containerd
Versi GKE yang terpengaruh: 1.18, 1.19, 1.20.0 hingga 1.20.9
Jenis image IPv6 diaktifkan untuk Pod yang berjalan dengan containerd. Gambar dockershim
menonaktifkan IPv6 di semua Pod, sedangkan image dalam container tidak. Misalnya, localhost
me-resolve ke alamat IPv6 ::1
terlebih dahulu. Hal ini biasanya tidak menjadi
masalah, tetapi dapat menyebabkan perilaku yang tidak terduga dalam kasus tertentu.
Solusi
Untuk mengatasi masalah ini, gunakan alamat IPv4 seperti 127.0.0.1
secara eksplisit, atau
konfigurasikan aplikasi yang berjalan di Pod agar berfungsi di kedua kelompok alamat.
Penyediaan otomatis node hanya menyediakan node pool Container-Optimized OS dengan Docker
Versi GKE yang terpengaruh: 1.18, 1.19, 1.20.0 hingga 1.20.6-gke.1800
Penyediaan otomatis node memungkinkan kumpulan node penskalaan otomatis dengan jenis image yang didukung apa pun, tetapi hanya dapat membuat kumpulan node baru dengan jenis image Container-Optimized OS dengan Docker.
Solusi
Untuk mengatasi masalah ini, upgrade cluster GKE ke versi 1.20.6-gke.1800 atau yang lebih baru. Dalam versi GKE ini, jenis image default dapat ditetapkan untuk cluster.
Bentrok dengan rentang alamat IP 172.17/16
Versi GKE yang terpengaruh: 1.18.0 hingga 1.18.14
Rentang alamat IP 172.17/16
diisi oleh antarmuka docker0
pada VM node dengan container diaktifkan. Traffic yang mengirim ke atau berasal dari rentang tersebut mungkin tidak dirutekan dengan benar (misalnya, Pod mungkin tidak dapat terhubung ke host yang terhubung dengan VPN dengan alamat IP dalam 172.17/16
).
Metrik GPU tidak dikumpulkan
Versi GKE yang terpengaruh: 1.18.0 hingga 1.18.18
Metrik penggunaan GPU tidak dikumpulkan saat menggunakan containerd sebagai runtime pada versi GKE sebelum 1.18.18.
Solusi
Untuk mengatasi masalah ini, upgrade cluster Anda ke GKE versi 1.18.18 atau yang lebih baru.
Gambar dengan config.mediaType
yang ditetapkan ke application/octet-stream
tidak dapat digunakan di penampung
Versi GKE yang terpengaruh: semua
Image dengan config.mediaType
yang disetel ke "application/octet-stream"
tidak dapat digunakan di containerd. Untuk mengetahui informasi selengkapnya, lihat
Masalah GitHub #4756.
Image ini tidak kompatibel dengan spesifikasi Open Container Initiative
dan dianggap salah. Image ini berfungsi dengan Docker untuk memberikan kompatibilitas
mundur, tetapi image ini tidak didukung di containerd.
Gejala dan diagnosis
Contoh error dalam log node:
Error syncing pod <pod-uid> ("<pod-name>_<namespace>(<pod-uid>)"), skipping: failed to "StartContainer" for "<container-name>" with CreateContainerError: "failed to create containerd container: error unpacking image: failed to extract layer sha256:<some id>: failed to get reader from content store: content digest sha256:<some id>: not found"
Manifes gambar biasanya dapat ditemukan di registry tempat manifes gambar tersebut dihosting.
Setelah manifes didapatkan, periksa config.mediaType
untuk mengetahui apakah Anda
mengalami masalah ini:
"mediaType": "application/octet-stream",
Solusi
Karena komunitas containerd memutuskan untuk tidak mendukung image tersebut, semua
versi containerd akan terpengaruh dan perbaikan tidak tersedia. Image container
harus dibangun ulang dengan Docker versi 1.11 atau yang lebih baru, dan Anda harus memastikan
kolom config.mediaType
tidak disetel ke "application/octet-stream"
.
Konfigurasi CNI tidak diinisialisasi
Versi GKE yang terpengaruh: semua
GKE gagal membuat node selama proses upgrade, pengubahan ukuran, atau tindakan lainnya.
Gejala dan diagnosis
Contoh error di konsol Google Cloud:
Error: "runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized".
Error ini mungkin terjadi dalam situasi berikut:
- Selama proses bootstrap node dalam file log ketika GKE menginstal konfigurasi CLI.
- Sebagai status error node di konsol Google Cloud jika webhook kustom yang
mencegat perintah pengontrol DaemonSet untuk membuat Pod mengalami error. Error ini
mencegah GKE membuat Pod
netd
ataucalico-node
. Jika Podnetd
ataucalico-node
berhasil dimulai sementara error masih berlanjut, hubungi dukungan.
Solusi
Untuk mengatasi masalah ini, coba solusi berikut:
- Tunggu hingga GKE selesai menginstal konfigurasi CNI.
- Hapus semua webhook yang salah dikonfigurasi.
- Konfigurasikan webhook agar mengabaikan Pod sistem.