{"id":4095,"date":"2025-07-04T17:36:20","date_gmt":"2025-07-04T14:36:20","guid":{"rendered":"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/canary-deployment\/"},"modified":"2025-07-04T17:52:33","modified_gmt":"2025-07-04T14:52:33","slug":"canary-deployment","status":"publish","type":"docs","link":"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/canary-deployment\/","title":{"rendered":"Canary Deployment (\u041a\u0430\u043d\u0430\u0440\u0435\u0435\u0447\u043d\u043e\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435)"},"content":{"rendered":"\n<p><strong>Canary Deployment<\/strong> \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e\u0433\u043e \u0432\u044b\u043a\u0430\u0442\u0430 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u043b\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0440\u0438\u0441\u043a\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0434\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e\u0433\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f.<\/p>\n\n\n\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 &#8220;canary&#8221; (\u043a\u0430\u043d\u0430\u0440\u0435\u0439\u043a\u0430) \u043e\u0442\u0441\u044b\u043b\u0430\u0435\u0442 \u043a \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0441\u043f\u043e\u0441\u043e\u0431\u0443 \u0440\u0430\u043d\u043d\u0435\u0433\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u2014 \u043a\u0430\u043a \u0448\u0430\u0445\u0442\u0451\u0440\u044b \u0431\u0440\u0430\u043b\u0438 \u043a\u0430\u043d\u0430\u0440\u0435\u0435\u043a \u0434\u043b\u044f \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0442\u0435\u0447\u0435\u043a \u0433\u0430\u0437\u0430, \u0442\u0430\u043a \u0438 DevOps-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 canary-\u0440\u0435\u043b\u0438\u0437 \u0434\u043b\u044f \u0440\u0430\u043d\u043d\u0435\u0433\u043e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0431\u043e\u0435\u0432.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0446\u0435\u043b\u0438 Canary Deployment<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u041c\u044f\u0433\u043a\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a<\/strong> \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438;<\/li>\n\n\n\n<li><strong>\u0420\u0430\u043d\u043d\u0435\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0431\u0430\u0433\u043e\u0432 \u0438 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0439<\/strong> \u0434\u043e \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f;<\/li>\n\n\n\n<li><strong>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0438\u0441\u043a<\/strong>: \u0441\u0431\u043e\u0439 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043b\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439;<\/li>\n\n\n\n<li><strong>A\/B-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/strong> \u043d\u043e\u0432\u044b\u0445 \u0433\u0438\u043f\u043e\u0442\u0435\u0437 \u0431\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439;<\/li>\n\n\n\n<li><strong>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043b\u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043e\u0442\u043a\u0430\u0442\u0430<\/strong> \u043f\u0440\u0438 \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u0440\u0438\u043a.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 Kubernetes<\/h3>\n\n\n\n<p>Canary-\u0434\u0435\u043f\u043b\u043e\u0439 \u0432 <a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/kubernetes\/\" data-internallinksmanager029f6b8e52c=\"259\" title=\"Kubernetes (K8s)\">Kubernetes<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0420\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 Deployment\/ReplicaSet<\/strong> \u0441 \u043c\u0435\u0442\u043a\u0430\u043c\u0438 (<code>version: v1<\/code>, <code>version: v2<\/code>);<\/li>\n\n\n\n<li><strong>Service \u0438\u043b\u0438 <a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/kubernetes-ingress\/\" data-internallinksmanager029f6b8e52c=\"363\" title=\"Kubernetes Ingress (\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 Kubernetes)\">Ingress<\/a><\/strong> \u0441 \u0440\u0443\u0447\u043d\u044b\u043c \u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0442\u0440\u0430\u0444\u0438\u043a\u0430;<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/istio\/\" data-internallinksmanager029f6b8e52c=\"366\" title=\"Istio (\u041f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Service Mesh)\">Istio<\/a>, Linkerd, Traefik \u0438\u043b\u0438 NGINX Ingress Controller<\/strong> \u0434\u043b\u044f L7-\u043a\u0430\u043d\u0430\u0440\u0435\u0435\u043a;<\/li>\n\n\n\n<li><strong>Argo Rollouts \u0438\u043b\u0438 Flagger<\/strong> \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 canary-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0435\u0439 \u0432 <a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/gitlab-ci-cd\/\" data-internallinksmanager029f6b8e52c=\"372\" title=\"GitLab CI\/CD (\u041d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 GitLab)\">CI\/CD<\/a>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0441 Istio VirtualService:<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>http:\n  - route:\n      - destination:\n          host: app\n          subset: stable\n        weight: 80\n      - destination:\n          host: app\n          subset: canary\n        weight: 20\n<\/code><\/pre>\n\n\n\n<p>\u0417\u0434\u0435\u0441\u044c 20% \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, 80% \u2014 \u043d\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0443\u044e.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Blue-Green Deployment<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u041f\u043e\u0434\u0445\u043e\u0434<\/th><th>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/th><th>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430<\/th><th>\u041f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f<\/th><\/tr><\/thead><tbody><tr><td><strong>Canary<\/strong><\/td><td>\u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435<\/td><td>\u0413\u0438\u0431\u043a\u043e\u0441\u0442\u044c, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c, \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u0440\u0438\u0441\u043a\u043e\u0432<\/td><td>\u0427\u0430\u0441\u0442\u044b\u0435 \u0440\u0435\u043b\u0438\u0437\u044b, A\/B \u0442\u0435\u0441\u0442\u044b<\/td><\/tr><tr><td><strong><a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/blue-green-deployment\/\" data-internallinksmanager029f6b8e52c=\"367\" title=\"Blue-Green Deployment (\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439)\">Blue-Green<\/a><\/strong><\/td><td>\u041c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e\u0435<\/td><td>\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430, \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043e\u0442\u043a\u0430\u0442<\/td><td>\u041f\u0440\u043e\u0434\u0430\u043a\u0448\u043d \u0441 \u0436\u0451\u0441\u0442\u043a\u0438\u043c\u0438 <a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/service-level-agreement\/\" data-internallinksmanager029f6b8e52c=\"280\" title=\"SLA (Service Level Agreement)\">SLA<\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 CI\/CD<\/h3>\n\n\n\n<p>Canary-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0440\u0443\u0447\u043d\u044b\u043c<\/strong> \u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0441\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e;<\/li>\n\n\n\n<li><strong>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c<\/strong> \u2014 \u0447\u0435\u0440\u0435\u0437 Argo Rollouts, Flagger \u0438\u043b\u0438 Spinnaker:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/grafana\/\" data-internallinksmanager029f6b8e52c=\"356\" title=\"Grafana (C\u0432\u043e\u0431\u043e\u0434\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445)\">\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433<\/a> \u043c\u0435\u0442\u0440\u0438\u043a (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, HTTP 5xx, <a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/latency\/\" data-internallinksmanager029f6b8e52c=\"323\" title=\"Latency (\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f)\">latency<\/a>);<\/li>\n\n\n\n<li>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043e\u0442\u043a\u0430\u0442\u0435;<\/li>\n\n\n\n<li>\u043f\u043e\u043b\u043d\u0430\u044f <a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/argo-cd\/\" data-internallinksmanager029f6b8e52c=\"352\" title=\"Argo CD\">GitOps<\/a>-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b Canary Deployment<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442<\/th><th>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/th><th>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u0432\u0442\u043e\u043e\u0442\u043a\u0430\u0442\u0430<\/th><th>GitOps<\/th><\/tr><\/thead><tbody><tr><td><strong>Argo Rollouts<\/strong><\/td><td>CRD + controller \u0434\u043b\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0433\u043e \u0434\u0435\u043f\u043b\u043e\u044f<\/td><td>\u0414\u0430<\/td><td>\u0414\u0430<\/td><\/tr><tr><td><strong>Flagger<\/strong><\/td><td>Operator \u0434\u043b\u044f canary \u0447\u0435\u0440\u0435\u0437 Ingress\/Mesh<\/td><td>\u0414\u0430<\/td><td>\u0414\u0430<\/td><\/tr><tr><td><strong>Istio<\/strong><\/td><td>\u0420\u0443\u0447\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 VirtualService<\/td><td>\u041d\u0435\u0442 (\u0432\u0440\u0443\u0447\u043d\u0443\u044e)<\/td><td>\u0414\u0430<\/td><\/tr><tr><td><strong>NGINX Ingress<\/strong><\/td><td>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 canary-weight<\/td><td>\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e<\/td><td>\u0414\u0430<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Canary Deployment<\/strong> \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0433\u0438\u0431\u043a\u0438\u0445 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u044b\u043a\u0430\u0442\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 Kubernetes. \u041e\u043d \u0434\u0430\u0451\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0440\u0438\u0441\u043a\u0430\u043c\u0438, \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u043e\u043c \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u0412\u043e\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f <strong>canary deployment<\/strong> \u0441 Argo Rollouts \u0432 Kubernetes:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <code>Rollout<\/code> \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 (Argo Rollouts + canary)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: argoproj.io\/v1alpha1\nkind: Rollout\nmetadata:\n  name: my-app\nspec:\n  replicas: 4\n  strategy:\n    canary:\n      steps:\n        - setWeight: 10\n        - pause: { duration: 5m }\n        - setWeight: 50\n        - pause: { duration: 10m }\n        - setWeight: 100\n  selector:\n    matchLabels:\n      app: my-app\n  template:\n    metadata:\n      labels:\n        app: my-app\n    spec:\n      containers:\n        - name: app\n          image: myregistry\/my-app:{{ .Values.image.tag }}\n          ports:\n            - containerPort: 8080\n<\/code><\/pre>\n\n\n\n<p>\u0412\u0435\u0441 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0440\u0430\u0441\u0442\u0451\u0442 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e. Argo \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2. PrometheusRule: \u043e\u0442\u043a\u0430\u0442 \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u043e\u0448\u0438\u0431\u043e\u043a<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>apiVersion: <a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/monitoring\/\" data-internallinksmanager029f6b8e52c=\"231\" title=\"Monitoring (\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433)\">monitoring<\/a>.coreos.com\/v1\nkind: PrometheusRule\nmetadata:\n  name: canary-failures\n  namespace: monitoring\nspec:\n  groups:\n    - name: canary-errors\n      rules:\n        - alert: Canary5xxSpike\n          expr: |\n            increase(http_requests_total{status=~\"5..\", app=\"my-app\"}&#91;5m]) &gt; 10\n          for: 2m\n          labels:\n            severity: critical\n          annotations:\n            summary: \"Canary 5xx spike\"\n            description: \"5xx errors increased after canary rollout. Rollback recommended.\"\n<\/code><\/pre>\n\n\n\n<p>\u042d\u0442\u043e\u0442 \u0430\u043b\u0435\u0440\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a webhook, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u043a\u0430\u0442 \u0447\u0435\u0440\u0435\u0437 Argo Rollouts <a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/api\/\" data-internallinksmanager029f6b8e52c=\"226\" title=\"API (Application Programming Interface)\">API<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">3. Helm-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b <code>values.yaml<\/code><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>image:\n  tag: \"v2.1.3\"\n\ncanary:\n  enabled: true\n  weightSteps:\n    - 10\n    - 50\n    - 100\n  pauseDurations:\n    - 5m\n    - 10m\n<\/code><\/pre>\n\n\n\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c <a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/helm-v-kubernetes\/\" data-internallinksmanager029f6b8e52c=\"350\" title=\"Helm (\u0432 Kubernetes)\">Helm<\/a>-\u0447\u0430\u0440\u0442, \u0433\u0434\u0435 \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 <code>Rollout<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4. GitOps-\u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 Argo CD<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>rollout.yaml<\/code> \u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442\u0441\u044f \u0432 <code>gitops\/<\/code> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439;<\/li>\n\n\n\n<li>Argo CD \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f;<\/li>\n\n\n\n<li>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 CI (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 GitLab\/GitHub Actions) \u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u0433\u0430 \u0438 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0438\u0442 rollout;<\/li>\n\n\n\n<li>\u041c\u0435\u0442\u0440\u0438\u043a\u0438 <a href=\"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/prometheus\/\" data-internallinksmanager029f6b8e52c=\"355\" title=\"Prometheus (\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u044f\u0434\u043e\u0432)\">Prometheus<\/a> \u2192 \u0430\u043b\u0435\u0440\u0442 \u2192 webhook \u2192 \u043e\u0442\u043a\u0430\u0442 \u0447\u0435\u0440\u0435\u0437 Argo Rollouts Controller.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"featured_media":0,"parent":2927,"menu_order":173,"comment_status":"open","ping_status":"closed","template":"","doc_tag":[],"class_list":["post-4095","docs","type-docs","status-publish","hentry"],"comment_count":0,"_links":{"self":[{"href":"https:\/\/cloudvps.by\/community\/wp-json\/wp\/v2\/docs\/4095","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudvps.by\/community\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/cloudvps.by\/community\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudvps.by\/community\/wp-json\/wp\/v2\/comments?post=4095"}],"version-history":[{"count":3,"href":"https:\/\/cloudvps.by\/community\/wp-json\/wp\/v2\/docs\/4095\/revisions"}],"predecessor-version":[{"id":4103,"href":"https:\/\/cloudvps.by\/community\/wp-json\/wp\/v2\/docs\/4095\/revisions\/4103"}],"up":[{"embeddable":true,"href":"https:\/\/cloudvps.by\/community\/wp-json\/wp\/v2\/docs\/2927"}],"next":[{"title":"Volume Snapshot (\u0421\u043d\u0430\u043f\u0448\u043e\u0442 \u0442\u043e\u043c\u0430)","link":"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/volume-snapshot\/","href":"https:\/\/cloudvps.by\/community\/wp-json\/wp\/v2\/docs\/4115"}],"prev":[{"title":"Blue-Green Deployment (\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439)","link":"https:\/\/cloudvps.by\/community\/docs\/glossarij\/terminy\/blue-green-deployment\/","href":"https:\/\/cloudvps.by\/community\/wp-json\/wp\/v2\/docs\/4092"}],"wp:attachment":[{"href":"https:\/\/cloudvps.by\/community\/wp-json\/wp\/v2\/media?parent=4095"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/cloudvps.by\/community\/wp-json\/wp\/v2\/doc_tag?post=4095"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}