GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Men-debug Kesalahan “ImagePullBackOff” Kubernetes

Cluster Kubernetes dapat mengalami beberapa masalah saat mencoba menarik gambar container Anda. Saat terjadi kesalahan, Pod Anda akan memasukkan ImagePullBackOff negara. Berikut cara men-debug pesan yang umum namun samar ini sehingga Anda dapat membuat layanan Anda online.

Cara Kerja Penarikan Gambar

Kubernetes perlu mengambil gambar saat Anda membuat penerapan baru atau memperbarui yang sudah ada dengan referensi tag yang berbeda. Tanggung jawab untuk menarik gambar terletak pada proses Kubelet pada setiap node pekerja. Setiap gambar yang direferensikan oleh manifes Pod harus dapat diakses oleh semua node dalam cluster sehingga salah satu dari mereka dapat memenuhi permintaan penjadwalan container.

Pengunduhan dapat gagal jika jalur gambar salah, otentikasi Anda tidak benar, atau jaringan mati. Ketika ini terjadi, Kubernetes "menarik kembali" dan menjadwalkan upaya pengunduhan lainnya. Penundaan sebelum penarikan berikutnya meningkat secara eksponensial setiap kali percobaan gagal, hingga batas lima menit.

Jika Pod Anda menampilkan ImagePullBackOff status, Kubernetes telah mengalami beberapa kegagalan penarikan gambar berturut-turut dan sekarang menunggu sebelum mencoba lagi. Penampung tidak akan dapat dimulai hingga gambar tersedia.

Anda dapat meninggalkan Pod dalam keadaan ini jika Anda mengetahui bahwa masalah tersebut disebabkan oleh kondisi jaringan atau kesalahan sementara lainnya. Kubernetes pada akhirnya akan menyelesaikan percobaan lagi dan berhasil memperoleh gambar. Jika bukan itu masalahnya, berikut cara memulai debug sehingga Anda dapat memunculkan Pod Anda.

Periksa Dasar-dasarnya

Pertama dan terpenting, ada baiknya memeriksa dasar-dasarnya. Apakah manifes sumber daya Anda merujuk pada gambar valid yang benar-benar ada? Periksa jalur registri dan tag gambar untuk kesalahan ketik sederhana.

Anda dapat memeriksa status internal Kubernetes dengan describe pod perintah di Kubectl. Ini memberi Anda lebih banyak informasi daripada get pod dan dasbor Kubernetes menyediakan.

kubectl describe pod my-pod --namespace my-namespace

Perubahan dalam siklus hidup Pod ditampilkan di bawah judul “Events”. Acara pertama akan Scheduled; itu harus diikuti oleh Pulling acara untuk upaya tarikan pertama. Setelah ini, Anda akan melihat Failed atau BackOff acara jika tarikan tidak berhasil. Ini akan diulang nanti dalam daftar jika Kubernetes masih dalam siklus mundur dan coba lagi.

Membaca Message terkait dengan peristiwa ini sering memberikan akar penyebab masalah. manifest for image:tag not found pesan berarti gambar valid tetapi Anda telah menetapkan tag yang tidak valid. Jika Anda melihat does not exist or no pull access , periksa registri dan jalur gambar sudah benar. Jika Anda yakin mereka benar, masalahnya akan terkait dengan autentikasi yang salah.

Mengelola Login Registri

Anda harus masuk sebelum menarik gambar pribadi. Di Kubernetes, ini adalah mekanisme dua langkah:buat rahasia yang berisi kredensial, lalu rujuk rahasia itu dalam definisi Pod Anda.

Bidang Pod disebut imagePullSecrets . Itu perlu menunjukkan rahasia Kubernetes yang menyediakan token login untuk registri. Rahasia ini harus menyimpan nilai JSON yang kompatibel dengan Docker.

apiVersion: v1
kind: Secret
type: kubernetes.io/dockerconfigjson
metadata:
  name: image-pull-secret
data:
  .dockerconfigjson: {{ "{"auths": {"registry.example.com": {"username": "demo-user", "password": "my-password"}}}" | b64enc }}

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: registry.example.com/my-image:latest
  imagePullSecrets:
    - name: image-pull-secret

Manifes ini menunjukkan cara membuat rahasia yang memasukkan Anda ke registry.example.com sebagai demo-user dengan kata sandi my-password . Pod merujuk rahasia dengan namanya. Proses Kubelet pada node cluster Anda akan menyertakan config.json Docker cuplikan saat mereka mengambil gambar dari registri.

Cuplikan harus dienkode Base64 agar menjadi nilai rahasia Kubernetes yang valid. Anda dapat menggunakan nilai pra-enkode atau teks biasa pipa melalui b64enc YAML , seperti yang ditunjukkan dalam manifes di atas.

Jenis kredensial yang Anda gunakan akan bergantung pada registri Anda. Dalam banyak kasus, password sebenarnya akan menjadi token akses pribadi atau kunci API. Docker Hub memerlukan token akses yang dibuat di pengaturan akun Anda jika autentikasi dua faktor diaktifkan di akun Anda.

Batas Tarif Registri

Jika Anda telah memeriksa URL registri, nama tag gambar, dan kredensial masuk, Anda mungkin melihat ImagePullBackOff karena batas tingkat registri. Docker Hub sekarang membatasi Anda hingga 100 penarikan kontainer setiap enam jam. Ini meningkat menjadi 200 tarikan per enam jam jika Anda memberikan kredensial login Anda. Batas tersebut dapat dicapai dengan cepat di cluster aktif dengan banyak Pod yang sering digunakan.

Kegagalan tarik karena batas kecepatan akan bermanifestasi dengan cara yang sama seperti masalah otentikasi. Anda harus menunggu hingga waktu yang cukup berlalu agar batas tersebut kedaluwarsa. Kubernetes kemudian akan berhasil menarik gambar, membawa Pod Anda ke atas.

Untuk mitigasi jangka panjang, pertimbangkan untuk menjalankan registri atau proxy dalam kluster Anda sendiri untuk menyimpan gambar Anda dalam cache. Ini dapat secara signifikan mengurangi frekuensi Anda menekan server Docker, membantu Anda tetap berada dalam batas kecepatan.

Ringkasan

Pod Kubernetes memasukkan ImagePullBackOff menyatakan ketika sebuah node gagal untuk menarik sebuah gambar. Kubelet akan mencoba kembali pull secara berkala sehingga kesalahan sementara tidak memerlukan intervensi manual untuk mengatasinya.

Saat Anda yakin ImagePullBackOff bukan hanya blip sementara, mulailah dengan memastikan jalur gambar Pod valid. Jika itu berhasil, curigai kredensial masuk yang salah atau batas batas tarif yang habis. Menggunakan kubectl describe akan mengekspos urutan kejadian yang menyebabkan kegagalan.

Sebagai opsi terakhir, Anda dapat mencoba menarik gambar sendiri dari komputer lain untuk memastikan server registri jarak jauh benar-benar aktif. Jika Anda dapat menarik gambar tetapi kluster Anda tidak bisa, Anda mungkin memiliki masalah jaringan yang lebih umum yang mencegah node Anda mencapai registri.


Docker
  1. Cara Menggunakan Penyedia Terraform Kubernetes

  2. Cara Memodifikasi Gambar Docker

  3. Cara melakukan perubahan pada gambar Docker

  1. Bagaimana Cara Men-debug Skrip Bash?

  2. Bagaimana Memutar Gambar Dalam Gs?

  3. Cara memperbarui gambar FOG

  1. Bagaimana melakukan Deployment Canary di Kubernetes

  2. Cara Menggunakan Dockerfile untuk Membangun Gambar Docker

  3. Cara Menghapus Layanan di Kubernetes