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 wadahArsitektur Kubernetes
Skema 2. Pod, Penjadwal dan KubeletDalam ilustrasi ini, objek dan komponen terkait disorot. Pod direpresentasikan sebagai
Objek Pod Kubernetes , dan bekerja dengannya:
Objek Kubernetes
Gambar 3. Objek KubernetesIlustrasi 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'aSaat 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 KubernetesTugas
Penjadwal di Kubernetes adalah menjadwalkan pod, yaitu, menetapkannya sebagai simpul yang sesuai di kluster Kubernetes untuk peluncuran berikutnya.
Mengaitkan objek pod dengan objek nodePod 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 kubeletTugas 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 iniJika 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 initKontainer 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 utamaWadah 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 wadahIlustrasi 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 podTertunda
Fase TertundaPod 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 lariPod 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 KeberhasilanPod 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 KegagalanPod 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 PodSetelah 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: