Jadi apa itu pod di Kubernetes?

Catatan perev. : Artikel ini melanjutkan siklus materi dari penulis teknis dari Google, mengerjakan dokumentasi untuk Kubernetes (Andrew Chen), dan direktur rekayasa perangkat lunak dari SAP (Dominik Tornow). Tujuan mereka adalah menjelaskan dasar-dasar Kubernet dengan jelas dan jelas. Terakhir kali kami menerjemahkan artikel tentang ketersediaan tinggi , dan sekarang kami akan berbicara tentang konsep dasar di Kubernetes sebagai pod.



Kubernetes adalah mesin orkestrasi wadah yang dirancang untuk menjalankan aplikasi kemas pada banyak node, biasanya disebut sebagai cluster. Dalam publikasi ini, kami menggunakan pendekatan pemodelan sistem untuk meningkatkan pemahaman tentang Kubernet dan konsep dasarnya. Pembaca didorong untuk sudah memiliki pemahaman dasar tentang Kubernet.

Pod adalah blok bangunan dasar Kubernetes, tetapi pengguna Kubernetes yang berpengalaman sekalipun tidak dapat selalu menjelaskan apa itu.

Publikasi ini menawarkan model pemikiran ringkas yang menyoroti karakteristik mendefinisikan polong Kubernet. Demi keringkasan ini, saya harus menghilangkan beberapa fitur Pods lainnya, seperti probe liveness dan readiness , berbagi sumber daya (termasuk berbagi namespace yang baru-baru ini muncul - perkiraan Terjemahan. ) , Bekerja dengan jaringan.

Definisi


Pod adalah permintaan untuk menjalankan satu atau lebih kontainer pada satu node.

Pod didefinisikan dengan menyajikan permintaan untuk mengeksekusi satu atau lebih kontainer pada satu node, dan kontainer ini berbagi akses ke sumber daya seperti volume penyimpanan dan tumpukan jaringan.

Namun, dalam kehidupan sehari-hari, istilah "pod" dapat digunakan baik dalam arti permintaan ini maupun dalam arti pengumpulan kontainer yang diluncurkan sebagai tanggapan atas permintaan tersebut. Oleh karena itu, dalam publikasi kita akan menggunakan kata "pod" ketika kita berbicara tentang permintaan, dan untuk kasus kedua - gunakan ungkapan "set wadah".

Pod dianggap sebagai blok bangunan dasar Kubernet karena semua beban kerja di Kubernet - misalnya, Penyebaran , ReplicaSets, dan Pekerjaan - dapat dinyatakan sebagai pod.

Pod adalah satu-satunya objek di Kubernetes yang menyebabkan kontainer berjalan. Tanpa pod - tanpa wadah!


Skema 1. Penempatan, ReplicaSet, pod dan wadah

Arsitektur Kubernetes



Skema 2. Pod, Penjadwal dan Kubelet

Dalam ilustrasi ini, objek dan komponen terkait disorot. Pod direpresentasikan sebagai Objek Pod Kubernetes , dan bekerja dengannya:

  • Penjadwal
  • Kubelet.


Objek Kubernetes



Gambar 3. Objek Kubernetes

Ilustrasi ini menunjukkan objek Kubernetes yang bertanggung jawab untuk bekerja dengan pod:

  • objek pod aktual (Objek Pod) ;
  • Binding Object
  • Obyek Simpul

Pod Object menetapkan set kontainer yang akan diluncurkan, dan kebijakan mulai ulang yang diinginkan jika terjadi kecelakaan kontainer, dan juga memantau keadaan peluncuran.

Binding Object mengikat Pod Object ke Node Object , mis. memberikan pod ke host untuk peluncuran nanti.

Node Object merepresentasikan sebuah node dalam cluster Kubernetes.

Pengolahan pod



Skema 4. Memproses pod'a

Saat pod dibuat oleh pengguna atau pengontrol seperti ReplicaSet Controller atau Job Controller , Kubernetes memproses pod dalam dua langkah:

  • Penjadwal merencanakan pod,
  • Kubelet meluncurkan pod.

Perencanaan pod



Gambar 5. Siklus Kontrol Penjadwal Kubernetes

Tugas Penjadwal di Kubernetes adalah menjadwalkan pod, yaitu, menetapkannya sebagai simpul yang sesuai di kluster Kubernetes untuk peluncuran berikutnya.


Mengaitkan objek pod dengan objek node

Pod ditugaskan ke sebuah simpul (atau mengikatnya ) jika dan hanya jika ada objek yang mengikat yang memiliki:

  • namespace sama dengan namespace pod,
  • nama sama dengan nama pod,
  • tipe target sama dengan Node ,
  • nama target sama dengan nama node.

(Pecinta petualangan dapat melihat inti GitHub Kelsey Hightower berjudul " Membuat dan Menjadwalkan Pod Secara Manual, " panduan langkah demi langkah tentang cara membuat objek yang mengikat secara manual.)

Peluncuran pod



Diagram 6. Siklus kontrol kubelet

Tugas Kubelet adalah meluncurkan pod, yang pada dasarnya berarti meluncurkan satu set wadah pod. Peluncuran pod Kubelet terjadi dalam dua fase: inisialisasi dan tahap utama.

Sebagai aturan, satu set wadah selama fase inisialisasi melakukan pekerjaan persiapan, seperti menyiapkan direktori yang diperlukan dan struktur file. Dan set kontainer di fase utama sudah melakukan tugas "paling penting".

Dalam kehidupan sehari-hari, meskipun ini tidak sepenuhnya benar, istilah β€œpod” sering menyiratkan satu set wadah dalam fase utama atau makna yang lebih sempit dari wadah β€œpaling penting” dari fase utama.


Skema 7.1. Mulai pod, fase inisialisasi (init) dan fase utama (utama)

Selama inisialisasi, Kubelet memulai wadah secara berurutan sesuai dengan spesifikasi .Spec.InitContainers dan dalam urutan yang ditentukan dalam daftar. Agar berhasil meluncurkan pod, dan dengan mempertimbangkan kebijakan restart, wadah initnya harus mulai dan berhasil menyelesaikan.

Selama fase utama, Kubelet secara bersamaan meluncurkan kontainer sesuai dengan spesifikasi .Spec.Containers . Di sini, agar peluncuran pod berhasil, dan dengan mempertimbangkan kebijakan restart, wadah utamanya harus dimulai dan berhasil diselesaikan atau bekerja tanpa batas waktu.


Skema 7.2. Menjalankan pod, detail dari proses ini

Jika terjadi kegagalan kontainer, ketika kontainer berhenti bekerja dengan kode keluar non-nol (0), Kubelet dapat memulai kembali wadah sesuai dengan kebijakan restart pod. Kebijakan ini memiliki salah satu makna berikut: Always , OnFailure , Never .

Kebijakan mulai ulang pod memiliki semantik berbeda untuk wadah init dan kontainer utama: jika meluncurkan kontainer init harus mengarah pada penyelesaian, maka kontainer utama mungkin tidak berakhir.


Mulai ulang kebijakan untuk wadah init

Kontainer awal akan dimulai kembali (mis. Itu akan memerlukan peluncuran wadah baru dengan spesifikasi yang sama) setelah menyelesaikan pekerjaannya hanya jika kondisi berikut dipenuhi:

  • Kode keluar wadah melaporkan kesalahan dan
  • kebijakan restart OnFailure adalah Always atau OnFailure .


Mulai ulang kebijakan untuk wadah utama

Wadah utama akan dimulai kembali (mis. Mensyaratkan peluncuran wadah baru dengan spesifikasi yang sama) setelah menyelesaikan pekerjaannya hanya jika persyaratan berikut dipenuhi:

  • restart kebijakan yang didefinisikan sebagai Always atau
  • Kebijakan mulai ulang didefinisikan sebagai OnFailure dan kode keluar wadah melaporkan kesalahan.


Diagram 8. Contoh garis waktu dengan titik merah, melambangkan kegagalan wadah

Ilustrasi menunjukkan kemungkinan waktu peluncuran pod dengan dua spesifikasi untuk init container dan dua spesifikasi untuk container utama. Itu juga menunjukkan pembuatan (sesuai dengan kebijakan restart) dari wadah utama 1.2 baru setelah masalah dengan peluncuran wadah utama 1.1 .

Fase pod



Diagram 9. Interaksi Kubelet dengan objek pod dan runtime wadah (container runtime)

Kubelet menerima spesifikasi pod untuk .Spec.InitContainers dan .Spec.Containers , meluncurkan kumpulan kontainer yang ditentukan, dan memperbarui nilai .Status.InitContainerStatuses untuk .Status.InitContainerStatuses dan .Status.ContainerStatuses .

Kubelet runtuh .Status.InitContainerStatuses dan .Status.ContainerStatuses menjadi satu nilai - .Status.Phase .

Fase pod adalah proyeksi keadaan wadah dari satu set wadah, tergantung pada:

  • negara dan kode keluar dari wadah init,
  • menyatakan dan keluar dari wadah utama.


Skema 10. Fase-fase pod

Tertunda



Fase Tertunda

Pod sedang menunggu jika dan hanya jika:

  • tidak ada wadah init pod dalam status Terminated dengan kesalahan ( Failure );
  • semua wadah pod utama dalam status Waiting .

Lari



Fase lari

Pod sedang dalam tahap kerja jika dan hanya jika:

  • semua wadah pod init berada dalam status Terminated dengan sukses;
  • setidaknya satu wadah pod utama dalam status Running ;
  • tidak ada wadah pod utama dalam status Terminated dengan Failure .

Sukses



Fase Keberhasilan

Pod berada dalam fase sukses jika dan hanya jika:

  • semua wadah pod init berada dalam status Terminated dengan sukses;
  • semua wadah pod utama berada dalam status Terminated dengan sukses.

Kegagalan



Fase Kegagalan

Pod sedang dalam fase kegagalan jika dan hanya jika:

  • semua wadah pod dalam status Terminated ;
  • setidaknya salah satu wadah pod berada dalam status Terminated dengan kesalahan ( Failure ).

Tidak dikenal


Selain fase yang dijelaskan di atas, pod mungkin berada dalam fase yang tidak diketahui, yang menunjukkan ketidakmungkinan menentukan fase saat ini.

Pengumpulan sampah untuk polong



Diagram 11. Siklus Kontrol Pengumpul Sampah Pod

Setelah pod dijadwalkan dan diluncurkan, pengontrol Kubernetes khusus - Pengontrol Pengumpul Sampah Pod - bertanggung jawab untuk menghilangkan objek pod dari Toko Obyek Kubernetes .

Kesimpulan


Pod adalah blok bangunan dasar Kubernetes: pod didefinisikan sebagai representasi permintaan untuk meluncurkan satu atau lebih kontainer pada satu node. Setelah pod dibuat, Kubernetes memprosesnya dalam dua tahap: pertama, Penjadwal menjadwalkan pod, dan kemudian Kubelet meluncurkannya. Sepanjang siklus hidupnya, pod melewati fase yang berbeda, melaporkan status - atau, lebih tepatnya, keadaan set kontainernya - kepada pengguna dan sistem.

PS dari penerjemah


Baca juga di blog kami:

Source: https://habr.com/ru/post/id427819/


All Articles