{"id":50026,"date":"2020-01-29T23:59:33","date_gmt":"2020-01-29T20:59:33","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=50026"},"modified":"2021-12-14T00:42:59","modified_gmt":"2021-12-13T21:42:59","slug":"automating-event-based-continuous-delivery-on-kubernetes-with-keptn","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/","title":{"rendered":"Automating Event-Based Continuous Delivery on Kubernetes with keptn"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#Issues_with_manually_built_pipelines\" >Issues with manually built pipelines<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#Building_stable_event-based_pipelines\" >Building stable event-based pipelines<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#How_it_works\" >How it works<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#Sample_workflow\" >Sample workflow<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#Want_details_Watch_the_videos\" >Want details? Watch the videos!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#Further_reading\" >Further reading<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#About_the_expert\" >About the expert<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Issues_with_manually_built_pipelines\"><\/span>Issues with manually built pipelines<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Delivery pipelines are designed to automate the roll out of new features and updates. In theory, such pipelines are useful in minimizing the amount of manual work needed to release or maintain software. However, in practice, there are multiple problems associated with delivery pipelines, as most companies build them manually and ad hoc:<\/p>\n<div id=\"attachment_50030\" style=\"width: 140px\" class=\"wp-caption alignright\"><a href=\"h:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/J\u00fcrgen-Etzlstorfer.jpg\"><img decoding=\"async\" aria-describedby=\"caption-attachment-50030\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/J\u00fcrgen-Etzlstorfer-150x150.jpg\" alt=\"\" width=\"130\" class=\"size-thumbnail wp-image-50030\" \/><\/a><p id=\"caption-attachment-50030\" class=\"wp-caption-text\"><small>J\u00fcrgen Etzlstorfer<\/small><\/p><\/div>\n<ul>\n<li style=\"margin-bottom: 6px;\">Over time, pipelines become complicated because of mixed information about processes, target platforms, environments, tools, etc.<\/li>\n<li style=\"margin-bottom: 6px;\">Due to code being spread across different tools, low maintainability occurs.<\/li>\n<li style=\"margin-bottom: 6px;\">There is no clear separation of concerns, as users with various roles (such as developers, DevOps experts, and site reliability engineers) employ the pipeline for different purposes.<\/li>\n<\/ul>\n<p>During a <a href=\"https:\/\/www.meetup.com\/Silicon-Valley-Cloud-Native-and-Kubernetes-Meetup\/events\/265530711\/?isFirstPublish=true\" rel=\"noopener noreferrer\" target=\"_blank\">Kubernetes meetup<\/a> last December, <a href=\"https:\/\/www.linkedin.com\/in\/juergenetzlstorfer\/\" rel=\"noopener noreferrer\" target=\"_blank\">J\u00fcrgen Etzlstorfer<\/a> of Dynatrace highlighted the above-mentioned issues and explained how <strong>keptn<\/strong> can help. In addition, he focused on the importance of smooth integration of components for CI\/CD.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Building_stable_event-based_pipelines\"><\/span>Building stable event-based pipelines<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>&#8220;When building a pipeline, we often can come up with a smartphone that&#8217;s not very smart,&#8221; said J\u00fcrgen. &#8220;It can do everything that you want to do, but you have very fragile integrations, and, at the very end, you do not want to touch it anymore.&#8221; Therefore, to improve the stability of the whole pipeline, it is critical to provide stability on the integration points.<\/p>\n<blockquote><p>&#8220;We want to have all the functionality, but we want to have it on this very stable platform. We want to have nice integration points, where it is easier to manage the delivery of great software.&#8221; \u2014J\u00fcrgen Etzlstorfer, Dynatrace<\/p><\/blockquote>\n<p>J\u00fcrgen then introduced the <a href=\"https:\/\/keptn.sh\" rel=\"noopener noreferrer\" target=\"_blank\">keptn<\/a> project aimed to help with automating CI\/CD in Kubernetes deployments. It is an open-source event-based control plane for continuous delivery and automated operations across cloud-native applications.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-architecture.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-architecture-1024x576.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-50040\" \/><\/a><small>The keptn architecture (<a href=\"https:\/\/drive.google.com\/file\/d\/1NtJNgx_rwfAgzg2ikwjf4Fvf9fGD2IzE\/view\" rel=\"noopener noreferrer\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<p>In a nutshell, keptn enables users to:<\/p>\n<ul>\n<li style=\"margin-bottom: 6px;\"><strong>define app delivery<\/strong> and operations processes declaratively<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>integrate and switch<\/strong> between different tools<\/li>\n<li><strong>separate processes<\/strong> from the tools by using predefined <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">CloudEvents<\/code><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"How_it_works\"><\/span>How it works<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>According to J\u00fcrgen, keptn relies on specification (<code style=\"color: black; background-color: #e6e6e6;\">.yaml<\/code>) files in order to determine how software is deployed. <code style=\"color: black; background-color: #e6e6e6;\">Shipyard.yaml<\/code> specifies the stages and what happens in each of the stages. For instance, development, hardening, and production stages are described here. <code style=\"color: black; background-color: #e6e6e6;\">Uniform.yaml<\/code> designates which services react to certain events. For example, the <code style=\"color: black; background-color: #e6e6e6;\">deploy-svc<\/code> and <code style=\"color: black; background-color: #e6e6e6;\">performance-test<\/code> services, as well as the events they listen to are described here.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-shipyard-uniform-specification.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-shipyard-uniform-specification.png\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-50047\" \/><\/a><small>Examples of keptn specification files (<a href=\"https:\/\/drive.google.com\/file\/d\/1NtJNgx_rwfAgzg2ikwjf4Fvf9fGD2IzE\/view\" rel=\"noopener noreferrer\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<p>By splitting the specifications, keptn provides a clear separation of concerns. Site reliability engineers can add new stages, while DevOps engineers can define the tools to be used for each new stage.<\/p>\n<blockquote><p>&#8220;There is a very clear separation, and everything can be updated individually. It is not so tightly coupled, so that you do not run into problems.&#8221; \u2014J\u00fcrgen Etzlstorfer, Dynatrace<\/p><\/blockquote>\n<p>Additionally, keptn makes use of &#8220;quality gates.&#8221; According to J\u00fcrgen, these are executed after the testing phase. In his example, J\u00fcrgen explained how the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Service-level_objective\" rel=\"noopener noreferrer\" target=\"_blank\">Service Level Objective<\/a> (SLO) qualifies the criteria for passing a service or issuing warnings to users.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-service-level-objective-files.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-service-level-objective-files-1024x576.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-50064\" \/><\/a><small>An example of an SLO configuration (<a href=\"https:\/\/drive.google.com\/file\/d\/1NtJNgx_rwfAgzg2ikwjf4Fvf9fGD2IzE\/view\" rel=\"noopener noreferrer\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<p>The ketpn&#8217;s bridge provides an interface to browse all the events sent within the solution, as well as to filter events based on context. This bridge also monitors all the events and the resulting actions in order to provide real-time information tracing.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-bridge.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-bridge-1024x510.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-50121\" \/><\/a><\/a><small>kept&#8217;s bridge enables browsing through events (Image credit)<\/small><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Sample_workflow\"><\/span>Sample workflow<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>To further understand keptn, J\u00fcrgen explained its workflow in order. The workflows begin once when the <code style=\"color: black; background-color: #e6e6e6;\">new-artifact<\/code> event is sent either through the keptn&#8217;s API or CLI with the command below.<\/p>\n<p><code style=\"color: black; background-color: #e6e6e6;\">keptn send event new-artifact --project=sockshop --service=carts-db --image=mongo<\/code><\/p>\n<p>The solution will then update its internal configuration, deploy the artifact, and update the environment. Following that, keptn will run tests and will validate each test with the quality gates. Based on the results from validation, the artifact will roll back or be kept for the next stage.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-workflow-v2.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-workflow-v2-1024x576.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-50119\" \/><\/a><small>The keptn workflow (<a href=\"https:\/\/drive.google.com\/file\/d\/1NtJNgx_rwfAgzg2ikwjf4Fvf9fGD2IzE\/view\" rel=\"noopener noreferrer\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<p>In a scenario where a user needs to onboard or roll out a new artifact, one would push the image to a container registry, and this will inform keptn to start a new deployment. In response, the solution will update the internal Git repository and will begin deployment and testing in the user&#8217;s cluster. After that, keptn will reach out and fetch all the metrics from a monitoring provider.<\/p>\n<p>Next, the system will update all the branches and move on to the next stage with a blue-green deployment. Once again, keptn will fetch metrics from a monitoring provider. Depending on the results, it will either pass or roll back, then notify a user.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-application-delivery.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-application-delivery-1024x576.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-50070\" \/><\/a><small>An example of application delivery using keptn (<a href=\"https:\/\/drive.google.com\/file\/d\/1NtJNgx_rwfAgzg2ikwjf4Fvf9fGD2IzE\/view\" rel=\"noopener noreferrer\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<p>Currently, <a href=\"https:\/\/github.com\/keptn\/keptn\/releases\/tag\/0.6.0\" rel=\"noopener noreferrer\" target=\"_blank\">keptn v0.6.0<\/a> is available, providing basic services needed for deploying an artifact to a Kubernetes cluster. These include configuration, deployment, testing, validation, and remediation services. keptn is also <a href=\"https:\/\/github.com\/cncf\/toc\/pull\/237\" rel=\"noopener noreferrer\" target=\"_blank\">proposed<\/a> as a CNCF (the Cloud Native Computing Foundation) sandbox project.<\/p>\n<blockquote><p>&#8220;You can always exchange the services in keptn. If you want to use a different tool for testing, you can unplug the existing service and plug in a different one. You do not need to change the whole process or the pipeline. You just have to change the service, and the rest stays the same.&#8221; \u2014J\u00fcrgen Etzlstorfer, Dynatrace<\/p><\/blockquote>\n<p>keptn can be installed on top of the following Kubernetes distributions:<\/p>\n<ul>\n<li>Azure Kubernetes Engine<\/li>\n<li>Amazon Elastic Kubernetes Service<\/li>\n<li>Google Kuberentes Engine<\/li>\n<li>Red Hat OpenShift<\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/kubernetes-on-pcf-pivotal-container-service-pks-from-different-perspectives\/\">Pivotal Container Service<\/a><\/li>\n<\/ul>\n<p>You can track the project&#8217;s development in <a href=\"https:\/\/github.com\/keptn\/keptn\" rel=\"noopener noreferrer\" target=\"_blank\">its GitHub repository<\/a>. Additional information, as well as tutorials are available at the <a href=\"https:\/\/keptn.sh\/\" rel=\"noopener noreferrer\" target=\"_blank\">keptn&#8217;s website<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Want_details_Watch_the_videos\"><\/span>Want details? Watch the videos!<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><small>In this video from the Kubernetes meetup (December 2019), <a href=\"https:\/\/www.linkedin.com\/in\/juergenetzlstorfer\/\" rel=\"noopener noreferrer\" target=\"_blank\">J\u00fcrgen Etzlstorfer<\/a> introduces keptn.<\/small><\/p>\n<div class=\"video-block\">\n<div class=\"video-block-wrap\">\n        <script charset=\"ISO-8859-1\" src=\"\/\/fast.wistia.com\/assets\/external\/E-v1.js\" async><\/script><\/p>\n<div class=\"wistia_embed wistia_async_5kaqxj9uf4\" style=\"height:320px;width:440px\"><\/div>\n<\/p><\/div>\n<div class=\"video-block-descr\">\n        <strong>Table of contents<\/strong><\/p>\n<ol>\n<li style=\"margin-bottom: 16px;\">What are delivery pipelines? (<a href=\"#wistia_5kaqxj9uf4?time=160\">2&#8217;40&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 16px;\">What is keptn?  (<a href=\"#wistia_5kaqxj9uf4?time=390\">6&#8217;30&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 16px;\">What are <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">Shipyard<\/code> files? (<a href=\"#wistia_5kaqxj9uf4?time=758\">12&#8217;38&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 16px;\">What are <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">Uniform<\/code> files? (<a href=\"#wistia_5kaqxj9uf4?time=844\">14&#8217;04&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 16px;\">What are quality gates? (<a href=\"#wistia_5kaqxj9uf4?time=890\">14&#8217;50&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 16px;\">How does keptn work? (<a href=\"#wistia_5kaqxj9uf4?time=1004\">16&#8217;44&#8221;<\/a>)<\/li>\n<li>Questions and answers (<a href=\"#wistia_5kaqxj9uf4?time=1480\">24&#8217;40&#8221;<\/a>)<\/li>\n<\/ol><\/div>\n<\/div>\n<p>&nbsp;<br \/>\n<small>Below, you will find the slides presented by J\u00fcrgen.<\/small><\/p>\n<p><center><iframe loading=\"lazy\" src=\"\/\/www.slideshare.net\/slideshow\/embed_code\/key\/2CHUnbHRXQ3v7Q\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> <\/iframe><\/center><\/p>\n<p>&nbsp;<br \/>\n<small>In this video, <a href=\"https:\/\/www.linkedin.com\/in\/grabnerandi\/\" rel=\"noopener noreferrer\" target=\"_blank\">Andreas Grabner<\/a> and <a href=\"https:\/\/www.linkedin.com\/in\/dirkwallerstorfer\/\" rel=\"noopener noreferrer\" target=\"_blank\">Dirk Wallerstorfer<\/a> of Dynatrace overview keptn and explain how to get started with it.<\/small><\/p>\n<p><center><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/0vXURzikTac\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/kubernetes-cluster-ops-options-for-configuration-management\/\">Kubernetes Cluster Ops: Options for Configuration Management<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/rule-driven-automation-on-kubernetes-with-autopilot-monitoring\/\">Rule-Driven Automation on Kubernetes with Autopilot Monitoring<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/research-papers\/a-comparative-analysis-of-kubernetes-cluster-monitoring-tools-kube-prometheus-elastic-zabbix\/\">A Comparison of Kubernetes \u0421luster Monitoring Tools: Kube-prometheus, Elastic, and Zabbix<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/research-papers\/a-comparative-analysis-of-kubernetes-deployment-tools-kubespray-kops-and-conjure-up\/\">A Comparative Analysis of Kubernetes Deployment Tools: Kubespray, kops, and conjure-up<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"About_the_expert\"><\/span>About the expert<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div>\n<div style=\"float: right;\"><a href=\"https:\/\/www.linkedin.com\/in\/juergenetzlstorfer\/\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/J\u00fcrgen-Etzlstorfer-dynatrace-bio.png\" alt=\"\" width=\"120\" class=\"aligncenter size-full wp-image-50076\" \/><\/a><\/div>\n<div style=\"width: 600px;\"><small><a href=\"https:\/\/www.linkedin.com\/in\/juergenetzlstorfer\/\" rel=\"noopener noreferrer\" target=\"_blank\">J\u00fcrgen Etzlstorfer<\/a> is Technology Strategist at Dynatrace. He is a core contributor to the keptn project and is responsible for the strategy and integration of self-healing techniques and tools into the keptn framework. J\u00fcrgen loves to share his experience, most recently at conferences on Kubernetes-based technologies and automation.<\/small><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<hr\/>\n<p><center><small>The post was written by <a href=\"https:\/\/www.altoros.com\/blog\/author\/carlo\/\">Carlo Gutierrez<\/a>, edited by <a href=\"https:\/\/www.altoros.com\/blog\/author\/sophie.turol\/\">Sophia Turol<\/a> and <a href=\"https:\/\/www.altoros.com\/blog\/author\/alex\/\">Alex Khizhniak<\/a>.<\/small><\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Issues with manually built pipelines<\/p>\n<p>Delivery pipelines are designed to automate the roll out of new features and updates. In theory, such pipelines are useful in minimizing the amount of manual work needed to release or maintain software. However, in practice, there are multiple problems associated with delivery pipelines, as most [&#8230;]<\/p>\n","protected":false},"author":32,"featured_media":50123,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[873,912],"class_list":["post-50026","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-cloud-native","tag-kubernetes"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Automating Event-Based Continuous Delivery on Kubernetes with keptn | Altoros<\/title>\n<meta name=\"description\" content=\"The keptn project provides a clear separation of concerns, allowing developers, DevOps, and site reliability engineers to individually update delivery pipelines.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automating Event-Based Continuous Delivery on Kubernetes with keptn | Altoros\" \/>\n<meta property=\"og:description\" content=\"Issues with manually built pipelines Delivery pipelines are designed to automate the roll out of new features and updates. In theory, such pipelines are useful in minimizing the amount of manual work needed to release or maintain software. However, in practice, there are multiple problems associated with delivery pipelines, as most [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-29T20:59:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-13T21:42:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-continues-delivery-pipeline-management-v2.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"360\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Carlo Gutierrez\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Gutierrez\" \/>\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\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/\",\"name\":\"Automating Event-Based Continuous Delivery on Kubernetes with keptn | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-continues-delivery-pipeline-management-v2.gif\",\"datePublished\":\"2020-01-29T20:59:33+00:00\",\"dateModified\":\"2021-12-13T21:42:59+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/833e109f77de753b2b472dca0236b442\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-continues-delivery-pipeline-management-v2.gif\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-continues-delivery-pipeline-management-v2.gif\",\"width\":640,\"height\":360},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automating Event-Based Continuous Delivery on Kubernetes with keptn\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/833e109f77de753b2b472dca0236b442\",\"name\":\"Carlo Gutierrez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/02\/CG_portrait-2-96x96.jpg\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/02\/CG_portrait-2-96x96.jpg\",\"caption\":\"Carlo Gutierrez\"},\"description\":\"Carlo Gutierrez is a Technical Writer at Altoros. As part of the editorial team, his focus has been on emerging technologies such as Cloud Foundry, Kubernetes, blockchain, and the Internet of Things. Prior to Altoros, he primarily wrote about enterprise and consumer technology. Carlo has over 12 years of experience in the publishing industry. Previously, he served as an Editor for PC World Philippines and Questex Asia, as well as a Designer for Tropa Entertainment.\",\"url\":\"https:\/\/www.altoros.com\/blog\/author\/carlo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Automating Event-Based Continuous Delivery on Kubernetes with keptn | Altoros","description":"The keptn project provides a clear separation of concerns, allowing developers, DevOps, and site reliability engineers to individually update delivery pipelines.","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:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/","og_locale":"en_US","og_type":"article","og_title":"Automating Event-Based Continuous Delivery on Kubernetes with keptn | Altoros","og_description":"Issues with manually built pipelines Delivery pipelines are designed to automate the roll out of new features and updates. In theory, such pipelines are useful in minimizing the amount of manual work needed to release or maintain software. However, in practice, there are multiple problems associated with delivery pipelines, as most [...]","og_url":"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/","og_site_name":"Altoros","article_published_time":"2020-01-29T20:59:33+00:00","article_modified_time":"2021-12-13T21:42:59+00:00","og_image":[{"width":640,"height":360,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-continues-delivery-pipeline-management-v2.gif","type":"image\/gif"}],"author":"Carlo Gutierrez","twitter_misc":{"Written by":"Carlo Gutierrez","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/","url":"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/","name":"Automating Event-Based Continuous Delivery on Kubernetes with keptn | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-continues-delivery-pipeline-management-v2.gif","datePublished":"2020-01-29T20:59:33+00:00","dateModified":"2021-12-13T21:42:59+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/833e109f77de753b2b472dca0236b442"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-continues-delivery-pipeline-management-v2.gif","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/01\/Keptn-Dynatrace-continues-delivery-pipeline-management-v2.gif","width":640,"height":360},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Automating Event-Based Continuous Delivery on Kubernetes with keptn"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/833e109f77de753b2b472dca0236b442","name":"Carlo Gutierrez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/02\/CG_portrait-2-96x96.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/02\/CG_portrait-2-96x96.jpg","caption":"Carlo Gutierrez"},"description":"Carlo Gutierrez is a Technical Writer at Altoros. As part of the editorial team, his focus has been on emerging technologies such as Cloud Foundry, Kubernetes, blockchain, and the Internet of Things. Prior to Altoros, he primarily wrote about enterprise and consumer technology. Carlo has over 12 years of experience in the publishing industry. Previously, he served as an Editor for PC World Philippines and Questex Asia, as well as a Designer for Tropa Entertainment.","url":"https:\/\/www.altoros.com\/blog\/author\/carlo\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/50026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=50026"}],"version-history":[{"count":97,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/50026\/revisions"}],"predecessor-version":[{"id":65422,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/50026\/revisions\/65422"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/50123"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=50026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=50026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=50026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}