Apa itu Arsitektur Kubernetes? Penting + Praktik Terbaik
Diterbitkan: 2023-06-12Kubernetes telah mengalami pertumbuhan luar biasa dalam pengadopsiannya sejak 2014. Terinspirasi oleh solusi manajemen klaster internal Google, Borg, Kubernetes menyederhanakan penerapan dan pengelolaan aplikasi Anda. Seperti semua perangkat lunak orkestrasi kontainer , Kubernetes menjadi populer di kalangan profesional TI karena aman dan mudah. Namun, seperti halnya setiap alat, mengenali bagaimana arsitekturnya membantu Anda menggunakannya secara lebih efektif.
Mari pelajari dasar-dasar arsitektur Kubernetes, mulai dari apa itu, apa fungsinya, dan mengapa itu penting.
Apa itu arsitektur Kubernetes?
Arsitektur Kubernetes atau Kubernetes adalah platform sumber terbuka untuk mengelola dan menerapkan kontainer. Ini memberikan penemuan layanan, penyeimbangan muatan, mekanisme regeneratif, orkestrasi kontainer, runtime kontainer, dan orkestrasi infrastruktur yang berfokus pada kontainer.
Google menciptakan sistem pengelolaan wadah Kubernetes yang dapat disesuaikan, yang menangani aplikasi dalam wadah di banyak pengaturan. Ini membantu mengotomatiskan penyebaran aplikasi kemas, membuat perubahan, dan meningkatkan dan menurunkan skala aplikasi ini.
Kubernetes bukan hanya orkestra kontainer . Dengan cara yang sama, aplikasi desktop beroperasi di MacOS, Windows, atau Linux; ini adalah sistem operasi untuk aplikasi cloud-native karena berfungsi sebagai platform cloud untuk program tersebut.
Apa itu wadah?
Container adalah pendekatan standar untuk memaketkan aplikasi dan dependensinya sehingga aplikasi dapat dieksekusi di seluruh lingkungan runtime dengan mudah. Dengan menggunakan container, Anda dapat mengambil tindakan penting untuk mengurangi waktu penerapan dan meningkatkan ketergantungan aplikasi dengan mengemas kode, dependensi, dan konfigurasi aplikasi ke dalam satu blok penyusun yang mudah digunakan.
Jumlah kontainer dalam aplikasi korporat bisa menjadi tidak terkelola. Untuk mendapatkan hasil maksimal dari wadah Anda, Kubernetes membantu Anda mengaturnya.
Untuk apa Kubernet digunakan?
Kubernetes adalah platform yang sangat mudah beradaptasi dan dapat diperluas untuk menjalankan beban kerja container. Platform Kubernetes tidak hanya menyediakan lingkungan untuk membuat aplikasi cloud-native, tetapi juga membantu mengelola dan mengotomatiskan penerapannya.
Ini bertujuan untuk meringankan operator aplikasi dan pengembang dari upaya mengoordinasikan infrastruktur komputasi, jaringan, dan penyimpanan yang mendasarinya, yang memungkinkan mereka untuk fokus hanya pada proses yang berpusat pada wadah untuk operasi layanan mandiri. Pengembang juga dapat membuat penerapan khusus dan prosedur manajemen, bersama dengan tingkat otomatisasi yang lebih tinggi untuk aplikasi yang terdiri dari beberapa kontainer.
Kubernetes dapat menangani semua beban kerja backend yang signifikan, termasuk aplikasi monolitik, program stateless atau stateful, layanan mikro, layanan, tugas batch, dan semua yang ada di antaranya.
Kubernetes sering dipilih karena manfaat berikut.
- Infrastruktur Kubernetes lebih unggul dari banyak teknologi DevOps.
- Kubernetes memecah wadah menjadi komponen yang lebih kecil untuk pengelolaan yang tepat.
- Kubernetes menyebarkan pembaruan perangkat lunak dengan cepat dan teratur.
- Kubernetes menyediakan platform untuk mengembangkan aplikasi cloud-native.
arsitektur dan komponen Kubernetes
Arsitektur dasar Kubernetes terdiri dari banyak komponen, juga dikenal sebagai komponen K8, jadi sebelum kita langsung masuk, penting untuk mengingat konsep-konsep berikut.
- Arsitektur dasar Kubernetes terdiri dari bidang kontrol yang mengelola node dan node pekerja yang menjalankan aplikasi dalam container.
- Sementara control plane mengelola eksekusi dan komunikasi, node pekerja benar-benar menjalankan kontainer ini.
- Kluster Kubernetes adalah sekelompok node, dan setiap kluster memiliki setidaknya satu node pekerja.
Diagram arsitektur Kubernetes
Pesawat kontrol Kubernetes
Bidang kontrol adalah pusat sistem saraf pusat dari desain kluster Kubernetes, menampung komponen kontrol kluster. Itu juga merekam konfigurasi dan status semua objek Kubernetes di kluster.
Control plane Kubernetes menjaga komunikasi reguler dengan unit komputasi untuk memastikan cluster beroperasi seperti yang diharapkan. Pengontrol mengawasi status objek dan membuat objek sistem fisik, status yang diamati, atau status saat ini agar sesuai dengan status atau spesifikasi yang diinginkan sebagai respons terhadap perubahan cluster.
Bidang kontrol terdiri dari beberapa elemen penting, termasuk server antarmuka pemrograman aplikasi (API), penjadwal, manajer pengontrol, dan lain-lain. Komponen dasar Kubernetes ini menjamin bahwa wadah berjalan dengan sumber daya yang sesuai. Semua komponen ini dapat berfungsi pada satu simpul utama, tetapi banyak perusahaan menduplikasinya di banyak simpul untuk ketersediaan tinggi.
1. Server API Kubernetes
Server API Kubernetes adalah front end dari control plane Kubernetes. Ini memfasilitasi pembaruan, penskalaan, mengonfigurasi data, dan jenis orkestrasi siklus hidup lainnya dengan menawarkan manajemen API untuk berbagai aplikasi. Karena server API adalah gateway, pengguna harus dapat mengaksesnya dari luar cluster. Dalam hal ini, server API adalah terowongan ke pod, layanan, dan node. Pengguna mengautentikasi melalui server API.
2. Penjadwal Kubernetes
Kube-scheduler mencatat statistik pemanfaatan sumber daya untuk setiap node komputasi, mengevaluasi apakah sebuah cluster sehat, dan memutuskan apakah dan di mana kontainer baru harus diterapkan. Penjadwal mengevaluasi keseluruhan kesehatan klaster dan permintaan sumber daya pod, seperti unit pemrosesan pusat (CPU) atau memori. Kemudian ia memilih node komputasi yang sesuai dan menjadwalkan tugas, pod, atau layanan, dengan mempertimbangkan kendala atau jaminan sumber daya, lokalitas data, persyaratan kualitas layanan, anti-afinitas, atau standar afinitas.
3. Manajer pengontrol Kubernetes
Di lingkungan Kubernetes, beberapa pengontrol mengatur status titik akhir (pod dan layanan), token dan akun layanan (ruang nama), node, dan replikasi (penskalaan otomatis). Kube-controller manager, sering dikenal sebagai cloud controller manager atau hanya controller, adalah daemon yang mengelola klaster Kubernetes dengan melakukan berbagai tugas pengontrol.
Pengontrol memantau objek di kluster sambil menjalankan loop kontrol inti Kubernetes. Itu memonitor mereka untuk keadaan yang diinginkan dan yang ada melalui server API. Jika status objek terkelola saat ini dan yang diinginkan tidak cocok, pengontrol mengambil tindakan korektif untuk memindahkan status objek lebih dekat ke status yang diinginkan. Pengontrol Kubernetes juga menangani tugas siklus hidup yang penting.
4. dll
etcd adalah basis data penyimpanan nilai kunci yang terdistribusi dan toleran terhadap kesalahan yang menyimpan data konfigurasi dan informasi status kluster. Meskipun etcd dapat diatur secara independen, ini sering berfungsi sebagai bagian dari control plane Kubernetes.
Algoritma konsensus rakit digunakan untuk menjaga status cluster di etcd. Ini membantu dalam menangani masalah tipikal dalam konteks mesin negara yang direplikasi dan membutuhkan banyak server untuk menyepakati nilai. Rakit menetapkan tiga peran: pemimpin, kandidat, dan pengikut, dan menciptakan konsensus melalui pemungutan suara untuk seorang pemimpin.
Hasilnya, etcd adalah satu-satunya sumber kebenaran (SSOT) untuk semua komponen kluster Kubernetes, yang merespons kueri bidang kontrol dan mengumpulkan berbagai informasi tentang status kontainer, node, dan pod. etcd juga digunakan untuk menyimpan informasi konfigurasi seperti ConfigMaps, subnet, rahasia, dan data status klaster.
Node pekerja Kubernetes
Node pekerja adalah sistem yang menjalankan kontainer yang dikelola bidang kontrol. Kubelet – pengontrol inti Kubernetes – berjalan di setiap node sebagai agen untuk berinteraksi dengan bidang kontrol. Selain itu, setiap node menjalankan mesin runtime container, seperti Docker atau rkt. Komponen lain untuk pemantauan, logging, penemuan layanan, dan tambahan opsional juga dijalankan di node.
Beberapa komponen utama arsitektur kluster Kubernetes adalah sebagai berikut.
Node
Klaster Kubernetes harus memiliki setidaknya satu node komputasi, tetapi dapat memiliki lebih banyak node tergantung pada kebutuhan kapasitas. Karena pod dikoordinasikan dan dijadwalkan untuk dieksekusi pada node, node tambahan diperlukan untuk meningkatkan kapasitas klaster. Node melakukan pekerjaan cluster Kubernetes. Mereka menautkan aplikasi serta jaringan, perhitungan, dan sumber daya penyimpanan.
Node di pusat data dapat berupa mesin virtual cloud-native (VM) atau server bare metal.
Mesin runtime kontainer
Setiap node komputasi menggunakan mesin waktu proses kontainer untuk mengoperasikan dan mengelola siklus hidup kontainer. Kubernetes mendukung runtime yang sesuai dengan inisiatif kontainer terbuka seperti Docker, CRI-O, dan rkt.
Layanan Kubelet
Sebuah kubelet disertakan pada setiap node komputasi. Itu adalah agen yang berkomunikasi dengan control plane untuk menjamin bahwa kontainer di dalam pod beroperasi. Ketika control plane meminta tindakan tertentu dilakukan di sebuah node, kubelet mendapatkan spesifikasi pod melalui server API dan beroperasi. Kemudian memastikan bahwa wadah terkait dalam keadaan baik.
Layanan Kube-proxy
Setiap node komputasi memiliki proxy jaringan yang dikenal sebagai kube-proxy, yang membantu layanan jaringan Kubernetes. Untuk mengelola koneksi jaringan di dalam dan di luar klaster, kube-proxy meneruskan lalu lintas atau bergantung pada lapisan pemfilteran paket sistem operasi.
Proses kube-proxy beroperasi pada setiap node untuk memastikan layanan tersedia untuk pihak lain dan untuk mengatasi subnetting host tertentu. Ini bertindak sebagai proxy jaringan dan penyeimbang beban layanan pada node-nya, menangani perutean jaringan untuk lalu lintas protokol datagram pengguna (UDP) dan protokol kontrol transmisi (TCP). Kube-proxy, pada kenyataannya, merutekan lalu lintas untuk semua titik akhir layanan.
Pod
Sejauh ini, kami telah membahas ide-ide terkait internal dan infrastruktur. Pod, bagaimanapun, sangat penting untuk Kubernetes karena mereka adalah komponen utama yang berinteraksi dengan pengembang komponen yang menghadap ke luar.
Pod adalah unit paling sederhana dalam model container Kubernetes, yang mewakili satu instance aplikasi. Setiap pod terdiri dari sebuah wadah atau beberapa wadah yang terkait erat yang secara logis cocok satu sama lain dan menjalankan aturan yang mengatur fungsi wadah.
Pod memiliki umur yang terbatas dan akhirnya mati setelah ditingkatkan atau diperkecil. Meskipun singkat, mereka menjalankan aplikasi stateful dengan menghubungkan ke penyimpanan persisten.
Pod juga dapat diskalakan secara horizontal, yang berarti mereka dapat menambah atau mengurangi jumlah instance yang beroperasi. Mereka juga mampu melakukan pembaruan bergulir dan penyebaran kenari.
Pod beroperasi pada node secara bersamaan, sehingga mereka berbagi konten dan penyimpanan dan dapat berkomunikasi dengan pod lain melalui localhost. Kontainer dapat menjangkau beberapa komputer, demikian juga pod. Satu node dapat mengoperasikan beberapa pod, masing-masing mengumpulkan banyak container.
Pod adalah unit manajemen pusat dalam ekosistem Kubernetes, berfungsi sebagai batas logis untuk wadah yang berbagi sumber daya dan konteks. Metode pengelompokan pod, yang memungkinkan beberapa proses dependen beroperasi secara bersamaan, mengurangi perbedaan antara virtualisasi dan kontainerisasi.
Jenis polong
Beberapa jenis pod memainkan peran penting dalam model container Kubernetes.
- Tipe default, ReplicaSet , menjamin bahwa jumlah pod yang diberikan dapat beroperasi.
- Deployment adalah metode deklaratif untuk mengelola pod berbasis ReplicaSets. Ini termasuk mekanisme rollback dan rolling update.
- Daemonset memastikan bahwa setiap node menjalankan sebuah instance dari sebuah pod. Layanan cluster seperti pemantauan kesehatan dan penerusan log digunakan.
- StatefulSet dirancang untuk mengelola pod yang harus bertahan atau mempertahankan status.
- Job dan CronJob menjalankan tugas terjadwal satu kali atau yang telah ditentukan sebelumnya.
Komponen arsitektur Kubernetes lainnya
Kubernetes memelihara wadah aplikasi tetapi juga dapat mengelola data aplikasi terkait dalam sebuah cluster. Pengguna Kubernetes dapat meminta sumber daya penyimpanan tanpa memahami infrastruktur penyimpanan yang mendasarinya.
Volume Kubernetes adalah direktori tempat pod dapat mengakses dan menyimpan data. Jenis volume menentukan isi volume, bagaimana jadinya, dan media yang mendukungnya. Volume persisten (PV) adalah sumber daya penyimpanan khusus klaster yang sering disediakan oleh administrator. PV juga bisa hidup lebih lama dari pod tertentu.
Kubernetes bergantung pada citra kontainer , yang disimpan dalam registri kontainer . Ini mungkin daftar pihak ketiga atau yang dibuat oleh organisasi.
Namespace adalah cluster virtual yang ada di dalam cluster fisik. Mereka dirancang untuk menciptakan lingkungan kerja independen untuk banyak pengguna dan tim. Mereka juga mencegah tim saling mengganggu dengan membatasi objek Kubernetes yang dapat mereka akses. Kontainer Kubernetes di dalam pod dapat berkomunikasi dengan pod lain melalui localhost dan berbagi alamat IP dan ruang nama jaringan.
Kubernetes vs. Docker Swarm
Baik Kubernetes maupun Docker adalah platform yang menyediakan pengelolaan kontainer dan penskalaan aplikasi. Kubernetes menyediakan solusi manajemen wadah efektif yang ideal untuk aplikasi dengan permintaan tinggi dengan penyiapan yang rumit. Sebaliknya, Docker Swarm dibangun untuk kesederhanaan, menjadikannya pilihan yang sangat baik untuk aplikasi penting yang cepat diterapkan dan dipelihara.
- Docker Swarm lebih mudah diterapkan dan dikonfigurasi daripada Kubernetes.
- Kubernetes menyediakan skalabilitas all-in-one berdasarkan lalu lintas, sedangkan Docker Swarm memprioritaskan penskalaan cepat.
- Penyeimbangan muatan otomatis tersedia di Docker Swarm tetapi tidak di Kubernetes. Namun, solusi pihak ketiga dapat menautkan penyeimbang muatan eksternal ke Kubernetes.
Tuntutan perusahaan Anda menentukan alat yang tepat.
Solusi orkestrasi wadah
Sistem orkestrasi wadah memungkinkan pengembang meluncurkan beberapa wadah untuk penerapan aplikasi. Manajer TI dapat menggunakan platform ini untuk mengotomatisasi instans administrasi, sumber host, dan menghubungkan kontainer.
Berikut adalah beberapa alat orkestrasi kontainer terbaik yang memfasilitasi penerapan, mengidentifikasi implementasi kontainer yang gagal, dan mengelola konfigurasi aplikasi.
5 perangkat lunak orkestrasi wadah teratas:
- Google Cloud Run
- Layanan Amazon Elastic Container (Amazon ECS)
- Mesin Mirantis Kubernetes
- Mesin Google Kubernetes
- Layanan Amazon Elastic Kubernetes (Amazon EKS)
*Lima solusi orkestrasi kontainer terkemuka dari G2's Spring 2023 Grid Report.
Praktik terbaik dan prinsip desain arsitektur Kubernetes
Menerapkan strategi platform yang mempertimbangkan keamanan, tata kelola, pemantauan, penyimpanan, jaringan, manajemen siklus hidup kontainer, dan orkestrasi sangatlah penting. Namun, Kubernetes sangat menantang untuk diadopsi dan diskalakan, terutama untuk bisnis yang mengelola infrastruktur cloud lokal dan publik. Untuk menyederhanakannya, dibahas di bawah ini adalah beberapa praktik terbaik yang harus dipertimbangkan saat merancang kluster kubernet.
- Pastikan Anda selalu memiliki Kubernetes versi terbaru .
- Investasikan dalam pelatihan untuk tim pengembangan dan operasional.
- Menetapkan tata kelola di seluruh perusahaan . Pastikan alat dan penyedia Anda kompatibel dengan orkestrasi Kubernetes.
- Tingkatkan keamanan dengan menyertakan teknik pemindaian gambar dalam alur kerja continuous integration and delivery (CI/CD) Anda. Kode sumber terbuka yang diunduh dari repositori GitHub harus selalu diperlakukan dengan hati-hati.
- Menerapkan kontrol akses berbasis peran (RBAC) di seluruh klaster. Model berdasarkan hak istimewa paling rendah dan kepercayaan nol harus menjadi norma.
- Hanya manfaatkan pengguna non-root dan buat sistem file hanya-baca untuk melindungi wadah lebih lanjut.
- Hindari nilai default karena deklarasi sederhana kurang rentan terhadap kesalahan dan tujuan komunikasi yang lebih baik.
- Saat menggunakan gambar dasar Docker Hub, berhati-hatilah karena mungkin mengandung malware atau membengkak dengan kode yang tidak diperlukan. Mulailah dengan kode yang ramping dan bersih , lalu tingkatkan. Gambar yang lebih kecil berkembang lebih cepat, menggunakan lebih sedikit ruang penyimpanan, dan menarik gambar lebih cepat.
- Simpan wadah sesederhana mungkin. Satu proses per wadah memungkinkan orkestra untuk melaporkan apakah proses itu sehat atau tidak.
- Hancurkan jika ragu. Jangan memulai ulang jika terjadi kegagalan karena Kubernetes akan memulai ulang wadah yang gagal.
- Jadilah deskriptif . Label deskriptif menguntungkan pengembang saat ini dan masa depan.
- Dalam hal layanan mikro, jangan terlalu spesifik . Setiap fungsi dalam komponen kode logis tidak boleh berupa layanan mikronya.
- Jika memungkinkan, otomatisasi . Anda dapat melewati penerapan Kubernetes manual sekaligus dengan mengotomatiskan alur kerja CI/CD Anda.
- Gunakan pemeriksaan keaktifan dan kesiapan untuk membantu mengelola siklus hidup pod ; jika tidak, pod dapat dihentikan saat menginisialisasi atau menerima permintaan pengguna sebelum siap.
Tips: Jelajahi solusi pengelolaan kontainer untuk penerapan yang lebih baik.
Pertimbangkan wadah Anda
Kubernetes, perangkat lunak manajemen yang berpusat pada wadah, telah menjadi standar de facto untuk menerapkan dan mengoperasikan aplikasi dalam wadah karena penggunaan wadah yang luas dalam bisnis. Arsitektur Kubernetes sederhana dan intuitif. Meskipun memberi manajer TI kontrol yang lebih besar atas infrastruktur dan kinerja aplikasi mereka, ada banyak hal yang harus dipelajari untuk memanfaatkan teknologi secara maksimal.
Tertarik untuk mengeksplorasi subjek lebih lanjut? Pelajari tentang relevansi yang berkembang dari containerisasi dalam komputasi awan!