Penerapan Canary menggunakan Jenkins-X Istio Flagger
Penyebaran Canary
Kami harap Anda membaca bagian pertama, di mana kami menjelaskan secara singkat apa itu Canary Deployment. Kami juga menunjukkan cara mengimplementasikannya menggunakan sumber daya standar Kubernetes.
Peluncuran Argo
Argo Rollouts adalah pengontrol penerapan asli Kubernetes. Ini menyediakan CRD (Definisi Sumber Daya Kustom) untuk Kubernetes. Berkat itu, kita dapat menggunakan entitas baru: Rollout, yang mengelola penerapan biru-hijau dan canary dengan berbagai opsi konfigurasi.
Pengontrol Argo Rollouts digunakan oleh sumber daya khusus Rollout, Memungkinkan strategi penerapan tambahan seperti blue-green dan canary untuk Kubernetes. Sumber Rollout menyediakan fungsionalitas yang setara Deployment, hanya dengan strategi penerapan tambahan.
sumber Deployments memiliki dua strategi untuk penerapan: RollingUpdate и Recreate. Meskipun strategi ini cocok untuk sebagian besar kasus, untuk penerapan ke server dalam skala yang sangat besar, strategi tambahan digunakan, seperti biru-hijau atau canary, yang tidak tersedia di pengontrol Deployment. Untuk menggunakan strategi ini di Kubernetes, pengguna harus menulis skrip di atas Deployment mereka. Argo Rollouts Controller memaparkan strategi ini sebagai parameter yang sederhana, deklaratif, dan dapat dikonfigurasi. https://argoproj.github.io/argo-rollouts
Ada juga Argo CI, yang menyediakan antarmuka web yang nyaman untuk digunakan dengan Rollouts, kita akan membahasnya di artikel berikutnya.
Di infrastruktur lobak kami (lihat di bawah) kami telah menambahkan install.yaml sebagai i/k8s/argo-rollouts/install.yaml. Dengan cara ini GitlabCI akan menginstalnya ke dalam cluster.
Ini adalah API Python+Flask yang sangat sederhana yang mengembalikan respons sebagai JSON. Kami akan membangun paket menggunakan 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 file JSON yang dikembalikan. Kami menggunakan aplikasi ini untuk memvisualisasikan semudah mungkin dengan versi mana kami berkomunikasi.
Repositori infrastruktur
Dalam repositori ini kita akan menggunakan GitlabCI untuk penerapan ke Kubernetes, .gitlab-ci.yml terlihat seperti ini:
Rollout bekerja sama dengan Deployment. Jika kita tidak menetapkan strategi pembaruan (seperti canary di sini), maka strategi tersebut akan berperilaku seperti Deployment pembaruan bergulir default.
Kami mendefinisikan dua langkah di yaml untuk penerapan canary:
10% traffic ke canary (tunggu manual OK)
50% traffic ke canary (tunggu 2 menit lalu lanjutkan ke 100%)
Melakukan penerapan awal
Setelah penerapan awal, sumber daya kami akan terlihat seperti ini:
Dan kami mendapat respons hanya dari aplikasi versi pertama:
Melakukan Deployment Canary
Langkah 1: 10% lalu lintas
Untuk memulai penerapan canary, kita hanya perlu mengubah versi gambar seperti yang biasa kita lakukan dengan penerapan:
Saya sangat merekomendasikan video ini, ini menunjukkan bagaimana Argo Rollouts dan Argo CI bekerja sama:
Total
Saya sangat menyukai gagasan menggunakan CRD yang mengelola pembuatan jenis penerapan atau replika tambahan, mengarahkan lalu lintas, dll. Bekerja dengan mereka berjalan lancar. Selanjutnya saya ingin menguji integrasi dengan Argo CI.
Namun, tampaknya akan ada merger besar antara Argo CI dan Flux CI, jadi saya mungkin menunggu hingga rilis baru keluar: Argo Fluks.
Apakah Anda punya pengalaman dengan Argo Rollouts atau Argo CI?