Cara sederhana dan aman untuk mengotomatiskan penerapan kenari dengan Helm

Cara sederhana dan aman untuk mengotomatiskan penerapan kenari dengan Helm

Penerapan Canary adalah cara yang sangat efektif untuk menguji kode baru pada sekelompok pengguna. Ini secara signifikan mengurangi beban lalu lintas yang dapat menjadi masalah selama proses penerapan, karena ini hanya terjadi dalam subset tertentu. Catatan ini dikhususkan untuk bagaimana mengatur penerapan tersebut menggunakan Kubernetes dan otomatisasi penerapan. Kami berasumsi Anda mengetahui sesuatu tentang sumber daya Helm dan Kubernetes.

Cara sederhana dan aman untuk mengotomatiskan penerapan kenari dengan Helm

Penerapan canary sederhana ke Kubernetes mencakup dua sumber daya utama: layanan itu sendiri dan alat penerapan. Penerapan Canary bekerja melalui satu layanan yang berinteraksi dengan dua sumber daya berbeda yang melayani lalu lintas pembaruan. Salah satu sumber daya ini akan berfungsi dengan versi “canary”, dan sumber daya kedua akan berfungsi dengan versi stabil. Dalam situasi ini, kami dapat mengatur jumlah versi canary untuk mengurangi jumlah lalu lintas yang diperlukan untuk melayani. Jika misalnya Anda lebih suka menggunakan Yaml, maka di Kubernetes akan terlihat seperti ini:

kind: Deployment
metadata:
  name: app-canary
  labels:
    app: app
spec:
  replicas: 1
  ...
    image: myapp:canary
---
kind: Deployment
metadata:
  name: app
  labels:
    app: app
spec:
  replicas: 5
  ...
    image: myapp:stable
---
kind: Service
selector:
  app: app # Selector will route traffic to both deployments.

Lebih mudah lagi untuk membayangkan opsi ini menggunakan kubectl, dan in Dokumentasi Kubernetes Bahkan ada tutorial lengkap tentang skenario ini. Namun pertanyaan utama postingan ini adalah bagaimana kita akan mengotomatiskan proses ini menggunakan Helm.

Otomatisasi penyebaran kenari

Pertama-tama, kita memerlukan peta grafik Helm, yang sudah menyertakan sumber daya yang kita bahas di atas. Seharusnya terlihat seperti ini:

~/charts/app
├── Chart.yaml
├── README.md
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   └── service.yaml
└── values.yaml

Dasar dari konsep Helm adalah pengelolaan rilis multi-versi. Versi stabil adalah cabang stabil utama dari kode proyek kami. Namun dengan Helm kami dapat menerapkan rilis canary dengan kode eksperimental kami. Hal utama adalah menjaga pertukaran lalu lintas antara versi stabil dan rilis canary. Kami akan mengatur semua ini menggunakan pemilih khusus:

selector:
  app.kubernetes.io/name: myapp

Sumber daya penerapan “canary” dan stabil kami akan menunjukkan label ini pada modul. Jika semuanya dikonfigurasi dengan benar, maka selama penerapan peta grafik Helm versi canary, kita akan melihat bahwa lalu lintas akan diarahkan ke modul yang baru diterapkan. Versi stabil dari perintah ini akan terlihat seperti ini:

helm upgrade
  --install myapp 
  --namespace default 
  --set app.name=myapp       # Goes into app.kubernetes.io/name
  --set app.version=v1       # Goes into app.kubernetes.io/version
  --set image.tag=stable 
  --set replicaCount=5

Sekarang mari kita periksa rilis kenari kita. Untuk menerapkan versi canary, kita perlu mengingat dua hal. Nama rilis harus berbeda agar kami tidak meluncurkan pembaruan ke versi stabil saat ini. Versi dan tag juga harus berbeda sehingga kami dapat menerapkan kode lain dan mengidentifikasi perbedaan berdasarkan tag sumber daya.

helm upgrade
  --install myapp-canary 
  --namespace default 
  --set app.name=myapp       # Goes into app.kubernetes.io/name
  --set app.version=v2       # Goes into app.kubernetes.io/version
  --set image.tag=canary 
  --set replicaCount=1

Itu saja! Jika Anda melakukan ping ke layanan, Anda dapat melihat bahwa pembaruan canary merutekan lalu lintas hanya sebagian waktu.

Jika Anda mencari alat otomatisasi penerapan yang menyertakan logika yang dijelaskan, maka perhatikanlah bot pengiriman dan Alat otomatisasi helm di GitHub. Bagan Helm yang digunakan untuk mengimplementasikan metode yang dijelaskan di atas ada di Github, di sini. Secara umum, ini adalah gambaran teoritis tentang bagaimana menerapkan otomatisasi penerapan versi canary dalam praktik, dengan konsep dan contoh spesifik.

Sumber: www.habr.com

Tambah komentar