Penerapan Canary menggunakan Jenkins-X Istio Flagger
Kami akan melakukan penerapan Canary secara manual melalui GitOps dan membuat/memodifikasi sumber daya utama Kubernetes. Artikel ini ditujukan terutama untuk pengenalan dengan cara kerja penerapan di Kubernetes Canary, karena ada metode otomatisasi yang lebih efektif, yang akan kita bahas di artikel berikut.
Dengan strategi Canary, pembaruan pertama kali diterapkan hanya pada sebagian pengguna saja. Melalui pemantauan, data log, pengujian manual, atau saluran umpan balik lainnya, rilis diuji sebelum dirilis ke semua pengguna.
Penerapan Kubernetes (pembaruan berkelanjutan)
Strategi default untuk Penerapan Kubernetes adalah pembaruan berkelanjutan, di mana sejumlah pod diluncurkan dengan versi image baru. Jika pod tersebut dibuat tanpa masalah, pod dengan image versi lama akan dihentikan, dan pod baru akan dibuat secara paralel.
GitOps
Kami menggunakan GitOps dalam contoh ini karena kami:
menggunakan Git sebagai satu-satunya sumber kebenaran
kami menggunakan Operasi Git untuk pembuatan dan penerapan (tidak diperlukan perintah selain git tag/merge)
Contoh
Mari kita praktikkan dengan baik - memiliki satu repositori untuk kode aplikasi dan satu lagi untuk infrastruktur.
Repositori aplikasi
Ini adalah API Python+Flask yang sangat sederhana yang mengembalikan respons sebagai JSON. Kami akan membangun paket melalui GitlabCI dan memasukkan hasilnya ke Gitlab Registry. Di registri kami memiliki dua versi rilis berbeda:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Satu-satunya perbedaan di antara keduanya adalah perubahan pada file JSON yang dikembalikan. Kami menggunakan aplikasi ini untuk memvisualisasikan semudah mungkin dengan versi mana kami berkomunikasi.
Repositori infrastruktur
Di lobak ini kami akan menyebarkan melalui GitlabCI ke Kubernetes, .gitlab-ci.yml adalah sebagai berikut:
Kami memasukkan perubahan ini ke repositori tempat penerapan akan dimulai (melalui GitlabCI) dan melihat hasilnya:
Layanan kami akan mengarah ke kedua penerapan, karena keduanya memiliki pemilih aplikasi. Karena pengacakan default Kubernetes, kita akan melihat respons berbeda untuk ~10% permintaan:
Keadaan aplikasi kita saat ini (GitOps, diambil dari Git sebagai Single Source Of Truth) adalah adanya dua penerapan dengan replika aktif, satu untuk setiap versi.
~10% pengguna terbiasa dengan versi baru dan secara tidak sengaja mengujinya. Sekarang saatnya memeriksa kesalahan pada log dan memantau data untuk menemukan masalah.
Langkah 2: Rilis versi baru ke semua pengguna
Kami memutuskan bahwa semuanya berjalan dengan baik dan sekarang kami perlu meluncurkan versi baru untuk semua pengguna. Untuk melakukan ini, kami cukup memperbarui deploy.yaml menginstal versi baru dari gambar dan jumlah replika sama dengan 10. Masuk deploy-canary.yaml kita atur jumlah replika kembali ke 0. Setelah penerapan, hasilnya adalah sebagai berikut:
Menyimpulkan
Bagi saya, menjalankan penerapan secara manual dengan cara ini membantu memahami betapa mudahnya dikonfigurasi menggunakan k8s. Karena Kubernetes memungkinkan Anda memperbarui semuanya melalui API, langkah-langkah ini dapat diotomatiskan melalui skrip.
Hal lain yang perlu diterapkan adalah titik masuk penguji (LoadBalancer atau melalui Ingress) yang hanya dapat diakses oleh versi baru. Ini dapat digunakan untuk penelusuran manual.
Di artikel mendatang, kami akan melihat solusi otomatis lainnya yang menerapkan sebagian besar hal yang telah kami lakukan.