Apa itu GitOps? Memperluas developer ke Kubernetes dan seterusnya

Dekade terakhir pemrograman telah melihat sejumlah transformasi revolusioner. Salah satunya muncul dari sekumpulan praktik seputar pengembang, yang menyelaraskan tim pengembangan dan operasi ke dalam proses kerja bersama, dan integrasi berkelanjutan dan pengiriman berkelanjutan (CI / CD), di mana tim pengembang mengirimkan pembaruan tambahan yang konstan ke basis kode. Transformasi lain datang dari perpindahan terkait dari basis kode monolitik ke layanan mikro berbasis cloud yang berjalan di kontainer yang dikelola oleh platform orkestrasi seperti Kubernetes.

Aplikasi berbasis kontainer yang berjalan pada sistem berkerumun atau di cloud dapat menjadi rumit dan sulit untuk disediakan dan dikelola, bahkan dengan platform seperti Kubernetes yang mengatur berbagai hal. GitOps adalah serangkaian praktik baru yang bertujuan untuk menyederhanakan tugas manajemen ini dengan menerapkan teknik dari dunia pengembang dan CI / CD.

Kunci GitOps adalah gagasan infrastruktur sebagai kode, yang menggunakan pendekatan yang sama untuk penyediaan infrastruktur seperti yang digunakan developer untuk menyediakan aplikasi. Jadi, tidak hanya aplikasi tetapi juga mesin dan jaringan host yang mendasari dijelaskan dalam file yang dapat diperlakukan sebagai kode lain dalam sistem kontrol versi, dengan proses otomatis kemudian bekerja untuk menyatukan aplikasi dunia nyata dengan yang dijelaskan di dalamnya. file.

Dalam bahasa GitOps, kode dalam sistem kontrol versi adalah satu - satunya sumber kebenaran tentang seperti apa tampilan aplikasi dalam produksi

GitOps ditentukan 

Weaveworks adalah perusahaan yang paling banyak mempopulerkan konsep GitOps. Kami akan membahas sedikit detail tentang peran Weaveworks, tetapi pertama-tama, mari kita lihat definisi perusahaan GitOps, yang terdiri dari dua hal:

  • Model operasi untuk Kubernetes dan teknologi cloud native lainnya, memberikan serangkaian praktik terbaik yang menyatukan penerapan, pengelolaan, dan pemantauan untuk cluster dan aplikasi dalam container.
  • Sebuah jalan menuju pengalaman pengembang untuk mengelola aplikasi; di mana pipeline CI / CD ujung ke ujung dan alur kerja Git diterapkan pada operasi dan pengembangan.

Dengan kata lain, GitOps adalah sekumpulan praktik khusus yang dirancang untuk mengelola Kubernetes dan platform serupa, yang juga cocok untuk aplikasi yang lebih luas karena semakin banyak toko pengembangan yang mengadopsi praktik devops dan memigrasi kode ke cloud. Tetapi untuk memahami saus rahasia GitOps dan masalah yang dipecahkannya, kita perlu berbicara tentang komponen yang masuk ke dalamnya.

Definisi Git 

The Git di GitOps mengacu pada sistem versi didistribusikan kontrol sangat populer yang dikembangkan oleh Linus Torvalds pada tahun 2005. Git adalah alat yang memungkinkan tim pengembang untuk bekerja sama pada basis kode aplikasi, menyimpan berbagai cabang dari kode yang mereka bermain-main dengan sebelum penggabungan mereka ke dalam kode produksi. Konsep utama dalam Git adalah permintaan tarik, di mana pengembang secara resmi meminta beberapa kode yang telah mereka kerjakan untuk diintegrasikan ke dalam cabang lain dalam basis kode.

Permintaan penarikan Git memberikan kesempatan bagi anggota tim untuk berkolaborasi dan berdiskusi sebelum mencapai konsensus tentang apakah kode baru harus ditambahkan ke aplikasi. Git juga menyimpan kode versi lama, yang memudahkan untuk kembali ke versi bagus terakhir jika terjadi kesalahan, dan memungkinkan Anda melihat dengan cepat apa yang berubah di antara revisi. Git mungkin paling dikenal sebagai pendukung GitHub, sistem kontrol versi yang dihosting di cloud, tetapi Git sendiri adalah perangkat lunak sumber terbuka yang dapat digunakan di mana saja, dari server internal perusahaan hingga PC Anda.

Perhatikan bahwa meskipun kami biasanya menganggap Git sebagai alat pemrograman komputer, sebenarnya ini agnostik untuk konten apa yang Anda gunakan. Git akan dengan senang hati memperlakukan setiap kumpulan file teks sebagai "basis kode" Anda, dan ini dapat, misalnya, digunakan oleh penulis yang ingin melacak hasil edit pada sebuah karya kolaboratif. Ini penting karena sebagian besar basis kode di inti GitOps terdiri dari file konfigurasi deklaratif, bukan kode yang dapat dieksekusi.

Satu hal terakhir untuk dikatakan sebelum kita melanjutkan: Meskipun “Git” ada di namanya, GitOps sebenarnya tidak membutuhkan penggunaan Git. Toko yang sudah berinvestasi di perangkat lunak kontrol versi lain, seperti Subversion, juga dapat mengimplementasikan GitOps. Tapi Git banyak digunakan di dalam dunia pengembang untuk mengimplementasikan CI / CD, jadi kebanyakan proyek GitOps akan berakhir menggunakan Git.

Apa proses CI / CD?

Tinjauan lengkap tentang CI / CD berada di luar cakupan artikel ini — lihat penjelasan tentang subjeknya — tetapi kami perlu menjelaskan beberapa hal tentang CI / CD karena ini adalah inti dari cara kerja GitOps. The integrasi berkesinambungan setengah dari CI / CD diaktifkan oleh repositori kontrol versi seperti Git: Pengembang dapat melakukan perbaikan kecil terus-menerus untuk basis kode mereka, daripada bergulir, versi baru yang besar monolitik setiap beberapa bulan atau tahun. Bagian penerapan berkelanjutan dimungkinkan oleh sistem otomatis yang disebut jalur pipa yang membangun, menguji, dan menerapkan kode baru ke produksi.

Sekali lagi, kami terus berbicara tentang kode di sini, dan itu biasanya memunculkan visi kode yang dapat dieksekusi yang ditulis dalam bahasa pemrograman seperti C atau Java atau JavaScript. Namun di GitOps, "kode" yang kami kelola sebagian besar terdiri dari file konfigurasi. Ini bukan hanya detail kecil - ini adalah inti dari apa yang dilakukan GitOps. File konfigurasi ini, seperti yang telah kami katakan, adalah "satu-satunya sumber kebenaran" yang menjelaskan seperti apa tampilan sistem kami. Mereka bersifat deklaratif daripada instruktif. Artinya, alih-alih mengatakan "mulai sepuluh server," file konfigurasi hanya akan mengatakan, "sistem ini mencakup sepuluh server".

The CI setengah dari persamaan GitOps memungkinkan pengembang untuk dengan cepat roll out tweak dan perbaikan file konfigurasi ini; yang CD setengah terjadi ketika agen perangkat lunak otomatis melakukan yang terbaik untuk memastikan bahwa versi live dari cermin aplikasi deskripsi di file konfigurasi - yang konvergen dengan model deklaratif, dalam bahasa GitOps.

GitOps dan Kubernetes

Seperti yang telah kami sebutkan, konsep GitOps pada awalnya dikembangkan seputar pengelolaan aplikasi Kubernetes. Dengan apa yang sekarang kita ketahui tentang GitOps, mari kita kunjungi kembali diskusi GitOps Weaveworks dan lihat bagaimana mereka menjelaskan bagaimana Anda akan membuat pembaruan pada Kubernetes yang dikelola berdasarkan prinsip GitOps. Berikut ringkasannya:

  1. Pengembang membuat permintaan tarik Git untuk fitur baru.
  2. Kode tersebut ditinjau dan disetujui, kemudian digabungkan ke dalam basis kode utama.
  3. Penggabungan tersebut memicu pipeline CI / CD, yang secara otomatis menguji dan membuat ulang kode baru dan menerapkannya ke registri.
  4. Agen perangkat lunak memperhatikan pembaruan, menarik kode baru dari registri, dan memperbarui file konfigurasi (ditulis dalam YAML) di repositori konfigurasi.
  5. Agen perangkat lunak di cluster Kubernetes mendeteksi bahwa cluster tersebut sudah usang, berdasarkan file konfigurasi, menarik perubahan, dan menerapkan fitur baru.

Weaveworks dan GitOps

Jelas langkah 4 dan 5 di sini melakukan sebagian besar pekerjaan berat. Agen perangkat lunak yang secara ajaib menyinkronkan "sumber kebenaran" di repositori Git dengan aplikasi Kubernetes dunia nyata adalah keajaiban yang memungkinkan GitOps. Seperti yang telah kami katakan, dalam istilah GitOps, proses membuat sistem live lebih seperti sistem ideal yang dijelaskan dalam file konfigurasi disebut konvergensi . (Ketika sistem langsung dan sistem ideal tidak selaras, itulah perbedaan. ) Idealnya, konvergensi akan dicapai dengan proses otomatis, tetapi ada batasan tentang apa yang dapat dilakukan otomatisasi dan terkadang intervensi manusia diperlukan.

Kami telah menjelaskan prosesnya di sini dalam istilah umum, namun kenyataannya, jika Anda benar-benar melihat halaman Weaveworks, "agen perangkat lunak" yang kami sebutkan adalah bagian dari platform Weave Cloud perusahaan. Istilah "GitOps" diciptakan oleh CEO Weaveworks Alexis Richardson, dan berfungsi untuk membuat platform Weaveworks menarik bagi pengembang yang sudah mendalami dunia devops dan CI / CD.

Tapi Weaveworks tidak pernah mengklaim monopoli di GitOps, yang lebih merupakan filosofi dan rangkaian praktik terbaik daripada produk tertentu. Sebagai blog untuk CloudBees, sebuah perusahaan yang menyediakan solusi CI / CD, catatan, GitOps mewakili model terbuka, vendor-netral yang dikembangkan sebagai reaksi terhadap solusi Kubernetes milik terkelola yang diluncurkan oleh vendor cloud besar seperti Amazon, Google, dan Microsoft . CloudBees menawarkan solusi GitOpsnya sendiri, seperti halnya sejumlah pemain di ruang ini.

GitOps dan devops

Atlassian, perusahaan yang membuat sejumlah alat untuk pengembang yang gesit, memiliki entri blog yang mendalam tentang sejarah dan tujuan GitOps yang sepadan dengan waktu Anda. Dalam pandangan mereka, GitOps mewakili perluasan logis dari ide-ide yang muncul bersama-sama sebagai pengembang. Secara khusus, GitOps adalah penjabaran dari konsep infrastruktur sebagai kode, itu sendiri sebuah ide yang keluar dari lingkungan devops. GitOps, seperti yang dilihat Atlassian, menjembatani kesenjangan penting antara teknik devops yang ada, yang telah berevolusi untuk memecahkan masalah administrasi sistem, dan kebutuhan spesifik aplikasi cloud-hosting terdistribusi. Konvergensi otomatis yang ditawarkan oleh berbagai vendor cloud inilah yang membuat GitOps istimewa.

Dan sementara GitOps tetap fokus pada Kubernetes saat ini, kami berharap kami telah menjelaskan bagaimana penerapannya pada dunia aplikasi terdistribusi berbasis cloud yang lebih luas. Sebuah posting blog oleh vendor keamanan open source WhiteSource menguraikan keuntungan dari GitOps:

  • Observabilitas : Sistem GitOps menawarkan pemantauan, pencatatan, pelacakan, dan visualisasi ke dalam aplikasi yang kompleks sehingga pengembang dapat melihat apa yang rusak dan di mana.
  • Kontrol versi dan manajemen perubahan : Jelas ini adalah manfaat utama menggunakan sistem kontrol versi seperti Git. Pembaruan yang cacat dapat dengan mudah dibatalkan.
  • Adopsi yang mudah : GitOps mengembangkan keterampilan pengembang yang sudah dimiliki banyak pengembang.
  • Produktivitas : GitOps memberikan dorongan untuk produktivitas yang telah dibawa oleh devops dan CI / CD ke ranah lain.
  • Auditing: Berkat Git, setiap tindakan dapat dilacak ke komit tertentu, membuatnya mudah untuk melacak penyebab kesalahan.

Meskipun Anda tidak menggunakan Kubernetes, kemungkinan besar GitOps akan menjadi bagian dari alur kerja Anda cepat atau lambat.