{"id":1994,"date":"2024-04-24T05:37:47","date_gmt":"2024-04-24T05:37:47","guid":{"rendered":"https:\/\/imesh.ai\/blog\/?p=1994"},"modified":"2024-04-24T05:37:49","modified_gmt":"2024-04-24T05:37:49","slug":"advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa","status":"publish","type":"post","link":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/","title":{"rendered":"Advance traffic management in Canary using Istio, Argo Rollouts, and HPA"},"content":{"rendered":"\n<p>As enterprises mature in their CI\/CD journey, they tend to ship code faster, safely, and securely. One essential strategy the DevOps team applies is releasing code progressively to production, also known as canary deployment. Canary deployment is a bulletproof mechanism that safely releases application changes and provides flexibility for business experiments. It can be implemented using software like <a href=\"https:\/\/argoproj.github.io\/argo-rollouts\/\">Argo Rollouts<\/a> and <a href=\"https:\/\/docs.flagger.app\/\">Flagger<\/a>. However advanced DevOps teams would like to gain granular control over their traffic and pod scaling while performing canary deployment to reduce overall cost. We have helped a few of our customers (Istio users) to achieve advanced traffic management of canary deployment at scale.&nbsp;<\/p>\n\n\n\n<p>We want to share our knowledge with the DevOps community through this blog.&nbsp;<\/p>\n\n\n\n<p>If you want to jump straight into the demo video, our CTO, Ravi Verma, has created a walkthrough on advanced traffic management in Canary for enterprises at scale.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Canary Deployments with Istio and Argo Rollouts | HPA | Demo\" width=\"1130\" height=\"636\" src=\"https:\/\/www.youtube.com\/embed\/oHkurpeHke4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>If you are interested, you can check our previous blog: <a href=\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/\">how to implement canary deployment for Kubernetes workloads using Argo Rollouts and Istio<\/a>.&nbsp;<\/p>\n\n\n\n<p>Before we get started, let us discuss the canary architecture implemented by Argo Rollouts and Istio.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recap of Canary implementation architecture with Argo Rollouts and Istio&nbsp;<\/h2>\n\n\n\n<p>If you use Istio service mesh, all of your meshed workloads will have an Envoy proxy sidecar attached to the application container in the pod. You can perhaps have an API or Istio ingress gateway to receive the incoming traffic from outside. In such a case, you can use Argo Rollouts to handle canary deployment. To implement canary deployment Argo Rollouts provides a CRD called Rollout, which is similar to Deployment object and responsible for creating, scaling, and deleting ReplicaSets in K8s.&nbsp;<\/p>\n\n\n\n<p>The canary deployment strategy starts by redirecting a small amount of traffic (say 5%) to the newly deployed app. Based on specific criteria, such as optimized resource utilization of new canary pods, you can gradually increase the traffic to 100%. The traffic handling for the baseline and canary is carried by Istio sidecar as per the rules defined in the Virtual Service resource. Since Argo Rollouts provides native integration with Istio, it would override the Virtual Service resource to increase the traffic to the canary pods.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"616\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Canary-implementation-architecture-with-Argo-Rollouts-and-Istio-1024x616.png\" alt=\"Canary implementation architecture with Argo Rollouts and Istio\" class=\"wp-image-1999\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Canary-implementation-architecture-with-Argo-Rollouts-and-Istio-1024x616.png 1024w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Canary-implementation-architecture-with-Argo-Rollouts-and-Istio-300x181.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Canary-implementation-architecture-with-Argo-Rollouts-and-Istio-768x462.png 768w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Canary-implementation-architecture-with-Argo-Rollouts-and-Istio-1536x924.png 1536w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Canary-implementation-architecture-with-Argo-Rollouts-and-Istio-400x241.png 400w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Canary-implementation-architecture-with-Argo-Rollouts-and-Istio-800x482.png 800w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Canary-implementation-architecture-with-Argo-Rollouts-and-Istio-1160x698.png 1160w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Canary-implementation-architecture-with-Argo-Rollouts-and-Istio.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Canary can be implemented by two methods: <strong>Deploying new changes as a service<\/strong>, or <strong>Deploying new changes as a deployment<\/strong>.&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Deploying new changes as a service<\/strong>&nbsp;<\/li>\n<\/ol>\n\n\n\n<p>In this method, we can create a new service (called canary) and split the traffic from the Istio ingress gateway between the stable and canary services. Refer to the image below.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"867\" height=\"605\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Deploying-new-changes-as-a-service.png\" alt=\"Deploying new changes as a service\" class=\"wp-image-2002\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Deploying-new-changes-as-a-service.png 867w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Deploying-new-changes-as-a-service-300x209.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Deploying-new-changes-as-a-service-768x536.png 768w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Deploying-new-changes-as-a-service-400x279.png 400w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Deploying-new-changes-as-a-service-800x558.png 800w\" sizes=\"(max-width: 867px) 100vw, 867px\" \/><\/figure>\n<\/div>\n\n\n<p>You can refer to the yaml file for a sample implementation of deploying a canary with multiple services <a href=\"https:\/\/github.com\/imesh-ai\/webinar\/tree\/main\/Canary%20with%20argo%20rollouts%20and%20istio\/single-vs-multiple-svc\">here<\/a>. We have created two services called:<strong><em> <\/em><\/strong><a href=\"https:\/\/github.com\/imesh-ai\/webinar\/blob\/main\/Canary%20with%20argo%20rollouts%20and%20istio\/single-vs-multiple-svc\/services.yaml\"><strong><em>rollouts-demo-stable<\/em><\/strong><\/a> and <a href=\"https:\/\/github.com\/imesh-ai\/webinar\/blob\/main\/Canary%20with%20argo%20rollouts%20and%20istio\/single-vs-multiple-svc\/services.yaml\"><strong><em>rollouts-demo-canary<\/em><\/strong><\/a><strong><em>.<\/em><\/strong> Each service will listen to HTTP traffic for the Argo Rollout resource called <a href=\"https:\/\/github.com\/imesh-ai\/webinar\/blob\/main\/Canary%20with%20argo%20rollouts%20and%20istio\/single-vs-multiple-svc\/rollout.yaml\"><strong><em>rollouts-demo<\/em><\/strong><\/a>. In the rollouts-demo yaml, we have specified the Istio virtual service resource and the logic to gradually improve the traffic weightage from 20% to 40%, 60%, 80%, and eventually 100%.&nbsp;<\/p>\n\n\n\n<p>If you want to know more about this method, you can watch the detailed <a href=\"https:\/\/www.youtube.com\/watch?v=oHkurpeHke4\">video<\/a>.&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li><strong>Deploying new changes as a subset<\/strong><\/li>\n<\/ol>\n\n\n\n<p>In this method, you can have one service but create a new Deployment subset (canary version) pointing to the same service. Traffic can be split between the stable and canary deployment sets using Istio Virtual service and Destination rule resources.&nbsp;<\/p>\n\n\n\n<p>In this blog, we will thoroughly discuss the second method.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementing Canary using Istio and Argo Rollouts without changing Deployment resource<\/h2>\n\n\n\n<p>Since there is a misunderstanding among DevOps professionals that Argo Rollouts is a replacement for Deployment resource, and the services considered for canary deployment have to refer to the Argo Rollouts with Deployment configuration rewritten.&nbsp;<\/p>\n\n\n\n<p>Well, that\u2019s not true.&nbsp;<\/p>\n\n\n\n<p>The Argo Rollout resource provides a section called workloadRef, where existing Deployments can be referred to without making any significant changes to Deployment or service yamls.&nbsp;<\/p>\n\n\n\n<p>If you use the Deployments resource for a service in Kubernetes, you can provide a reference in the Rollout CRD, after which Argo Rollouts will manage the ReplicaSet for that service. Refe the below image.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" width=\"438\" height=\"92\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Deployments-resource-for-a-service-in-Kubernetes.png\" alt=\"Deployments resource for a service in Kubernetes\" class=\"wp-image-2003\" style=\"width:692px;height:auto\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Deployments-resource-for-a-service-in-Kubernetes.png 438w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Deployments-resource-for-a-service-in-Kubernetes-300x63.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Deployments-resource-for-a-service-in-Kubernetes-400x84.png 400w\" sizes=\"(max-width: 438px) 100vw, 438px\" \/><\/figure>\n<\/div>\n\n\n<p>We will use the same concept to deploy a canary version using the second method- Deploying new changes using a Deployment.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Argo Rollouts configuration for deploying new changes using a subset<\/h2>\n\n\n\n<p>Let&#8217;s say you have a Kubernetes service called <a href=\"https:\/\/github.com\/imesh-ai\/webinar\/blob\/main\/Canary%20with%20argo%20rollouts%20and%20istio\/single-svc-vs-multiple-set\/service.yaml\">rollout-demo-svc<\/a> and a deployment resource called <a href=\"https:\/\/github.com\/imesh-ai\/webinar\/blob\/main\/Canary%20with%20argo%20rollouts%20and%20istio\/single-svc-vs-multiple-set\/deployment.yaml\">rollouts-demo-deployment<\/a> (code below); you need to follow the three steps to configure the canary deployment.&nbsp;<\/p>\n\n\n\n<p>Code for Service.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-b4d593d9fdacac260b816c80c9d06a1d\"><code>apiVersion: v1\nkind: Service\nmetadata:\n&nbsp; name: rollouts-demo-svc\n&nbsp; namespace: istio-argo-rollouts\nspec:\n&nbsp; ports:\n&nbsp; - port: 80\n&nbsp; &nbsp; targetPort: http\n&nbsp; &nbsp; protocol: TCP\n&nbsp; &nbsp; name: http\n&nbsp; selector:\n&nbsp; &nbsp; app: rollouts-demo<\/code><\/pre>\n\n\n\n<p>Code for deployment.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-b9a689e702935b82a4f3f4ebe11442b3\"><code>apiVersion: apps\/v1\nkind: Deployment\nmetadata:\n&nbsp; name: rollouts-demo-deployment\n&nbsp; namespace: istio-argo-rollouts\nspec:\n&nbsp; replicas: 0 # this has to be made 0 once Argo rollout is active and functional.\n&nbsp; selector:\n&nbsp; &nbsp; matchLabels:\n&nbsp; &nbsp; &nbsp; app: rollouts-demo\n&nbsp; template:\n&nbsp; &nbsp; metadata:\n&nbsp; &nbsp; &nbsp; labels:\n&nbsp; &nbsp; &nbsp; &nbsp; app: rollouts-demo\n&nbsp; &nbsp; spec:\n&nbsp; &nbsp; &nbsp; containers:\n&nbsp; &nbsp; &nbsp; - name: rollouts-demo\n&nbsp; &nbsp; &nbsp; &nbsp; image: argoproj\/rollouts-demo:blue\n&nbsp; &nbsp; &nbsp; &nbsp; ports:\n&nbsp; &nbsp; &nbsp; &nbsp; - name: http\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; containerPort: 8080\n&nbsp; &nbsp; &nbsp; &nbsp; resources:\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; requests:\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; memory: 32Mi\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cpu: 5m<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step1- Setup virtual service and destination rule in Istio<\/h3>\n\n\n\n<p>Set up the virtual service by specifying the back-end destination for the HTTP traffic coming from the Istio gateway. In our virtual service <a href=\"https:\/\/github.com\/imesh-ai\/webinar\/blob\/main\/Canary%20with%20argo%20rollouts%20and%20istio\/single-svc-vs-multiple-set\/single-vs-multiple-set.yaml\">rollouts-demo-vs2<\/a>, we have mentioned the back-end service as <strong><em>rollouts-demo-svc<\/em><\/strong>, but we have created two subsets (stable and canary) for the respective deployment sets. We have set the traffic weightage rule as such that 100% of the traffic goes to the stable version, and 0% of the traffic goes to the canary version.&nbsp;<\/p>\n\n\n\n<p>As Istio is responsible for the traffic split, we will see how Argo updates this Virtual service resource with the new traffic configuration specified in the canary specification.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-b91427b33f4173ea2e64f2dabb58e40a\"><code>apiVersion: networking.istio.io\/v1alpha3\nkind: VirtualService\nmetadata:\n&nbsp; name: rollouts-demo-vs2\n&nbsp; namespace: istio-argo-rollouts\nspec:\n&nbsp; gateways:\n&nbsp; - istio-system\/rollouts-demo-gateway\n&nbsp; hosts:\n&nbsp; - \"*\"\n&nbsp; http:\n&nbsp; - name: route-one\n&nbsp; &nbsp; route:\n&nbsp; &nbsp; - destination:\n&nbsp; &nbsp; &nbsp; &nbsp; host: rollouts-demo-svc\n&nbsp; &nbsp; &nbsp; &nbsp; port:\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; number: 80\n&nbsp; &nbsp; &nbsp; &nbsp; subset: stable\n&nbsp; &nbsp; &nbsp; weight: 100\n&nbsp; &nbsp; - destination:\n&nbsp; &nbsp; &nbsp; &nbsp; host: rollouts-demo-svc\n&nbsp; &nbsp; &nbsp; &nbsp; port:\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; number: 80\n&nbsp; &nbsp; &nbsp; &nbsp; subset: canary\n&nbsp; &nbsp; &nbsp; weight: 0<\/code><\/pre>\n\n\n\n<p>Now, we have to define the subsets in the Destination rules. In the below <a href=\"https:\/\/github.com\/imesh-ai\/webinar\/blob\/main\/Canary%20with%20argo%20rollouts%20and%20istio\/single-svc-vs-multiple-set\/destination-rule.yaml\">rollout-destrule<\/a>, we have defined the subsets canary and stable and referred to the Argo Rollout resource called <strong><em>rollouts-demo<\/em><\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-8a09f12be80357cfd9c9deb8eab5c018\"><code>apiVersion: networking.istio.io\/v1alpha3\nkind: DestinationRule\nmetadata:\n&nbsp; name: rollout-destrule\n&nbsp; namespace: istio-argo-rollouts\nspec:\n&nbsp; host: rollouts-demo-svc\n&nbsp; subsets:\n&nbsp; - name: canary &nbsp; # referenced in canary.trafficRouting.istio.destinationRule.canarySubsetName\n&nbsp; &nbsp; labels:&nbsp; &nbsp; &nbsp; &nbsp; # labels will be injected with canary rollouts-pod-template-hash value\n&nbsp; &nbsp; &nbsp; app: rollouts-demo\n&nbsp; - name: stable &nbsp; # referenced in canary.trafficRouting.istio.destinationRule.stableSubsetName\n&nbsp; &nbsp; labels:&nbsp; &nbsp; &nbsp; &nbsp; # labels will be injected with stable rollouts-pod-template-hash value\n&nbsp; &nbsp; &nbsp; app: rollouts-demo<\/code><\/pre>\n\n\n\n<p>In the next step, we will set up the Argo Rollout resource.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2- Setup Argo Rollout resource&nbsp;<\/h3>\n\n\n\n<p>Two important items in the canary strategy should be noted in the Rollout spec: declare the Istio virtual service and destination rule and provide the traffic increment strategy.&nbsp;&nbsp;<\/p>\n\n\n\n<p>You can learn more about the <a href=\"https:\/\/argoproj.github.io\/argo-rollouts\/features\/specification\/\">Argo Rollout spec<\/a>.<\/p>\n\n\n\n<p>In our Argo rollout resource, <a href=\"https:\/\/github.com\/imesh-ai\/webinar\/blob\/main\/Canary%20with%20argo%20rollouts%20and%20istio\/single-svc-vs-multiple-set\/rollout-for-deployment.yaml\">rollouts-demo<\/a>, we have provided the deployment (<strong><em>rollouts-demo-deployment<\/em><\/strong><strong>)<\/strong> in the workloadRef spec. In the canary spec, we have referred to the virtual resource(<strong><em>rollouts-demo-vs2<\/em><\/strong>) and destination rule (<strong><em>rollout-destrule<\/em><\/strong>) created in the earlier step.&nbsp;<\/p>\n\n\n\n<p>We have also specified the traffic rules to redirect 20% of the traffic to the canary pods and then pause for manual direction.&nbsp;<\/p>\n\n\n\n<p>We have given this manual pause so that in the production environment, the Ops team can verify whether all the vital metrics and KPIs, such as CPU, memory, latency, and the throughput of the canary pods, are in an acceptable range.&nbsp;<\/p>\n\n\n\n<p>Once we manually promote the release, the canary pod traffic will increase to 40%. We will wait 10 seconds before increasing the traffic to 60%. The process will continue until the traffic to the canary pods increases to 100% and the stable pods are deleted.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-3dea22e7992d7c6371ccdaa27e250d07\"><code>apiVersion: argoproj.io\/v1alpha1\nkind: Rollout\nmetadata:\n&nbsp; name: rollouts-demo\n&nbsp; namespace: istio-argo-rollouts\nspec:\n&nbsp; replicas: 5\n&nbsp; strategy:\n&nbsp; &nbsp; canary:\n&nbsp; &nbsp; &nbsp; trafficRouting:\n&nbsp; &nbsp; &nbsp; &nbsp; istio:\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; virtualService:\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: rollouts-demo-vs2&nbsp; &nbsp; &nbsp; &nbsp; # required\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; routes:\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - route-one &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # optional if there is a single route in VirtualService, required otherwise\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; destinationRule:\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: rollout-destrule&nbsp; &nbsp; # required\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; canarySubsetName: canary&nbsp; # required\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stableSubsetName: stable&nbsp; # required\n&nbsp; &nbsp; &nbsp; steps:\n&nbsp; &nbsp; &nbsp; - setWeight: 20\n&nbsp; &nbsp; &nbsp; - pause: {}\n&nbsp; &nbsp; &nbsp; - setWeight: 40\n&nbsp; &nbsp; &nbsp; - pause: {duration: 10}\n&nbsp; &nbsp; &nbsp; - setWeight: 60\n&nbsp; &nbsp; &nbsp; - pause: {duration: 10}\n&nbsp; &nbsp; &nbsp; - setWeight: 80\n&nbsp; &nbsp; &nbsp; - pause: {duration: 10}\n&nbsp; revisionHistoryLimit: 2\n&nbsp; selector:\n&nbsp; &nbsp; matchLabels:\n&nbsp; &nbsp; &nbsp; app: rollouts-demo\n&nbsp; workloadRef:\n&nbsp; &nbsp; apiVersion: apps\/v1\n&nbsp; &nbsp; kind: Deployment\n&nbsp; &nbsp; name: rollouts-demo-deployment<\/code><\/pre>\n\n\n\n<p>Once you have deployed all the resources in steps 1 and 2 and accessed them through the Istio ingress IP from the browser, you will see an output like the one below.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"396\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Istio-ingress-IP-from-the-browser-1024x396.png\" alt=\"Istio ingress IP from the browser\" class=\"wp-image-2004\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Istio-ingress-IP-from-the-browser-1024x396.png 1024w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Istio-ingress-IP-from-the-browser-300x116.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Istio-ingress-IP-from-the-browser-768x297.png 768w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Istio-ingress-IP-from-the-browser-1536x594.png 1536w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Istio-ingress-IP-from-the-browser-400x155.png 400w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Istio-ingress-IP-from-the-browser-800x310.png 800w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Istio-ingress-IP-from-the-browser-1160x449.png 1160w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Istio-ingress-IP-from-the-browser.png 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>You can run the command below to understand how the pods are handled by Argo Rollouts.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-f1980c929cbc3d1e86698526a233a11c\"><code>kubectl get pods -n &lt;&lt;namespace&gt;&gt;<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"749\" height=\"132\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/how-the-pods-are-handled-by-Argo-Rollouts.png\" alt=\"how the pods are handled by Argo Rollouts\" class=\"wp-image-2005\" style=\"width:821px;height:auto\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/how-the-pods-are-handled-by-Argo-Rollouts.png 749w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/how-the-pods-are-handled-by-Argo-Rollouts-300x53.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/how-the-pods-are-handled-by-Argo-Rollouts-400x70.png 400w\" sizes=\"(max-width: 749px) 100vw, 749px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Validating canary deployment<\/h2>\n\n\n\n<p>Let\u2019s say developers have made new changes and created a new image that is supposed to be tested. For our case, we will make the Deployment manifest file (<strong><em>rollouts-demo-deployment<\/em><\/strong>) by modifying the image value from <strong><em>blue<\/em><\/strong> to <strong><em>red<\/em><\/strong>. (refer the image below).<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-c2c7b76956f5ba423430b56d56418585\"><code> spec:\n&nbsp; &nbsp; &nbsp; containers:\n&nbsp; &nbsp; &nbsp; - name: rollouts-demo\n&nbsp; &nbsp; &nbsp; &nbsp; image: argoproj\/rollouts-demo:blue<\/code><\/pre>\n\n\n\n<p>Once you deploy the <strong><em>rollouts-demo-deployment<\/em><\/strong>, Argo Rollout will understand that new changes have been introduced to the environment. It would then start making new \u2018canary\u2019 pods and allow 20% of the traffic. Refer the image below:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"890\" height=\"597\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Validating-canary-deployment.png\" alt=\"Validating canary deployment\" class=\"wp-image-2006\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Validating-canary-deployment.png 890w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Validating-canary-deployment-300x200.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Validating-canary-deployment-768x515.png 768w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Validating-canary-deployment-400x268.png 400w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Validating-canary-deployment-800x537.png 800w\" sizes=\"(max-width: 890px) 100vw, 890px\" \/><\/figure>\n<\/div>\n\n\n<p>Now, if you analyze the virtual service spec by running the following command, you will realize Argo has updated the traffic percentage to canary from 0% to 20% (as per the Rollouts spec).&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-182dd37271a3a00327baac3e8a0f7bc7\"><code>kubectl get vs rollouts-demo-vs2 -n &lt;&lt;namespace&gt;&gt; -o yaml<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"357\" height=\"289\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/traffic-percentage-to-canary.png\" alt=\"updated the traffic percentage to canary\" class=\"wp-image-2007\" style=\"width:425px;height:auto\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/traffic-percentage-to-canary.png 357w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/traffic-percentage-to-canary-300x243.png 300w\" sizes=\"(max-width: 357px) 100vw, 357px\" \/><\/figure>\n<\/div>\n\n\n<p>Gradually, 100% of the traffic will be shifted to the new version, and older\/stable pods will be terminated.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"916\" height=\"649\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/traffic-shifted-to-the-older-and-stable-pods.png\" alt=\"traffic shifted to the older and stable pods\" class=\"wp-image-2008\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/traffic-shifted-to-the-older-and-stable-pods.png 916w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/traffic-shifted-to-the-older-and-stable-pods-300x213.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/traffic-shifted-to-the-older-and-stable-pods-768x544.png 768w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/traffic-shifted-to-the-older-and-stable-pods-400x283.png 400w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/traffic-shifted-to-the-older-and-stable-pods-800x567.png 800w\" sizes=\"(max-width: 916px) 100vw, 916px\" \/><\/figure>\n<\/div>\n\n\n<p>In advanced cases, the DevOps team is required to control the scaling of canary pods. The idea is not to create all the pods as per the replica at each gradual shifting of the canary but to create the number of pods based on specific criteria. In those cases, we need to <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/run-application\/horizontal-pod-autoscale\/\">HorizontalPodAutoscaler<\/a> (HPA) to handle the scaling of canary pods.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Scaling of pods during canary deployment using HPA<\/h2>\n\n\n\n<p>Kubernetes HPA is used to increase or decrease pods based on load. HPA can also be used to control the scaling of pods during canary deployment. HorizontalPosAutoscaler overrides the Rollouts behaviour for scaling of pods.&nbsp;<\/p>\n\n\n\n<p>We have created and deployed the following HPA resource: <a href=\"https:\/\/github.com\/imesh-ai\/webinar\/blob\/main\/Canary%20with%20argo%20rollouts%20and%20istio\/rollout-hpa.yaml\">hpa-rollout-example<\/a>. In this resource, we have referenced the Argo Rollout resource <strong><em>rollouts-demo<\/em><\/strong>. That means HPA will be responsible for creating two replicas at the start. If the CPU utilization is more than 10%, more pods will be created. A maximum of six replicas will be created.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-460128c41e0f9b6fa1a23ecf5c74a705\"><code>apiVersion: autoscaling\/v1\nkind: HorizontalPodAutoscaler\nmetadata:\n&nbsp; name: hpa-rollout-example\n&nbsp; namespace: istio-argo-rollouts\nspec:\n&nbsp; maxReplicas: 6\n&nbsp; minReplicas: 2\n&nbsp; scaleTargetRef:\n&nbsp; &nbsp; apiVersion: argoproj.io\/v1alpha1\n&nbsp; &nbsp; kind: Rollout\n&nbsp; &nbsp; name: rollouts-demo\n&nbsp; targetCPUUtilizationPercentage: 10<\/code><\/pre>\n\n\n\n<p>In our case, when we deployed a canary, only two replicas were created at first (instead of the five mentioned in the Rollouts).&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"843\" height=\"204\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Scaling-of-pods-during-canary-deployment-using-HPA.png\" alt=\"Scaling of pods during canary deployment using HPA\" class=\"wp-image-2010\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Scaling-of-pods-during-canary-deployment-using-HPA.png 843w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Scaling-of-pods-during-canary-deployment-using-HPA-300x73.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Scaling-of-pods-during-canary-deployment-using-HPA-768x186.png 768w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Scaling-of-pods-during-canary-deployment-using-HPA-400x97.png 400w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Scaling-of-pods-during-canary-deployment-using-HPA-800x194.png 800w\" sizes=\"(max-width: 843px) 100vw, 843px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Validating scaling of pods by HPA by increasing synthetic loads&nbsp;<\/h2>\n\n\n\n<p>We can run the following command to increase the loads to a certain pod.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-95cbd48e90745a87a50589cffa0f423e\"><code>kubectl run -i -tty load-generator-1 -rm -image=busybox:1.28 -restart=Never - \/bin\/sh -c \"while sleep 0.01; do wget -q -O- http:\/\/&lt;&lt;service name&gt;&gt;.&lt;&lt;namespace&gt;&gt;; done;\"<\/code><\/pre>\n\n\n\n<p>You use the following command to observe the CPU utilization of the pods created by HPA.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-00fda7c7c230a7b6b2553433650201e0\"><code>kubectl get hpa hpa-rollout-example -n &lt;&lt;namespace&gt;&gt; -watch<\/code><\/pre>\n\n\n\n<p>Once the load increases more than 10%, in our case to 14% (refer to the image below), new pods will be created.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"866\" height=\"117\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA.png\" alt=\"CPU utilization of the pods created by HPA\" class=\"wp-image-2011\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA.png 866w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA-300x41.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA-768x104.png 768w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA-400x54.png 400w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA-800x108.png 800w\" sizes=\"(max-width: 866px) 100vw, 866px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"889\" height=\"248\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA1.png\" alt=\"CPU utilization of the pods created by HPA1\" class=\"wp-image-2012\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA1.png 889w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA1-300x84.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA1-768x214.png 768w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA1-400x112.png 400w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/CPU-utilization-of-the-pods-created-by-HPA1-800x223.png 800w\" sizes=\"(max-width: 889px) 100vw, 889px\" \/><\/figure>\n\n\n\n<p>Many metrics such as latency or throughput, can be used by HPA as criteria for scaling up or down the pods.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>As the pace of releasing software increases with the maturity of the CI\/CD process, new complications will emerge. And so will new requirements by the DevOps team to tackle these challenges. Similarly, when the canary deployment strategy is adopted rapidly by the DevOps team, new challenges of scale and traffic management emerge to gain granular control over the rapid release process and infrastructure cost.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As enterprises mature in their CI\/CD journey, they tend to ship code<span class=\"excerpt-more\"><\/span><\/p>\n","protected":false},"author":4,"featured_media":1997,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32],"tags":[53],"class_list":["post-1994","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-istio-service-mesh","tag-istio"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Advance traffic handling in Canary using Istio, Argo Rollouts, HPA<\/title>\n<meta name=\"description\" content=\"Get all the information about advance traffic management in Canary using Istio, Argo Rollouts, HPA. Read more about canary implementation architecture.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Advance traffic handling in Canary using Istio, Argo Rollouts, HPA\" \/>\n<meta property=\"og:description\" content=\"Get all the information about advance traffic management in Canary using Istio, Argo Rollouts, HPA. Read more about canary implementation architecture.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/\" \/>\n<meta property=\"og:site_name\" content=\"IMESH\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-24T05:37:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-24T05:37:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Advance-traffic-management-in-Canary-using-Istio-Argo-Rollouts-and-HPA.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"576\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Debasree Panda\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Debasree Panda\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/\"},\"author\":{\"name\":\"Debasree Panda\",\"@id\":\"https:\/\/imesh.ai\/blog\/#\/schema\/person\/b881b4a1c269b625dc91af0896f8036f\"},\"headline\":\"Advance traffic management in Canary using Istio, Argo Rollouts, and HPA\",\"datePublished\":\"2024-04-24T05:37:47+00:00\",\"dateModified\":\"2024-04-24T05:37:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/\"},\"wordCount\":1646,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/imesh.ai\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Advance-traffic-management-in-Canary-using-Istio-Argo-Rollouts-and-HPA.png\",\"keywords\":[\"istio\"],\"articleSection\":[\"Istio service mesh\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/\",\"url\":\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/\",\"name\":\"Advance traffic handling in Canary using Istio, Argo Rollouts, HPA\",\"isPartOf\":{\"@id\":\"https:\/\/imesh.ai\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Advance-traffic-management-in-Canary-using-Istio-Argo-Rollouts-and-HPA.png\",\"datePublished\":\"2024-04-24T05:37:47+00:00\",\"dateModified\":\"2024-04-24T05:37:49+00:00\",\"description\":\"Get all the information about advance traffic management in Canary using Istio, Argo Rollouts, HPA. Read more about canary implementation architecture.\",\"breadcrumb\":{\"@id\":\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#primaryimage\",\"url\":\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Advance-traffic-management-in-Canary-using-Istio-Argo-Rollouts-and-HPA.png\",\"contentUrl\":\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Advance-traffic-management-in-Canary-using-Istio-Argo-Rollouts-and-HPA.png\",\"width\":1024,\"height\":576},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/imesh.ai\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Advance traffic management in Canary using Istio, Argo Rollouts, and HPA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/imesh.ai\/blog\/#website\",\"url\":\"https:\/\/imesh.ai\/blog\/\",\"name\":\"IMESH Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/imesh.ai\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/imesh.ai\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/imesh.ai\/blog\/#organization\",\"name\":\"IMESH\",\"url\":\"https:\/\/imesh.ai\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/imesh.ai\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/03\/IMESH-LOGO-scaled.jpg\",\"contentUrl\":\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/03\/IMESH-LOGO-scaled.jpg\",\"width\":2560,\"height\":1665,\"caption\":\"IMESH\"},\"image\":{\"@id\":\"https:\/\/imesh.ai\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/imeshai\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/imesh.ai\/blog\/#\/schema\/person\/b881b4a1c269b625dc91af0896f8036f\",\"name\":\"Debasree Panda\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/imesh.ai\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1e02eb18435bad3283b1f03e1bf22de74113e9760ab00e90c41e539df347cd3d?s=96&d=wp_user_avatar&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1e02eb18435bad3283b1f03e1bf22de74113e9760ab00e90c41e539df347cd3d?s=96&d=wp_user_avatar&r=g\",\"caption\":\"Debasree Panda\"},\"description\":\"Debasree is the CEO of IMESH. He understands customer pain points in cloud and microservice architecture. Previously, he led product marketing and market research teams at Digitate and OpsMx, where he had created a multi-million dollar sales pipeline. He has helped open-source solution providers- Tetrate, OtterTune, and Devtron- design GTM from scratch and achieve product-led growth. He firmly believes serendipity happens to diligent and righteous people.\",\"sameAs\":[\"https:\/\/imesh.ai\"],\"url\":\"https:\/\/imesh.ai\/blog\/author\/debasreeimesh-ai\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Advance traffic handling in Canary using Istio, Argo Rollouts, HPA","description":"Get all the information about advance traffic management in Canary using Istio, Argo Rollouts, HPA. Read more about canary implementation architecture.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/","og_locale":"en_US","og_type":"article","og_title":"Advance traffic handling in Canary using Istio, Argo Rollouts, HPA","og_description":"Get all the information about advance traffic management in Canary using Istio, Argo Rollouts, HPA. Read more about canary implementation architecture.","og_url":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/","og_site_name":"IMESH","article_published_time":"2024-04-24T05:37:47+00:00","article_modified_time":"2024-04-24T05:37:49+00:00","og_image":[{"width":1024,"height":576,"url":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Advance-traffic-management-in-Canary-using-Istio-Argo-Rollouts-and-HPA.png","type":"image\/png"}],"author":"Debasree Panda","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Debasree Panda","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#article","isPartOf":{"@id":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/"},"author":{"name":"Debasree Panda","@id":"https:\/\/imesh.ai\/blog\/#\/schema\/person\/b881b4a1c269b625dc91af0896f8036f"},"headline":"Advance traffic management in Canary using Istio, Argo Rollouts, and HPA","datePublished":"2024-04-24T05:37:47+00:00","dateModified":"2024-04-24T05:37:49+00:00","mainEntityOfPage":{"@id":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/"},"wordCount":1646,"commentCount":0,"publisher":{"@id":"https:\/\/imesh.ai\/blog\/#organization"},"image":{"@id":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#primaryimage"},"thumbnailUrl":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Advance-traffic-management-in-Canary-using-Istio-Argo-Rollouts-and-HPA.png","keywords":["istio"],"articleSection":["Istio service mesh"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/","url":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/","name":"Advance traffic handling in Canary using Istio, Argo Rollouts, HPA","isPartOf":{"@id":"https:\/\/imesh.ai\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#primaryimage"},"image":{"@id":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#primaryimage"},"thumbnailUrl":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Advance-traffic-management-in-Canary-using-Istio-Argo-Rollouts-and-HPA.png","datePublished":"2024-04-24T05:37:47+00:00","dateModified":"2024-04-24T05:37:49+00:00","description":"Get all the information about advance traffic management in Canary using Istio, Argo Rollouts, HPA. Read more about canary implementation architecture.","breadcrumb":{"@id":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#primaryimage","url":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Advance-traffic-management-in-Canary-using-Istio-Argo-Rollouts-and-HPA.png","contentUrl":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Advance-traffic-management-in-Canary-using-Istio-Argo-Rollouts-and-HPA.png","width":1024,"height":576},{"@type":"BreadcrumbList","@id":"https:\/\/imesh.ai\/blog\/advance-traffic-management-in-canary-using-istio-argo-rollouts-and-hpa\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/imesh.ai\/blog\/"},{"@type":"ListItem","position":2,"name":"Advance traffic management in Canary using Istio, Argo Rollouts, and HPA"}]},{"@type":"WebSite","@id":"https:\/\/imesh.ai\/blog\/#website","url":"https:\/\/imesh.ai\/blog\/","name":"IMESH Blog","description":"","publisher":{"@id":"https:\/\/imesh.ai\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/imesh.ai\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/imesh.ai\/blog\/#organization","name":"IMESH","url":"https:\/\/imesh.ai\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imesh.ai\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/03\/IMESH-LOGO-scaled.jpg","contentUrl":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/03\/IMESH-LOGO-scaled.jpg","width":2560,"height":1665,"caption":"IMESH"},"image":{"@id":"https:\/\/imesh.ai\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/imeshai"]},{"@type":"Person","@id":"https:\/\/imesh.ai\/blog\/#\/schema\/person\/b881b4a1c269b625dc91af0896f8036f","name":"Debasree Panda","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imesh.ai\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1e02eb18435bad3283b1f03e1bf22de74113e9760ab00e90c41e539df347cd3d?s=96&d=wp_user_avatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1e02eb18435bad3283b1f03e1bf22de74113e9760ab00e90c41e539df347cd3d?s=96&d=wp_user_avatar&r=g","caption":"Debasree Panda"},"description":"Debasree is the CEO of IMESH. He understands customer pain points in cloud and microservice architecture. Previously, he led product marketing and market research teams at Digitate and OpsMx, where he had created a multi-million dollar sales pipeline. He has helped open-source solution providers- Tetrate, OtterTune, and Devtron- design GTM from scratch and achieve product-led growth. He firmly believes serendipity happens to diligent and righteous people.","sameAs":["https:\/\/imesh.ai"],"url":"https:\/\/imesh.ai\/blog\/author\/debasreeimesh-ai\/"}]}},"jetpack_featured_media_url":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2024\/04\/Advance-traffic-management-in-Canary-using-Istio-Argo-Rollouts-and-HPA.png","_links":{"self":[{"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/posts\/1994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/comments?post=1994"}],"version-history":[{"count":3,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/posts\/1994\/revisions"}],"predecessor-version":[{"id":2013,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/posts\/1994\/revisions\/2013"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/media\/1997"}],"wp:attachment":[{"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/media?parent=1994"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/categories?post=1994"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/tags?post=1994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}