
Suatu hari, insinyur Amerika Andrew Rynhard
mempresentasikan proyek yang menarik: distribusi Linux kompak yang dirancang khusus untuk menjalankan kluster Kubernetes. Itu menerima nama dari mitologi Yunani kuno -
Talos .
Proyek ini muncul terinspirasi oleh
tweet Kelsey Hightower pada tahun 2015, di mana ia mengatakan bahwa kami hanya harus menunggu KubeOS bersyarat muncul (setelah itu kehidupan lingkungan yang berawan akhirnya akan indah):
Ngomong-ngomong, dengan munculnya Talos, cerita ini berlanjut : seseorang menjawab tweet historis bahwa sistem semacam itu sudah muncul, dan penulis Talos mengatakan bahwa dia akan senang jika Kelsey melihat proyek tersebut. Reaksi yang terakhir, bagaimanapun, belum diikuti.Rupanya, pengembangan Talos dilakukan oleh satu orang
(mewakili dirinya dalam seluruh perusahaan - Otonomi ) - butuh lebih dari satu tahun. Dan sekarang, ketika status ketersediaan minimum tercapai, penulis berharap bahwa perwakilan lain dari komunitas asli Kubernet / cloud akan bergabung dengannya. Jadi apa inti dari proyek ini?
Prinsip dan Fitur Talos
Talos diposisikan sebagai distribusi Linux modern yang dibuat khusus (dan eksklusif!) Untuk Kubernetes. Untuk mencapai tujuan dalam implementasinya, patuhi pendekatan berikut:
Minimalisme
Minimalisme di mana-mana adalah salah satu pilar arsitektur Talos. Salah satu contoh mencolok di sini adalah
layanan inisialisasi yang digunakan, yang (bertentangan dengan tren modern di bidang ini) mengikuti filosofi UNIX bahwa "setiap program melakukan satu hal, tetapi baik":
Kami ingin membuat init fokus pada satu tugas - meluncurkan Kubernetes. Ini sama sekali tidak memiliki mekanisme untuk tindakan lain.
Para pengembang melangkah lebih jauh dan merampas sistem operasi mereka dari akses pengguna ke host yang akrab dengan administrator sistem:
Talos tidak memiliki shell perintah, atau daemon SSH, atau bahkan kemampuan untuk memulai prosesnya sendiri pada host. Dan sungguh: mengapa semua ini jika Anda perlu menjalankan Kubernetes dan banyak lagi? Hampir semua proses di Talos beroperasi dalam wadah.
Namun, karena dunia tidak begitu sempurna (untuk OS berfungsi penuh "dengan sendirinya"), masih ada alat untuk mengoperasikan OS:
- osd daemon, diimplementasikan pada prinsip menyediakan hak minimum yang diperlukan (Prinsip Least Privilege) dan menawarkan API (berdasarkan gRPC) untuk mengelola node;
- Utilitas osctl CLI memungkinkan Anda untuk berkomunikasi dengan layanan osd, yang berjalan pada setiap node.
Jadi, satu set kemampuan operasi dasar telah diimplementasikan: me-reboot layanan dan node cluster, menerima log kernel (dmesg) dan dari kontainer, memasukkan data ke file konfigurasi node, dll.
Semua komponen ini (init, osd, osctl ...), serta
beberapa yang lain dalam kit distribusi,
ditulis dalam Go . Ngomong-ngomong, semua kode sumber didistribusikan di bawah ketentuan Open Source-license Mozilla Public License 2.0.
Keamanan
Pendekatan minimalis yang diuraikan di atas (semua yang diperlukan
hanya untuk meluncurkan Kubernetes) + prinsip mengeluarkan hanya sedikit hak istimewa dengan sendirinya mengurangi permukaan serangan potensial. Juga di Talos:
- kernel yang disertakan dikonfigurasikan sesuai dengan rekomendasi Proyek Kernel Self Protection ( KSSP ), yang berfokus pada kemampuan kernel untuk secara independen melindungi terhadap potensi bug dan kerentanan (alih-alih menggunakan utilitas userspace untuk tujuan yang sama);
- sistem file root dipasang di read-only, yang - dikombinasikan dengan tidak adanya shell / SSH - membuat sistem tidak dapat diubah;
- menggunakan TLS dua arah (mTLS) untuk berinteraksi dengan API;
- Pengaturan dan konfigurasi Kubernetes diterapkan sesuai dengan pedoman CIS (Pusat Keamanan Internet).
Keuntungan tambahan yang timbul dari minimalisme dan fokus pada kekekalan adalah
prediktabilitas sistem dalam perilaku (karena jumlah faktor yang mempengaruhi lingkungan berkurang).
Relevansi
Para penulis berjanji untuk mendasarkan Talos pada rilis hulu dari Kubernet kedua dari belakang (namun, K8 1.13.3
didukung saat ini) dan rilis kernel LTS Linux terbaru yang tersedia (sekarang menggunakan 4.19.10).
Komponen sistem
Komponen utama dari distribusi (selain utilitas kernel dan "proprietary") adalah:
- musl-libc - sebagai pustaka C standar;
- golang - untuk
init
dan alat lainnya; - gRPC - untuk API;
- containerd - untuk memulai layanan sistem dalam wadah (digunakan dengan plugin CRI untuk Kubernetes);
- kubeadm - untuk menyebarkan cluster.
Bekerja dengan Talos
Contoh penggunaan talos untuk penyebaran AWS, KVM, dan Xen disediakan dalam
dokumentasi proyek . Untuk menggambarkan dengan cepat bagaimana ini terlihat, berikut adalah algoritma instalasi untuk mesin virtual Linux KVM:
1. Menginstal master node pada host:
docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdb -f -p bare-metal \ -u http://${IP}:8080/master.yaml
2. Membuat VM:
virt-install -n master --description "Kubernetes master node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdb \ --network bridge=br0,model=e1000,mac=52:54:00:A8:4C:E1 \ --graphics none --boot hd --rng /dev/random
3. Tindakan serupa untuk membuat simpul kerja:
docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdc -f -p bare-metal \ -u http://${IP}:8080/worker.yaml virt-install -n master --description "Kubernetes worker node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdc \ --network bridge=br0,model=e1000,mac=52:54:00:B9:5D:F2 \ --graphics none --boot hd --rng /dev/random
Konfigurasi interaksi antara osd dan osctl pada dasarnya bermuara pada menghasilkan kunci untuk otentikasi mereka (sudah disebutkan mTLS) dan dijelaskan di
sini .
Pekerjaan lebih lanjut dengan mereka datang ke perintah-perintah seperti
osctl reboot
osctl stats
,
osctl stats
osctl logs
dan
osctl logs
. Demonstrasi output kontainer di namespace
k8s.io
:
$ osctl ps -k NAMESPACE ID IMAGE PID STATUS k8s.io 0ca1… sha256:da86… 2341 RUNNING k8s.io 356f… sha256:da86… 2342 RUNNING … k8s.io e42e… sha256:4ff8… 2508 RUNNING k8s.io kubelet k8s.gcr.io/… 2068 RUNNING
Proses mengkonfigurasi cluster Kubernetes dengan Talos tersedia di
sini (mater node) dan di
sini (pekerja).
Status dan Prospek
Proyek ini dalam tahap versi alfa (rilis terbaru adalah
v0.1.0-alpha.18 ) dan, tentu saja, pada tahap ini terlihat lebih seperti percobaan yang menarik daripada apa pun yang benar-benar dekat dengan produksi.
Namun, gelombang minat pada Talos setelah pengumumannya baru-baru ini (sudah lebih dari 600 bintang di GitHub) dan panggilan satu-satunya penulis untuk kreativitas bersama dapat berfungsi sebagai insentif yang sangat baik untuk pengembangannya.
Aktivitas proyek talos dalam beberapa hari terakhirPaling tidak, distribusi berisi ide-ide asli cloud yang relevan dengan dunia, implementasi kualitas yang merupakan masalah waktu.
PS
Baca juga di blog kami: