استقرار قناری با استفاده از Jenkins-X Istio Flagger
استقرار قناری
امیدواریم مطالعه کرده باشید قسمت اول، جایی که به طور خلاصه توضیح دادیم که استقرار قناری چیست. ما همچنین نحوه پیاده سازی آن را با استفاده از منابع استاندارد Kubernetes نشان دادیم.
Argo Rollouts
Argo Rollouts یک کنترل کننده استقرار بومی Kubernetes است. یک CRD (تعریف منابع سفارشی) برای Kubernetes فراهم می کند. به لطف آن، می توانیم از یک موجودیت جدید استفاده کنیم: Rollout، که استقرار آبی-سبز و قناری را با گزینه های پیکربندی مختلف مدیریت می کند.
کنترلر Argo Rollouts که توسط یک منبع سفارشی استفاده می شود Rollout, امکان استقرار استراتژی های اضافی مانند سبز آبی و قناری را برای Kubernetes فراهم می کند. منبع Rollout عملکردی معادل ارائه می دهد Deployment، فقط با استراتژی های استقرار اضافی.
منابع Deployments دو استراتژی برای استقرار دارد: RollingUpdate и Recreate. اگرچه این استراتژی ها برای اکثر موارد مناسب هستند، اما برای استقرار در سرورها در مقیاس بسیار بزرگ، از استراتژی های اضافی مانند سبز آبی یا قناری استفاده می شود که در کنترلر Deployment موجود نیستند. برای استفاده از این استراتژی ها در Kubernetes، کاربران باید اسکریپت هایی را در بالای Deployments خود می نوشتند. Argo Rollouts Controller این استراتژی ها را به عنوان پارامترهای ساده، اعلامی و قابل تنظیم نشان می دهد. https://argoproj.github.io/argo-rollouts
همچنین Argo CI وجود دارد که یک رابط وب مناسب برای استفاده با Rollouts فراهم می کند، در مقاله بعدی به آن نگاهی خواهیم انداخت.
در شلغم زیرساخت خود (به زیر مراجعه کنید) قبلا install.yaml را به عنوان i/k8s/argo-rollouts/install.yaml اضافه کردهایم. به این ترتیب GitlabCI آن را در خوشه نصب خواهد کرد.
این یک API بسیار ساده Python+Flask است که پاسخی را به صورت JSON برمیگرداند. ما بسته را با استفاده از GitlabCI می سازیم و نتیجه را به رجیستری Gitlab منتقل می کنیم. در رجیستری ما دو نسخه انتشار متفاوت داریم:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
تنها تفاوت بین آنها فایل JSON برگشت داده شده است. ما از این برنامه برای تجسم به آسان ترین شکل ممکن استفاده می کنیم که با کدام نسخه در حال ارتباط هستیم.
مخزن زیرساخت
در این مخزن ما از GitlabCI برای استقرار در Kubernetes استفاده خواهیم کرد، .gitlab-ci.yml به شکل زیر است:
Rollout همانند Deployment عمل می کند. اگر یک استراتژی بهروزرسانی تنظیم نکنیم (مانند قناری در اینجا) مانند پیشفرض استقرار بهروزرسانی پیشفرض عمل میکند.
ما دو مرحله را در یامل برای استقرار قناری تعریف می کنیم:
10% ترافیک به قناری (منتظر تأیید دستی باشید)
50% ترافیک به قناری (2 دقیقه صبر کنید سپس تا 100%)
انجام استقرار اولیه
پس از استقرار اولیه، منابع ما به صورت زیر خواهد بود:
و ما فقط از نسخه اول برنامه پاسخ می گیریم:
انجام استقرار قناری
مرحله 1: 10٪ ترافیک
برای شروع استقرار قناری، فقط باید نسخه تصویر را همانطور که معمولاً با استقرارها انجام می دهیم تغییر دهیم:
من واقعاً این ویدیو را توصیه می کنم، نشان می دهد که Argo Rollouts و Argo CI چگونه با هم کار می کنند:
مجموع
من ایده استفاده از CRDهایی را که ایجاد انواع دیگری از استقرار یا مجموعههای تکراری، هدایت ترافیک و غیره را مدیریت میکنند بسیار دوست دارم. کار با آنها به آرامی پیش می رود. در مرحله بعد می خواهم ادغام با Argo CI را آزمایش کنم.
با این حال، به نظر می رسد ادغام بزرگی از Argo CI و Flux CI وجود دارد، بنابراین ممکن است تا زمان انتشار نسخه جدید صبر کنم: آرگو فلاکس.
آیا تجربه ای با Argo Rollouts یا Argo CI داشته اید؟