Linux Containers telah ada selama beberapa waktu tetapi menjadi tersedia secara luas ketika diperkenalkan di kernel Linux pada tahun 2008. Container adalah komponen aplikasi yang ringan dan dapat dieksekusi yang menggabungkan kode sumber aplikasi dengan pustaka OS dan dependensi yang diperlukan untuk menjalankan kode di lingkungan apa pun. Selain itu, mereka menawarkan teknologi pengemasan dan pengiriman aplikasi sambil memanfaatkan isolasi aplikasi dengan fleksibilitas metode penerapan berbasis gambar.
Linux Containers menggunakan grup kontrol untuk manajemen sumber daya, ruang nama untuk isolasi proses sistem, SELinux Security untuk memungkinkan penyewaan yang aman dan mengurangi ancaman atau eksploitasi keamanan. Teknologi ini menyediakan lingkungan untuk memproduksi, menjalankan, mengelola, dan mengatur container.
Artikel ini adalah panduan pengantar untuk elemen utama arsitektur container Linux, bagaimana container dibandingkan dengan virtualisasi KVM, container berbasis gambar, container buruh pelabuhan, dan alat orkestrasi container.
Arsitektur wadah
Wadah Linux menggunakan elemen kernel Linux utama seperti cgroups, SELinux, dan ruang nama. Namespace memastikan isolasi proses sistem sementara cgroups (grup kontrol), seperti namanya, digunakan untuk mengontrol sumber daya sistem Linux. SELinux digunakan untuk memastikan pemisahan antara host dan container dan antara container individu. Anda dapat menggunakan SELinux untuk mengaktifkan multi-tenancy yang aman dan mengurangi potensi ancaman dan eksploitasi keamanan. Setelah kernel, kami memiliki antarmuka manajemen yang berinteraksi dengan komponen lain untuk mengembangkan, mengelola, dan mengatur container.
SELinux
Keamanan adalah komponen penting dari setiap sistem atau arsitektur Linux. SELinux harus menjadi garis pertahanan pertama untuk lingkungan container yang aman. SELinux adalah arsitektur keamanan untuk sistem Linux yang memberi sysadmin lebih banyak kontrol atas akses ke arsitektur container Anda. Anda dapat mengisolasi container sistem host dan container lain dari satu sama lain.
Lingkungan container yang andal memerlukan sysadmin untuk membuat kebijakan keamanan yang disesuaikan. Sistem Linux menyediakan alat yang berbeda seperti podman atau udica untuk menghasilkan kebijakan wadah SELinux. Beberapa kebijakan container mengontrol cara container mengakses sumber daya host seperti drive penyimpanan, perangkat, dan alat jaringan. Kebijakan seperti itu akan memperkuat lingkungan container Anda dari ancaman keamanan dan menciptakan lingkungan yang menjaga kepatuhan terhadap peraturan.
Arsitektur menciptakan pemisahan aman yang mencegah proses root di dalam wadah mengganggu layanan lain yang berjalan di luar wadah. Misalnya, sistem secara otomatis menetapkan wadah Docker konteks SELinux yang ditentukan dalam kebijakan SELinux. Akibatnya, SELinux selalu tampak dinonaktifkan di dalam wadah meskipun dijalankan dalam mode penegakan pada sistem atau sistem operasi host.
Catatan:Menonaktifkan atau menjalankan SELinux dalam mode permisif pada mesin host tidak akan memisahkan wadah secara aman .
Ruang nama
Ruang nama kernel menyediakan isolasi proses untuk wadah Linux. Mereka memungkinkan pembuatan abstraksi sumber daya sistem di mana masing-masing muncul sebagai contoh terpisah untuk proses dalam namespace. Intinya, container dapat menggunakan sumber daya sistem secara bersamaan tanpa menimbulkan konflik. Ruang nama mencakup jaringan, pemasangan, ruang nama UTS, ruang nama IPC, ruang nama PID.
- Mount namespace mengisolasi titik mount sistem file yang tersedia untuk sekelompok proses. Layanan lain di ruang nama pemasangan yang berbeda dapat memiliki tampilan alternatif dari hierarki sistem file. Misalnya, setiap wadah di lingkungan Anda dapat memiliki direktori /var sendiri.
- Ruang nama UTS:mengisolasi nama node dan pengidentifikasi sistem nama domain. Ini memungkinkan setiap kontainer memiliki nama host dan nama domain NIS yang unik.
- Ruang nama jaringan membuat isolasi pengontrol jaringan, firewall, dan tabel IP perutean. Intinya, Anda dapat mendesain lingkungan container untuk menggunakan tumpukan jaringan virtual terpisah dengan perangkat virtual atau fisik dan bahkan menetapkan alamat IP unik atau aturan iptable.
- Ruang nama PID memungkinkan proses sistem dalam wadah yang berbeda untuk menggunakan PID yang sama. Intinya, setiap container dapat memiliki proses init yang unik untuk mengelola siklus hidup container atau menginisialisasi tugas sistem. Setiap wadah akan memiliki direktori /proc uniknya sendiri untuk memantau proses yang berjalan di dalam wadah. Perhatikan bahwa wadah hanya mengetahui proses/layanannya dan tidak dapat melihat proses lain yang berjalan di berbagai bagian sistem Linux. Namun, sistem operasi host mengetahui proses yang berjalan di dalam wadah.
- Ruang nama IPC – mengisolasi sumber daya komunikasi antarproses sistem (Sistem V, objek IPC, antrian pesan POSIX) untuk memungkinkan wadah yang berbeda membuat segmen memori bersama dengan nama yang sama. Namun, mereka tidak dapat berinteraksi dengan segmen memori wadah lain atau memori bersama.
- Ruang nama pengguna – memungkinkan sysadmin untuk menentukan UID host yang didedikasikan untuk sebuah wadah. Misalnya, proses sistem dapat memiliki hak akses root di dalam wadah tetapi juga tidak memiliki hak istimewa untuk operasi di luar wadah.
Grup kontrol
Cgroup kernel memungkinkan manajemen sumber daya sistem antara berbagai kelompok proses. Cgroup mengalokasikan waktu CPU, bandwidth jaringan, atau memori sistem di antara tugas-tugas yang ditentukan pengguna.
Virtualisasi Wadah VS KVM
Baik container maupun teknologi virtualisasi KVM memiliki kelebihan dan kekurangan yang memandu kasus penggunaan atau lingkungan untuk diterapkan. Sebagai permulaan, mesin virtual KVM memerlukan kernel sendiri sementara container berbagi kernel host. Jadi, salah satu keuntungan utama container adalah meluncurkan lebih banyak container daripada mesin virtual yang menggunakan sumber daya perangkat keras yang sama.
Kontainer Linux
Keuntungan | Kekurangan |
---|---|
Dirancang untuk mengelola isolasi aplikasi dalam container. | Isolasi container tidak pada tingkat yang sama dengan virtualisasi KVM. |
Konfigurasi atau perubahan host di seluruh sistem terlihat di setiap penampung. | Peningkatan kompleksitas dalam mengelola container. |
Container ringan dan menawarkan skalabilitas arsitektur Anda yang lebih cepat. | Memerlukan keterampilan sysadmin yang ekstensif dalam mengelola log, data persisten dengan izin baca dan tulis yang tepat. |
Ini memungkinkan pembuatan dan distribusi aplikasi dengan cepat. | |
Ini memfasilitasi penyimpanan dan biaya operasional yang lebih rendah sehubungan dengan pengembangan dan pengadaan gambar kontainer. |
Area aplikasi:
- Arsitektur aplikasi yang memerlukan penskalaan secara ekstensif.
- Arsitektur layanan mikro.
- Pengembangan aplikasi lokal.
Virtualisasi KVM
Keuntungan | Kekurangan |
---|---|
KVM memungkinkan boot penuh sistem operasi seperti Linux, Unix, macOS, dan Windows. | Memerlukan administrasi ekstensif untuk seluruh lingkungan virtual |
Mesin virtual tamu diisolasi dari perubahan host dan konfigurasi sistem. Anda dapat menjalankan berbagai versi aplikasi pada host dan mesin virtual. | Perlu waktu lebih lama untuk menyiapkan lingkungan virtual baru, bahkan dengan alat otomatisasi. |
Menjalankan kernel terpisah memberikan keamanan dan pemisahan yang lebih baik. | Biaya operasional yang lebih tinggi terkait dengan mesin virtual, administrasi, dan pengembangan aplikasi |
Hapus alokasi sumber daya. |
Area aplikasi:
- Lingkungan sistem yang membutuhkan sumber daya dedikasi yang jelas.
- Sistem yang memerlukan kernel independen yang berjalan.
Wadah berbasis gambar
Aplikasi paket container berbasis gambar dengan run time stack individual, menjadikan container yang disediakan independen dari sistem operasi host. Intinya, Anda dapat menjalankan beberapa instance aplikasi, masing-masing pada platform yang berbeda. Untuk memungkinkan arsitektur seperti itu, Anda harus men-deploy dan menjalankan container dan waktu menjalankan aplikasi sebagai gambar.
Arsitektur sistem yang terbuat dari wadah berbasis gambar memungkinkan Anda meng-host beberapa instance aplikasi dengan overhead dan fleksibilitas minimal. Ini memungkinkan portabilitas kontainer yang tidak bergantung pada konfigurasi khusus host. Gambar bisa ada tanpa wadah. Namun, wadah perlu menjalankan Gambar agar ada. Intinya, container bergantung pada Gambar untuk membuat lingkungan waktu proses untuk menjalankan aplikasi.
Wadah
Wadah dibuat berdasarkan gambar yang menyimpan data konfigurasi yang diperlukan untuk membuat komponen aktif yang berjalan sebagai aplikasi. Meluncurkan wadah akan membuat lapisan yang dapat ditulisi di atas gambar yang ditentukan untuk menyimpan perubahan konfigurasi.
Gambar
Gambar adalah snapshot statis dari data konfigurasi container pada waktu tertentu. Ini adalah lapisan hanya-baca di mana Anda dapat menentukan semua perubahan konfigurasi di lapisan paling atas yang dapat ditulis. Anda dapat menyimpannya hanya dengan membuat gambar baru. Setiap gambar bergantung pada satu atau beberapa gambar induk.
Gambar-platform
Gambar platform tidak memiliki induk. Sebagai gantinya, Anda dapat menggunakannya untuk menentukan lingkungan runtime, paket, dan utilitas yang diperlukan untuk meluncurkan dan menjalankan aplikasi dalam container. Misalnya, untuk bekerja dengan container Docker, Anda menarik image platform hanya-baca. Setiap perubahan yang ditentukan tercermin dalam gambar yang disalin yang ditumpuk di atas Gambar Docker awal. Selanjutnya, ia membuat lapisan aplikasi yang berisi pustaka dan dependensi tambahan untuk aplikasi dalam container.
Wadah bisa sangat besar atau kecil tergantung pada jumlah paket dan dependensi yang disertakan dalam lapisan aplikasi. Selain itu, pelapisan gambar lebih lanjut dimungkinkan dengan perangkat lunak dan dependensi pihak ketiga yang independen. Jadi, dari sudut pandang operasional, mungkin ada banyak lapisan di belakang sebuah Gambar. Namun, lapisan hanya muncul sebagai satu wadah bagi pengguna.
Kontainer buruh pelabuhan
Docker adalah lingkungan virtual kemas untuk mengembangkan, memelihara, menyebarkan, dan mengatur aplikasi dan layanan. Kontainer Docker menawarkan lebih sedikit overhead dalam mengonfigurasi atau menyiapkan lingkungan virtual. Kontainer tidak memiliki kernel terpisah dan dijalankan langsung dari sistem operasi host. Ini menggunakan ruang nama dan grup kontrol untuk menggunakan sumber daya OS host secara efisien.
Instance container menjalankan satu proses secara terpisah tanpa memengaruhi aplikasi lain. Intinya, setiap aplikasi dalam container memiliki file konfigurasi yang unik.
Demon Docker memungkinkan container untuk melakukan ping back dan mengalokasikan sumber daya ke aplikasi container tergantung pada seberapa banyak yang perlu dijalankan. Berbeda dengan wadah Linux (LXC), wadah buruh pelabuhan mengkhususkan diri dalam menyebarkan aplikasi wadah tunggal. Ini berjalan secara native di Linux tetapi juga mendukung sistem operasi lain seperti macOS dan Windows.
Manfaat utama kontainer buruh pelabuhan
- Portabilitas:– Anda dapat menerapkan aplikasi dalam container di sistem lain tempat Docker Engine berjalan, dan aplikasi Anda akan bekerja persis seperti saat Anda mengujinya di lingkungan pengembangan Anda. Sebagai pengembang, Anda dapat berbagi aplikasi buruh pelabuhan dengan percaya diri tanpa harus menginstal paket atau perangkat lunak tambahan terlepas dari sistem operasi yang digunakan tim Anda. Docker berjalan seiring dengan pembuatan versi, dan Anda dapat berbagi aplikasi dalam container dengan mudah tanpa merusak kode.
- Container dapat berjalan di mana saja dan di OS apa pun yang didukung seperti Windows, VM, macOS, Linux, lokal, dan di Cloud Publik. Popularitas gambar Docker yang meluas telah menyebabkan adopsi ekstensif oleh penyedia cloud seperti Amazon Web Services (AWS), Google Compute Platform (GCP), dan Microsoft Azure.
- Kinerja:– Kontainer tidak berisi sistem operasi yang membuat footprint yang jauh lebih kecil daripada mesin virtual dan umumnya lebih cepat untuk dibuat dan dimulai.
- Agility:– Performa dan portabilitas container memungkinkan tim untuk membuat proses pengembangan yang gesit yang meningkatkan strategi continuous integration dan continuous delivery (CI/CD) untuk menghadirkan perangkat lunak yang tepat pada waktu yang tepat.
- Isolasi:– Wadah Docker dengan aplikasi juga menyertakan versi relevan dari semua dependensi dan perangkat lunak yang dibutuhkan aplikasi Anda. Wadah Docker tidak tergantung satu sama lain, dan wadah/aplikasi lain yang memerlukan versi berbeda dari dependensi perangkat lunak yang ditentukan dapat ada dalam arsitektur yang sama tanpa masalah. Misalnya, ini memastikan bahwa aplikasi seperti Docker MariaDB hanya menggunakan sumber dayanya untuk mempertahankan kinerja sistem yang konsisten.
- Skalabilitas:– Docker memungkinkan Anda membuat container dan aplikasi baru sesuai permintaan.
- Kolaborasi:– Proses containerization di Docker memungkinkan Anda untuk mengelompokkan proses pengembangan aplikasi. Hal ini memungkinkan developer untuk berbagi, berkolaborasi, dan memecahkan potensi masalah dengan cepat tanpa perlu melakukan perbaikan besar-besaran untuk menciptakan proses pengembangan yang hemat biaya dan waktu.
Orkestrasi wadah
Orkestrasi container adalah proses otomatisasi penerapan, penyediaan, pengelolaan, penskalaan, keamanan, siklus hidup, penyeimbangan beban, dan jaringan layanan dan beban kerja dalam container. Manfaat utama dari orkestrasi adalah otomatisasi. Orchestration mendukung DevOps atau proses pengembangan tangkas yang memungkinkan tim untuk mengembangkan dan menerapkan dalam siklus berulang dan merilis fitur baru lebih cepat. Alat orkestrasi populer termasuk Kubernetes, Amazon ECR Docker Swarm, dan Apache Mesos.
Orkestrasi kontainer pada dasarnya melibatkan proses tiga langkah di mana pengembang menulis file konfigurasi (YAML atau JSON) yang mendefinisikan status konfigurasi. Alat orkestrasi kemudian menjalankan file untuk mencapai status sistem yang diinginkan. File YAML atau JSON biasanya mendefinisikan komponen berikut:
- Gambar penampung yang membentuk aplikasi dan registri gambar.
- Ini menyediakan wadah dengan sumber daya seperti penyimpanan.
- Ketiga, mendefinisikan konfigurasi jaringan antar container.
- Ini menentukan versi gambar.
Alat orkestrasi menjadwalkan penyebaran wadah atau replika wadah ke host berdasarkan kapasitas CPU yang tersedia, memori, atau batasan lain yang ditentukan dalam file konfigurasi. Setelah Anda menerapkan container, alat orkestrasi mengelola siklus hidup aplikasi berdasarkan file definisi container (Dockerfile). Misalnya, Anda dapat menggunakan Dockerfile untuk mengelola aspek berikut:
- Mengelola skalabilitas naik atau turun, alokasi sumber daya, penyeimbangan beban.
- Mempertahankan ketersediaan dan kinerja container jika terjadi pemadaman atau kekurangan sumber daya sistem.
- Kumpulkan dan simpan data log untuk memantau kesehatan dan kinerja aplikasi dalam container.
Kubernetes
Kubernetes adalah salah satu platform orkestrasi container paling populer yang digunakan untuk mendefinisikan arsitektur dan operasi aplikasi cloud-native sehingga pengembang dapat fokus pada pengembangan produk, pengkodean, dan inovasi. Kubernetes memungkinkan Anda membangun aplikasi yang menjangkau banyak container, menjadwalkannya di seluruh cluster, menskalakannya, dan mengelola kesehatan dan kinerjanya dari waktu ke waktu. Intinya, ini menghilangkan proses manual yang terlibat dalam penerapan dan penskalaan aplikasi dalam container.
Komponen utama Kubernetes
- Cluster:Bidang kontrol dengan satu atau lebih mesin/node komputasi.
- Control plane:Kumpulan proses yang mengontrol node yang berbeda.
- Kubelet:Ini berjalan pada node dan memastikan container dapat dimulai dan dijalankan secara efektif.
- Pod:Sekelompok container yang di-deploy ke satu node. Semua container dalam pod berbagi alamat IP, nama host, IPC, dan sumber daya lainnya.
Kubernetes telah menjadi standar industri dalam orkestrasi container. Ini menyediakan kemampuan wadah yang luas, menampilkan komunitas kontributor dinamis, sangat dapat diperluas dan portabel. Anda dapat menjalankannya di berbagai lingkungan seperti lokal, publik, atau cloud dan menggunakannya secara efektif dengan teknologi container lainnya.
Menutup
Kontainer adalah komponen aplikasi yang ringan dan dapat dieksekusi yang terdiri dari kode sumber, pustaka OS, dan dependensi yang diperlukan untuk menjalankan kode di lingkungan apa pun. Kontainer menjadi tersedia secara luas pada tahun 2013 ketika platform Docker dibuat. Akibatnya, Anda akan sering menemukan pengguna di komunitas Linux menggunakan container Docker dan container secara bergantian untuk merujuk pada hal yang sama.
Ada beberapa keuntungan menggunakan container Docker. Namun, tidak semua aplikasi cocok untuk dijalankan dalam container. Sebagai aturan umum, aplikasi dengan antarmuka pengguna grafis tidak cocok untuk digunakan dengan Docker. Oleh karena itu, layanan mikro dalam container atau arsitektur tanpa server sangat penting untuk aplikasi cloud-native.
Artikel ini telah memberi Anda panduan pengantar tentang container di Linux, image Docker, dan alat orkestrasi container seperti Kubernetes. Panduan ini akan dibangun berdasarkan penggunaan container, Docker Engine, dan Kubernetes tempat developer dapat belajar mengembangkan dan berbagi aplikasi dalam container.