{"id":1286,"date":"2023-06-06T04:37:59","date_gmt":"2023-06-06T04:37:59","guid":{"rendered":"https:\/\/imesh.ai\/blog\/?p=1286"},"modified":"2023-09-05T05:28:27","modified_gmt":"2023-09-05T05:28:27","slug":"how-to-implement-canary-for-kubernetes-apps-using-istio","status":"publish","type":"post","link":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/","title":{"rendered":"How to implement Canary for Kubernetes apps using Istio"},"content":{"rendered":"\n<p>In our last blog, we have described <a href=\"https:\/\/imesh.ai\/blog\/what-is-canary-deployment-in-ci-cd\/\">What is canary and why it is important for CI\/CD<\/a>. We also discussed the tools required for implementing canary- a traffic routing and an automated deployment tool.&nbsp;<\/p>\n\n\n\n<p>In this blog, we will focus on implementing canary deployment using <a href=\"https:\/\/imesh.ai\/imesh-istio-platform.html\">Istio service mesh<\/a> and Argo CD Rollouts (automated deployment tool). Please note, Argo Rollouts is not a pure play deployment tool, it is a progressive delivery tool used for implementing canary and blue\/green strategy for Kubernetes applications. If you want to deploy using GitOps (we recommend GitOps for Kubernetes deployment), then check out <a href=\"https:\/\/www.opsmx.com\/what-is-argocd\/\">Argo CD<\/a>.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Canary deployment steps to automate&nbsp;<\/h2>\n\n\n\n<p>You can implement canary deployment by automating the 4 phases of canary deployment strategy (refer to Fig A). But for our blog, we will focus on step-1, and 2.&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Configure network using Istio<\/strong>: We will use Istio resources to specify the rules to split and route the traffic.&nbsp;<\/li>\n\n\n\n<li><strong>Configure deployment using Argo Rollouts<\/strong>: We will create a yaml file of Argo Rollouts kind to deploy software (baseline version).&nbsp;<\/li>\n\n\n\n<li><strong>Perform canary analysis software (out-of-scope):<\/strong> Analyzing metrics and logs of the canary to validate the new release usually involves aggregating the data from the monitoring system and manually analyzing it (you can also use AI-based solutions like <a href=\"https:\/\/www.opsmx.com\/intelligent-software-delivery-isd\/isd-for-argo\/delivery-intelligence\/\">OpsMx ISD<\/a>). But this will remain out-of-scope of this blog.&nbsp;<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"659\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/Phases-of-Canary-deployment-in-CI-CD-1024x659.png\" alt=\"Phases of Canary-deployment in CI\/CD\" class=\"wp-image-1269\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/Phases-of-Canary-deployment-in-CI-CD-1024x659.png 1024w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/Phases-of-Canary-deployment-in-CI-CD-300x193.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/Phases-of-Canary-deployment-in-CI-CD-768x494.png 768w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/Phases-of-Canary-deployment-in-CI-CD-400x257.png 400w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/Phases-of-Canary-deployment-in-CI-CD-800x515.png 800w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/Phases-of-Canary-deployment-in-CI-CD-1160x746.png 1160w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/Phases-of-Canary-deployment-in-CI-CD.png 1197w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"has-text-align-center\"><strong>Fig A: Phases of Canary deployment in CI\/CD<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configure network using Istio gateway&nbsp;<\/h2>\n\n\n\n<p>Istio gateway helps in splitting the traffic in the run-time. Please note Istio provides two ways to implement canary:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>By treating two versions of an application- canary (new version) and stable as two separate services in Kubernetes.&nbsp;<\/li>\n\n\n\n<li>By treating two versions as the subset of the single application. In this case service in Kubernetes will have two different Deployments attached to it. You can read the blog <a href=\"https:\/\/www.opsmx.com\/blog\/how-to-perform-canary-with-argo-rollouts-and-istio-service-mesh\/\">here<\/a>.<\/li>\n<\/ul>\n\n\n\n<p>For this blog, we will consider the former option, deploying a new application as a new version.&nbsp;<\/p>\n\n\n\n<p>To attain the traffic splitting, Istio offers CRDs- Istio Gateway and Virtual services. Please refer to the Istio gateway (named as <strong><em>imesh-gateway<\/em><\/strong>) and the virtual service (<strong><em>imesh-vsvc<\/em><\/strong>) resources that we have used to split the traffic.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background\"><code>apiVersion: networking.istio.io\/v1alpha3\nkind: Gateway\nmetadata:\nname: imesh-gateway\nspec:\nselector:\n  istio: ingressgateway # using Istio IngressGateway\nservers:\n- port:\n    number: 80\n    name: http\n    protocol: HTTP\n  hosts:\n  - \"*\"<\/code><\/pre>\n\n\n\n<p>The virtual service would like something below. If you notice we have referred to deployments called <strong><em>imesh-rollout <\/em><\/strong>(Rollouts kind) and services <strong><em>canary-svc <\/em><\/strong>and <strong><em>stable-svc<\/em><\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background\"><code>apiVersion: networking.istio.io\/v1alpha3\nkind: VirtualService\nmetadata:\n  name: imesh-vsvc\n  Namespace: deb-ns\nspec:\n  gateways:\n  - imesh-gateway\n  hosts:\n  - imesh-rollout\n  http:\n  - name: primary        # referenced in canary.trafficRouting.istio.virtualService.routes\n    route:\n    - destination:\n        host: stable-svc # referenced in canary.stableService\n      weight: 100\n    - destination:\n        host: canary-svc # referenced in canary.canaryService\n      weight: 0\n\n<\/code><\/pre>\n\n\n\n<p>You can use the following command to deploy the Istio gateway and virtual service resources.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background\"><code>kubectl apply -n deb-ns -f imesh-gateway.yamlkubectl apply -n deb-ns -f imesh-vsvc.yaml<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Configure deployments using Argo Rollouts&nbsp;<\/h2>\n\n\n\n<p>Argo Rollouts is an open source software under the Argo project (graduated by CNCF in Dec, 2022). Argo Rollouts offers a Kubernetes controller and a set of custom resources (CRDs) to implement progressive deliveries such as canary and blue\/green. Two resources which are important for implementing canary are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rollouts: Rollouts is a workload resource which is an extended version of ReplicaSet workloads resource. Read about Rollouts <a href=\"https:\/\/argo-rollouts.readthedocs.io\/en\/latest\/features\/specification\/\">here<\/a>.<\/li>\n\n\n\n<li>Analysis Template: For automating the analysis (this is out of scope), one can use <a href=\"https:\/\/argo-rollouts.readthedocs.io\/en\/latest\/features\/analysis\/\">Analysis Template<\/a> to define various ways to perform canary. For example fetching data from the monitoring tools (like Prometheus, Appdynamics) and logging tools (like Splunk, Sumo logic).<\/li>\n<\/ul>\n\n\n\n<p>You can use the following Rollouts yaml to deploy an application. If you notice we have specified the two services called canary-svc and stable-svc ( we will see in the following section).<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background\"><code>apiVersion: argoproj.io\/v1alpha1\nkind: Rollout\nmetadata:\n  name: imesh-rollout\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: nginx\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.15.4\n        ports:\n        - containerPort: 80\n  minReadySeconds: 30\n  revisionHistoryLimit: 3\n  strategy:\n    canary:\n      canaryService: canary-svc \n      stableService: stable-svc  # required\n      trafficRouting:\n        istio:\n          virtualService:\n            name: imesh-vsvc   # required\n            routes:\n            - primary  \n      steps:\n      - setWeight: 50   # overrides the weight provided in virtualservice\n      - pause:\n          duration: 1h # 1 hour<\/code><\/pre>\n\n\n\n<p>You can use the following command to deploy the rollout resource.<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background\"><code>kubectl apply -n deb-ns -f rollout.yaml<\/code><\/pre>\n\n\n\n<p>After this we will configure the two services- canary-svc and stable-svc.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuring services in Kubernetes canary and stable versions<\/h2>\n\n\n\n<p>Now we will configure services in the same Kubernetes cluster to point to the deployments\/ Rollouts (<strong><em>imesh-rollout<\/em><\/strong>). We have configured the following in rollout-services.yaml.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background\"><code>apiVersion: v1\nkind: Service\nmetadata:\n&nbsp; name: canary-svc\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: imesh-rollout\n&nbsp;\n---\napiVersion: v1\nkind: Service\nmetadata:\n&nbsp; name: stable-svc\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: imesh-rollout\n&nbsp;&nbsp;&nbsp;<\/code><\/pre>\n\n\n\n<p>We can create the services by executing the command:<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background\"><code>kubectl apply -n deb-ns -f rollout-services.yaml<\/code><\/pre>\n\n\n\n<p>The canary deployment is configured.<\/p>\n\n\n\n<p>Once we will update the image in the Argo Rollouts, then the new deployment will happen using canary strategy. You can update the image using the following command:<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background\"><code>kubectl argo rollouts set image imesh-rollout nginx=nginx:1.15.5<\/code><\/pre>\n\n\n\n<p>Once you update the image to the new version, then Istio will direct Istio to route only 5% of the traffic to canary. And after 1 hour, the traffic will be increased by another 5%. If not rolled back, then the amount of traffic to the new version will be increased to 100% gradually.&nbsp;<\/p>\n\n\n\n<p>The output will look something like below:<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background\"><code>$ kubectl argo rollouts get rollout imesh-rollout\n\nName:            imesh-rollout\nNamespace:       deb-ns\nStatus:          \u0965 Paused\nMessage:         CanaryPauseStep\nStrategy:        Canary\n  Step:          1\/2\n  SetWeight:     50\n  ActualWeight:  50\nImages:          docker.io\/nginx:1.15.4 (stable)\n                docker.io\/nginx:1.15.5 (canary)\nReplicas:\n  Desired:       2\n  Current:       3\n  Updated:       1\n  Ready:         3\n  Available:     3\n\nNAME                                       KIND        STATUS     AGE  INFO\n\u27f3 imesh-rollout                            Rollout     \u0965 Paused   57m \n\u251c\u2500\u2500# revision:2                                                       \n\u2502  \u2514\u2500\u2500\u29c9 imesh-rollout-7sk234kd90           ReplicaSet  \u2714 Healthy  6s  canary\n\u2502     \u2514\u2500\u2500\u25a1 imesh-rollout-7sk234kd90-bp5lv  Pod         \u2714 Running  6s  ready:1\/1\n\u2514\u2500\u2500# revision:1                                                       \n  \u2514\u2500\u2500\u29c9 imesh-rollout-90sdfq3f89           ReplicaSet  \u2714 Healthy  56m  stable\n      \u251c\u2500\u2500\u25a1 imesh-rollout-90sdfq3f89-xb1zf  Pod         \u2714 Running  56m  ready:1\/1\n      \u2514\u2500\u2500\u25a1 imesh-rollout-90sdfq3f89-ws97n  Pod         \u2714 Running  56m  ready:1\/1\n<\/code><\/pre>\n\n\n\n<p>If you notice Argo Rollout has created new pods under canary ( 6 seconds ago) and while there were 2 other pods under the stable service (created 56 minutes ago). Argo Rollout which points to Istio virtual service, routes 50% of the traffic to canary and 50% to the stable version. It would wait for 1 hour before rolling out the canary fully i.e. routing 100% of the traffic. If you want to stop the deployment based on canary analysis, you can easily do so by rolling back to the stable version from the Argo UI or using kubectl command.<\/p>\n\n\n<!-- Ad space powered by WP AdCenter v2.5.7 - https:\/\/wpadcenter.com\/ --><div class=\"wpadcenter-ad-container\" ><div id=\"wpadcenter-ad-1533\" class=\" ad-placement  wpadcenter-alignnone alignnone\"><div class=\"wpadcenter-ad-inner\" ><a id=\"wpadcenter_ad\" data-value=1533 data-placement=\"\" href=\"https:\/\/imesh.ai\/webinars\/unified-observability-with-istio-and-skywalking.html%20\" target=\"_self\" class=\"wpadcenter-ad-inner__item\" ><img decoding=\"async\" width=\"641\" height=\"124\" src=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/08\/Istio-with-Skywalking.png\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"Istio with Skywalking\" srcset=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/08\/Istio-with-Skywalking.png 641w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/08\/Istio-with-Skywalking-300x58.png 300w, https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/08\/Istio-with-Skywalking-400x77.png 400w\" sizes=\"(max-width: 641px) 100vw, 641px\" \/><\/a><\/div><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Implementing the Canary deployment strategy is one of the important goals for architects and DevOps team. And adopting a service mesh not only helps in making releasing software safe and risk-free but also opens a new door of opportunities such as security, network management and cross-cluster observability.&nbsp;<\/p>\n\n\n\n<p>IMESH offers an enterprise version of Istio service mesh for implementing security (mTLS) and abstracting the network management from developers core work.&nbsp;<br>In case you are evaluating service mesh and want to understand the cost saving and value from Istio, <a href=\"https:\/\/imesh.ai\/talk-to-an-istio-expert.html\">talk to one of our Istio experts<\/a> for free. If you want to implement Istio or want us to provide life-cycle management features, then <a href=\"https:\/\/imesh.ai\/contact-us.html\">contact us<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In our last blog, we have described What is canary and why<span class=\"excerpt-more\"><\/span><\/p>\n","protected":false},"author":4,"featured_media":1288,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34,38],"tags":[83,53,57,84],"class_list":["post-1286","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kubernetes","category-network","tag-canary","tag-istio","tag-kubernetes","tag-network"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to implement it Canary for Kubernetes application using Istio<\/title>\n<meta name=\"description\" content=\"Learn how to deploy Kubernetes applications using canary deployment strategy and Istio service mesh.\" \/>\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\/how-to-implement-canary-for-kubernetes-apps-using-istio\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to implement it Canary for Kubernetes application using Istio\" \/>\n<meta property=\"og:description\" content=\"Learn how to deploy Kubernetes applications using canary deployment strategy and Istio service mesh.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/\" \/>\n<meta property=\"og:site_name\" content=\"IMESH\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-06T04:37:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-05T05:28:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/How-to-implement-Canary-for-Kubernetes-apps-using-Istio.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1710\" \/>\n\t<meta property=\"og:image:height\" content=\"990\" \/>\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=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/\"},\"author\":{\"name\":\"Debasree Panda\",\"@id\":\"https:\/\/imesh.ai\/blog\/#\/schema\/person\/b881b4a1c269b625dc91af0896f8036f\"},\"headline\":\"How to implement Canary for Kubernetes apps using Istio\",\"datePublished\":\"2023-06-06T04:37:59+00:00\",\"dateModified\":\"2023-09-05T05:28:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/\"},\"wordCount\":931,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/imesh.ai\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/How-to-implement-Canary-for-Kubernetes-apps-using-Istio.png\",\"keywords\":[\"Canary\",\"istio\",\"kubernetes\",\"network\"],\"articleSection\":[\"Kubernetes\",\"Network\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/\",\"url\":\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/\",\"name\":\"How to implement it Canary for Kubernetes application using Istio\",\"isPartOf\":{\"@id\":\"https:\/\/imesh.ai\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/How-to-implement-Canary-for-Kubernetes-apps-using-Istio.png\",\"datePublished\":\"2023-06-06T04:37:59+00:00\",\"dateModified\":\"2023-09-05T05:28:27+00:00\",\"description\":\"Learn how to deploy Kubernetes applications using canary deployment strategy and Istio service mesh.\",\"breadcrumb\":{\"@id\":\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#primaryimage\",\"url\":\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/How-to-implement-Canary-for-Kubernetes-apps-using-Istio.png\",\"contentUrl\":\"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/How-to-implement-Canary-for-Kubernetes-apps-using-Istio.png\",\"width\":1710,\"height\":990,\"caption\":\"Canary for Kubernetes application\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/imesh.ai\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to implement Canary for Kubernetes apps using Istio\"}]},{\"@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":"How to implement it Canary for Kubernetes application using Istio","description":"Learn how to deploy Kubernetes applications using canary deployment strategy and Istio service mesh.","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\/how-to-implement-canary-for-kubernetes-apps-using-istio\/","og_locale":"en_US","og_type":"article","og_title":"How to implement it Canary for Kubernetes application using Istio","og_description":"Learn how to deploy Kubernetes applications using canary deployment strategy and Istio service mesh.","og_url":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/","og_site_name":"IMESH","article_published_time":"2023-06-06T04:37:59+00:00","article_modified_time":"2023-09-05T05:28:27+00:00","og_image":[{"width":1710,"height":990,"url":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/How-to-implement-Canary-for-Kubernetes-apps-using-Istio.png","type":"image\/png"}],"author":"Debasree Panda","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Debasree Panda","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#article","isPartOf":{"@id":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/"},"author":{"name":"Debasree Panda","@id":"https:\/\/imesh.ai\/blog\/#\/schema\/person\/b881b4a1c269b625dc91af0896f8036f"},"headline":"How to implement Canary for Kubernetes apps using Istio","datePublished":"2023-06-06T04:37:59+00:00","dateModified":"2023-09-05T05:28:27+00:00","mainEntityOfPage":{"@id":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/"},"wordCount":931,"commentCount":0,"publisher":{"@id":"https:\/\/imesh.ai\/blog\/#organization"},"image":{"@id":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#primaryimage"},"thumbnailUrl":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/How-to-implement-Canary-for-Kubernetes-apps-using-Istio.png","keywords":["Canary","istio","kubernetes","network"],"articleSection":["Kubernetes","Network"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/","url":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/","name":"How to implement it Canary for Kubernetes application using Istio","isPartOf":{"@id":"https:\/\/imesh.ai\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#primaryimage"},"image":{"@id":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#primaryimage"},"thumbnailUrl":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/How-to-implement-Canary-for-Kubernetes-apps-using-Istio.png","datePublished":"2023-06-06T04:37:59+00:00","dateModified":"2023-09-05T05:28:27+00:00","description":"Learn how to deploy Kubernetes applications using canary deployment strategy and Istio service mesh.","breadcrumb":{"@id":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#primaryimage","url":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/How-to-implement-Canary-for-Kubernetes-apps-using-Istio.png","contentUrl":"https:\/\/imesh.ai\/blog\/wp-content\/uploads\/2023\/06\/How-to-implement-Canary-for-Kubernetes-apps-using-Istio.png","width":1710,"height":990,"caption":"Canary for Kubernetes application"},{"@type":"BreadcrumbList","@id":"https:\/\/imesh.ai\/blog\/how-to-implement-canary-for-kubernetes-apps-using-istio\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/imesh.ai\/blog\/"},{"@type":"ListItem","position":2,"name":"How to implement Canary for Kubernetes apps using Istio"}]},{"@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\/2023\/06\/How-to-implement-Canary-for-Kubernetes-apps-using-Istio.png","_links":{"self":[{"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/posts\/1286","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=1286"}],"version-history":[{"count":2,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/posts\/1286\/revisions"}],"predecessor-version":[{"id":1537,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/posts\/1286\/revisions\/1537"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/media\/1288"}],"wp:attachment":[{"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/media?parent=1286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/categories?post=1286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imesh.ai\/blog\/wp-json\/wp\/v2\/tags?post=1286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}