Operator Kubernetes adalah mekanisme yang mudah untuk memperluas kapabilitas platform peti kemas ini, yang telah mendapatkan pengakuan luas di lingkungan para insinyur operasi dan simpatisan mereka. Kami berbicara tentang bagaimana mereka diatur dan bekerja di tahun 2017 yang sudah jauh. Dan pada bulan April tahun lalu, kami mempresentasikan proyek shell-operator open source , yang sangat menyederhanakan proses menciptakan operator Kubernetes.
Untuk ini, kerangka kerja dikembangkan yang memungkinkan Anda untuk menjalankan skrip sewenang-wenang (dalam Bash, Python, dll.) Dalam acara peristiwa tertentu yang terjadi di gugus K8s.
Selama masa lalu, operator shell telah memperoleh basis penggunanya (lihat detail di akhir artikel) dan, tentu saja, fitur baru. Pada kesempatan rilis terbaruv1.0.0-beta.11 (tentang status beta, lihat di bawah) kami memutuskan untuk membicarakan tentang apa proyek tersebut selama keberadaannya, sejak pengumuman versi publik pertama.
Tentang perangkat dan tujuannya
Tetapi mari kita mulai dengan penjelasan singkat tentang cara kerja shell-operator dan mengapa, pada prinsipnya, mungkin diperlukan.
Shell-operator beroperasi di pod cluster Kubernetes. Itu disajikan di sana sebagai:
- Go binary yang berlangganan acara di API K8s dan meluncurkan pengait (memberi mereka detail tentang apa yang terjadi);
- satu set kait, yang masing-masing adalah skrip Bash, skrip Python, atau file yang dapat dieksekusi lainnya.
Kait:
- mereka sendiri menentukan peristiwa dan objek mana yang mereka butuhkan;
- melakukan tindakan yang diperlukan jika terjadi peristiwa ini di K8.
Dengan demikian, operator shell adalah lapisan antara peristiwa di API Kubernetes dan skrip untuk memprosesnya.
Mengapa operator shell dibuat sama sekali? Operator adalah standar untuk "melakukan hal yang benar" dalam Kubernetes, tetapi mengembangkannya secara penuh (menggunakan Go menggunakan SDK yang sesuai ) tidak mudah. Kehadiran kerangka kerja sederhana seperti operator shell secara signifikan menurunkan ambang batas untuk memasuki area ini, memungkinkan Anda untuk dengan cepat dan efisien menyelesaikan masalah operasional kecil * di dalam cluster. Dan, sama pentingnya, lakukan dengan cara yang benar.
Tugas apa yang sedang kita bicarakan? Contoh siap menggunakan operator shell dapat ditemukan di repositori proyek . Di kami, di Flant, kami menggunakannya sebagai perpustakaan(ya, itu juga mungkin!) . Itu menjadi dasar untuk operator addon , yang mengelola komponen tambahan di Kubernetes.
NB : Pengumuman proyek Sumber Terbuka ini (operator tambahan) dapat ditemukan di sini . Dan dalam laporan " Memperluas dan Melengkapi Kubernet ", kami berbicara secara rinci tentang alasan kemunculannya, hubungan dengan operator-shell dan prinsip-prinsip operasi.
Sekarang tentang perubahan utama yang diperkenalkan ke operator-shell selama setahun terakhir.
Inovasi besar
Dalam versi pertama operator shell, hanya satu objek yang tersedia untuk hook - yang terkait dengan acara dari cluster. Evolusi kait yang digunakan dalam addon-operator menghasilkan kait berlangganan perubahan objek, tetapi panggilan
kubectl
untuk mendapatkan daftar terbaru dari objek lain . Untuk menghapus panggilan yang tidak perlu kubectl
dan dengan demikian mempercepat pekerjaan kait, beberapa kemungkinan telah diterapkan untuk mengakses daftar objek saat ini:
- Sinkronisasi + Mode acara, ketika kait di awal menerima daftar objek aktual, dan kemudian bekerja dengan hanya satu objek. Mode ini diaktifkan secara default - kita dapat mengatakan bahwa hasilnya adalah analog dari rekonsiliasi loop dari operator-SDK.
- snapshot', . (Snapshot’ Kubernetes, .)
- snapshot'. , , , .
- Juga dimungkinkan untuk memantau sumber daya , tetapi tidak bereaksi terhadap perubahannya, yaitu. "Akumulasi snapshot". Misalnya, sebuah kait dapat bereaksi terhadap perubahan dalam CustomResource dan masih menerima objek ConfigMap yang sebenarnya tanpa panggilan tambahan
kubectl
. (Lihat benderaexecuteHookOnSynchronization
dan untuk detailnyaexecuteHookOnEvent
.)
Inovasi penting lainnya:
- Berkat transisi untuk menggunakan klien Kubernetes yang dinamis di operator-shell, menjadi mungkin untuk berlangganan ke semua yang ada
kind
(tipe sumber daya di API Kubernetes), termasuk Sumber Daya Kustom. - (.
queue
). endpoints. - .
- « », namespace’ .
- scraping' Prometheus'. .
- , shell.
- YAML- ( JSON).
- JSON logrus (.
LOG_TYPE
). -
listen-address
hostNetwork: true
. - rate limit (qps, burst) Kubernetes API.
-
kube-server
Kubernetes API. - .
- jqFilter libjq-go, jq.
- zombie reaper,
SIGCHLD
-, Bash-. — tini. - Berbagai penyederhanaan telah diterapkan untuk menghubungkan shell-operator sebagai perpustakaan.
- Versi terbaru
kubectl
(dari 1.13 hingga 1.17.4) dan membuat perakitan berdasarkan alpine-3.11.
Status dan rencana
Proyek shell-operator masih resmi dalam versi beta . Meskipun demikian, seperti disebutkan di atas, kami sangat intensif menggunakannya sebagai dasar untuk addon-operator - alat yang terus-menerus digunakan di banyak (100+) cluster K8s.
Untuk rilis yang stabil dari operator-shell sebagai proyek publik, kami merencanakan (setidaknya):
- tambahkan pengujian e2e ( # 63 ),
- mengimplementasikan pembangunan multi-arsitektur ( # 184 ),
- perbarui klien-pergi ke 0.18.0, mengimplementasikan
context
dan akhirnya menangani caching objek di klien-go ( # 188 ).
Pengakuan komunitas
Selama bertahun-tahun, kami telah melihat minat masyarakat yang jelas terhadap operator shell:
- Proyek ini disebutkan tidak hanya dalam berbagai daftar utilitas bermanfaat untuk Kubernetes ( awesome-kubernetes , Cloud Zone ), tetapi juga di webinar khusus ( Weaveworks ), meetups ( K8s Meetup Tokyo ) dan bahkan dalam sebuah buku .
- ( — K8s- KubeSphere). GitHub , shell-operator ( ).
- : , .
- GitHub 600+ — , ! ;-)
Kami juga senang mengumumkan bahwa pada konferensi virtual mendatang KubeCon + CloudNativeCon Europe 2020 , yang akan diadakan pada bulan Agustus, akan ada laporan kami tentang operator shell. Rinciannya ada di situs web acara .
Terima kasih atas minat Anda pada operator shell! Jika Anda memiliki pertanyaan, tanyakan di sini di komentar atau di tg-channel @kubeoperator .
PS
Baca juga di blog kami: