RancherOS: Linux yang lebih sederhana untuk pecinta Docker

Seperti berbagai server Linux dan distribusi desktop, distribusi Linux berorientasi kontainer memadukan dan mencocokkan berbagai proyek dan komponen untuk membangun infrastruktur kontainer yang lengkap. Distro ini umumnya menggabungkan kernel OS minimal, kerangka kerja orkestrasi, dan ekosistem layanan kontainer. RancherOS tidak hanya cocok dengan cetakannya, tetapi juga mengambil kernel minimal dan paradigma wadah secara ekstrem.

RancherOS adalah platform infrastruktur kontainer yang menjalankan Docker langsung di atas kernel Linux dengan footprint yang diperkecil (20MB). Peternak mengambil OS minimalis unik karena bahkan proses initnya adalah wadah layanan Dockerized. Demikian pula, layanan tingkat sistem tradisional, seperti NTP dan DNS, telah diganti dengan yang setara dalam kontainer.

Sistem operasi minimal memiliki beberapa keunggulan dalam produksi. Menghapus paket dan pustaka yang tidak perlu membuat booting lebih cepat, manajemen versi lebih mudah, dan permukaan serangan yang lebih kecil, yang berarti lebih sedikit patch keamanan. RancherOS mengambil "update" selangkah lebih maju dan mendistribusikan semua layanan sistem sebagai kontainer Docker. Pembaruan keamanan berarti mengunduh gambar baru dan memulai ulang penampung, sebuah proses yang hanya membutuhkan beberapa detik tanpa waktu henti untuk layanan.

Sebagai OS yang dirancang untuk container, RancherOS hampir tidak dapat dikenali oleh seseorang yang berasal dari latar belakang Unix tradisional. Hanya sebagian kecil dari kernel yang dipertahankan — semua hal lainnya dilakukan dalam container. Tetapi jika Anda terbiasa dengan Docker, Anda akan merasa seperti di rumah sendiri di RancherOS.

Didesain untuk Docker

Untuk memahami desain RancherOS, Anda perlu mengingat bahwa sistem Unix tradisional jarang dikonfigurasi, dengan aplikasi berlapis di atas gambar dasar yang stabil. Dalam infrastruktur kontainer, OS dalam arti dapat dibuang dan kemungkinan besar akan sering diubah. Meskipun Anda dapat menggunakan alat seperti Ansible, SaltStack, Puppet, atau Chef untuk mengonfigurasi dan memelihara host kontainer, saat berjalan pada skala lebih mudah menggunakan API yang sama untuk OS seperti yang Anda lakukan untuk kontainer dan meluncurkan instance baru dari OS.

Jadi RancherOS menghapus semuanya kecuali hal-hal penting untuk menjalankan Docker dan agen hosting untuk platform manajemen kontainer seperti Rancher atau Kubernetes. Faktanya RancherOS sangat minim sehingga hanya dua pengguna yang didukung: root dan rancher. Untuk memahami desain ini, yang terbaik adalah memulai dengan ilustrasi arsitektur sistem:

Pengusaha peternakan

RancherOS telah dimasukkan ke dalam container ke titik di mana bahkan proses init, PID 1, dari mana semua proses lainnya muncul, adalah daemon Docker. Meskipun tampaknya merupakan detail kecil, mengganti sistem init tradisional seperti Sysvinit atau Systemd dengan proses init Dockerized adalah salah satu fitur inti RancherOS, karena ia mengatasi beberapa ketidakcocokan dalam arsitektur Systemd dan Docker dengan cara yang bersih. Meskipun kemajuan dalam mengatasi ketidaksesuaian ini sedang dilakukan oleh pengembang Systemd, desain RancherOS memastikan tidak ada masalah di sini, sekarang dan di masa depan, meskipun dengan biaya pengelolaan yang sedikit berbeda.

RancherOS menjalankan dua daemon Docker, System Docker dan User Docker. Semua layanan tingkat sistem seperti konsol, manajemen perangkat, NTP, dan DHCP dikelola oleh system-dockerperintah, sedangkan beban kerja kontainer dikelola dengan dockerperintah tradisional . Perintah-perintah ini identik, kecuali untuk jenis wadah tempat mereka dapat beroperasi. Jadi, jika Anda ingin melihat layanan tingkat sistem apa yang sedang berjalan, Anda harus masuk system-docker ps.

Jika Anda melakukannya, Anda akan melihat bahwa nama-nama di paling kanan - Syslog, NTP, Udev, dll. - semuanya adalah layanan sistem Linux. Menghentikan, memulai, dan memperbarui layanan sistem ditangani dengan cara yang sama seperti pada penampung lainnya, menggunakan API Docker.

Perhatikan juga bahwa wadah layanan sistem yang disebut buruh pelabuhan, yang dimulai oleh Docker Sistem, adalah daemon Docker terpisah untuk mengelola wadah pengguna. Ini adalah pemisahan hak istimewa yang penting. Karena semua wadah pengguna berjalan di dalam wadah Docker Pengguna, menghapus semua wadah pengguna, misalnya, tidak akan menurunkan wadah sistem yang menjalankan layanan RancherOS.

Anda dapat melihat seperti apa beban kerja container pengguna seperti yang biasa Anda lakukan dengan Docker, dengan masuk docker ps. Bahkan shell adalah sebuah wadah (yang bernama konsol), jadi Anda dapat memilih mana yang ingin Anda jalankan. Shell yang tersedia saat ini adalah BusyBox (default), Alpine, CentOS, Debian, Fedora, dan Ubuntu.

Karena layanan sistem adalah kontainer, tidak ada manajemen paket. Untuk mengupgrade layanan, Anda cukup menghentikan container lama, menarik versi baru, dan memulai ulang layanan, semua menggunakan API Docker yang sama.

Instalasi dan konfigurasi RancherOS

Hal pertama yang perlu dilakukan admin Unix tradisional adalah berhenti memikirkan "OS multipengguna" dan mulai memikirkan "platform infrastruktur". RancherOS dirancang untuk disediakan di berbagai lingkungan - termasuk bare metal, mesin virtual, dan sejumlah cloud termasuk AWS dan Google - dengan cara otomatis yang dapat diprediksi.

Saya menginstal ke mesin virtual menggunakan image ISO dan tidak mengalami masalah apa pun dalam penginstalan dasar. Tidak ada opsi atau layar konfigurasi. Anda mem-boot OS (yang secara otomatis memasukkan Anda), mengatur partisi disk untuk RANCHER_STATE, lalu reboot dan konfigurasi.

Jika Anda melihat direktori konfigurasi, / etc, Anda akan melihat tidak ada file / etc / rc, atau banyak lagi, dan apa yang tidak diubah dengan editor teks. RancherOS memiliki setara dengan tiga level run dalam pengertian tradisional yang sesuai dengan System Docker, User Docker, dan Container. Konfigurasi dilakukan oleh bootcmd, yang berjalan sebelum Docker Sistem, dan runcmd, yang berjalan di Docker Sistem, dijalankan sebelum User Docker dimulai.

RancherOS dikonfigurasi dalam dua cara: secara manual dengan menggunakan ros configperintah, dan saat boot menggunakan file konfigurasi cloud-config. Saya menemukan ini agak rumit pada awalnya, terutama jika Anda belum pernah menggunakan cloud-config (petunjuk: gunakan editor yang sadar YAML, seperti Emacs dan Tramp Mode, untuk pengaturan awal). Setelah saya dapat melakukan SSH ke mesin, itu relatif mudah digunakan ros configuntuk mendapatkan konfigurasi yang saya inginkan dan menulis file YAML cloud-config yang sesuai untuk diterapkan pada reboot berikutnya. Karena boot cepat, siklus pengembangan di sini juga cepat.

Apa pun yang Anda ingin konfigurasikan dapat dilakukan dengan file YAML atau ros configtermasuk memuat modul kernel, konfigurasi TLS, dan parameter tuning kernel. Alangkah baiknya memiliki cara untuk mempertahankan investasi yang ada dalam alat manajemen konfigurasi seperti SaltStack dan Puppet, setidaknya sebagian, untuk memudahkan transisi ke platform kontainer. SaltStack's Reactor sepertinya bagus untuk kasus penggunaan ini. Seperti sekarang, kebanyakan orang akan mempelajari cara baru untuk mengelola konfigurasi mesin. Sebagian besar administrator penampung akan menggunakan UI web manajemen penampung peternak, jadi tugas ini mungkin lebih mudah di tingkat itu.

Penyimpanan dan jaringan RancherOS

Saya sebutkan sebelumnya bahwa Anda menginstal RancherOS dengan menentukan perangkat untuk menyimpan status persisten. Dalam kebanyakan situasi, ini adalah satu-satunya disk yang akan digunakan RancherOS. Karena semua layanan berjalan di kontainer Docker, mereka akan menggunakan volume Docker untuk penyimpanan persisten, yang secara kasar mencerminkan arsitektur sistem. Volume sistem menyediakan penyimpanan persisten untuk wadah sistem, volume pengguna untuk layanan konsol, dan volume perintah untuk biner yang digunakan oleh layanan sistem. Sejumlah besar volume dan layanan berarti bahwa mountperintah tersebut tidak akan banyak membantu: ada halaman penuh dari keluaran yang tidak dapat dipahami. Saya berharap dokumentasi menjelaskan hal ini sedikit lebih baik, karena ketekunan adalah topik yang sangat penting untuk dipahami.

Rancher mendukung snapshot langsung dan cadangan volume Docker, memungkinkan pengguna untuk membuat cadangan kontainer stateful dan layanan stateful. Ini tidak termasuk dalam RancherOS, tetapi merupakan bagian dari fitur Konvoi dari sistem manajemen kontainer Rancher. Dengan menggunakan Convoy, Anda dapat mengambil snapshot volume, secara bertahap mencadangkan snapshot ke penyimpanan objek seperti Amazon S3, dan memulihkan volume ke host yang sedang berjalan.

Sistem file ZFS didukung, tetapi saya tidak memiliki kesempatan untuk mencobanya. Mengingat status dokumentasi dan batasan bahwa zpool hanya dapat dipasang di / mnt, saya akan merekomendasikan pengujian menyeluruh sebelum menggunakan ini dalam produksi.

Anda dapat melakukan semua konfigurasi jaringan biasa di RancherOS, tetapi menggunakan file atau rosperintah konfigurasi YAML . Pengaturan jaringan ada di namespace rancher.network.interfaces, tempat Anda mengkonfigurasi DHCP, gateway, MTU, dll. Beberapa NIC, bonding, bridge, dan VLAN dapat dikonfigurasi dengan cara yang sama. DNS ada di ruang kunci rancher.networks.dns. Sampai Anda terbiasa dengan pemetaan namespace, perkirakan untuk melakukan sedikit penggalian.

Upgrade dan downgrade RancherOS

Peningkatan dan penurunan di tempat sangat mudah. Anda perlu memutakhirkan (atau menurunkan) dua sistem: OS dan mesin Docker. Mengelola keduanya itu mudah, dan hanya membutuhkan beberapa detik menggunakan, Anda dapat menebaknya, rosperintahnya. Yang perlu Anda lakukan adalah memilih versi OS yang ingin Anda jalankan dan reboot. Saya berharap semua peningkatan dan penurunan Unix berjalan lancar. Misalnya, menurunkan versi dari 1.0.1 ke 1.0.0 membutuhkan waktu kurang dari satu menit:

Pengusaha peternakan

Bagus. Jika Anda ingin mengganti mesin Docker, Anda dapat melakukannya dengan mudah:

ros engine switch docker-1.11.2

RancherOS adalah sistem operasi kecil yang bagus. Pendekatannya terhadap konfigurasi sistem dan manajemen paket akan menjadi baru dan berbeda dengan administrator sistem tradisional, dan dokumentasinya tidak selalu seperti yang diharapkan. Tetapi jika Anda mengenal Docker, Anda tahu sebagian besar dari apa yang Anda butuhkan untuk menjalankan RancherOS.

Jenis baru wadah ini mencapai kematangan dan penyebaran produksi wadah adalah kemungkinan asli untuk pengguna awal. RancherOS memudahkan untuk membangun infrastruktur hosting kontainer, tetapi keterampilan baru diperlukan.