{"id":59397,"date":"2021-01-14T17:58:21","date_gmt":"2021-01-14T14:58:21","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=59397"},"modified":"2022-06-23T15:05:26","modified_gmt":"2022-06-23T12:05:26","slug":"the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/","title":{"rendered":"The Ways to Streamline Apps and Ops on Azure Kubernetes Service"},"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\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#Identifying_your_level_of_adoption\" >Identifying your level of adoption<\/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\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#Improving_application_maturity\" >Improving application maturity<\/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\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#Enhancing_operations_maturity\" >Enhancing operations maturity<\/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\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#Using_external_tools_and_practices\" >Using external tools and practices<\/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\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#Microsoft-specific_recommendations\" >Microsoft-specific recommendations<\/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\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#See_this_in_action\" >See this in action<\/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\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#Related_slides\" >Related slides<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#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-9\" href=\"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#About_the_expert\" >About the expert<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Identifying_your_level_of_adoption\"><\/span>Identifying your level of adoption<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/tag\/kubernetes\/\">Kubernetes<\/a> is a container orchestration system designed to run multiple types of cloud-native applications. It has several distributions, including Azure Kubernetes Service (AKS) from Microsoft. Given the size of the platform, organizations running Kubernetes are likely to have differences in the maturity state of their deployment.<\/p>\n<p>In order to understand these differences in states, it is necessary to create a model that gauges multiple factors associated with Kubernetes deployment, such as high availability, cluster security, platform operations, etc. With such a model, companies will be able to determine their current maturity state and also identify areas to improve on. (To learn more about the beginner, intermediate, advanced, and expert levels of Kubernetes maturity, read our <a href=\"https:\/\/www.altoros.com\/blog\/maturity-of-app-deployments-on-kubernetes-from-manual-to-automated-ops\/\">blog post<\/a> on the topic.)<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Categories-of-Kubernetes-Maturity.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Categories-of-Kubernetes-Maturity-1024x576.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-59398\" \/><\/a><small>Categories to focus on to accelerate maturity (<a href=\"https:\/\/www2.slideshare.net\/altoros\/maturing-with-kubernetes-240982728\" rel=\"noopener noreferrer\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<div id=\"attachment_55307\" style=\"width: 130px\" class=\"wp-caption alignright\"><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/07\/barry-williams.png\"><img decoding=\"async\" aria-describedby=\"caption-attachment-55307\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/07\/barry-williams-150x150.png\" alt=\"\" width=\"120\" class=\"size-thumbnail wp-image-55307\" \/><\/a><p id=\"caption-attachment-55307\" class=\"wp-caption-text\"><small>Barry Williams<\/small><\/p><\/div>\n<p>To improve Kubernetes deployments, organizations will need to focus on three main categories: applications, operations, as well as external tools and practices. <a href=\"https:\/\/www.linkedin.com\/in\/barryewilliams42\/\" rel=\"noopener noreferrer\" target=\"_blank\">Barry Williams<\/a>, Cloud Solutions Architect at Altoros, overviewed some Kubernetes best practices during a recent <a href=\"https:\/\/www.brighttalk.com\/webcast\/11925\/455388?utm_source=brighttalk-portal&#038;utm_medium=web&#038;utm_content=maturing%20with%20kubernetes&#038;utm_campaign=webcasts-search-results-feed\" rel=\"noopener noreferrer\" target=\"_blank\">webinar<\/a>. He also demonstrated how deploying an application works with an automated pipeline.<\/p>\n<blockquote><p>&#8220;Progressing across maturity stages is about evaluating technical debt or asking\u2014what payment will give the most bang for the buck?&#8221; \u2014Barry Williams, Altoros<\/p><\/blockquote>\n<p>This blog post features general best practices from the webinar, as well as recommendations from Microsoft. It explains where to focus on when optimizing your apps, operations, and tools used\u2014to enable automation across the entire software development life cycle.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Improving_application_maturity\"><\/span>Improving application maturity<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><i>Application maturity<\/i> focuses on which Kubernetes objects and patterns are used when deploying applications. Below are some best practices under this category.<\/p>\n<p><b>Configuring resource limits and requests<\/b> properly improves cluster stability by ensuring applications have the resources to run successfully. The most commonly requested resources are CPU and memory.<\/p>\n<p><b>Developing apps directly on Kubernetes<\/b> leads to faster time to market for software features. By building on the platform itself, the development feedback loop is drastically reduced.<\/p>\n<p><b>Externalizing sensitive configuration<\/b> decouples application artifacts from their environments, enabling companies to test an artifact once while using it in multiple places. This is done with <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/configmap\/\" rel=\"noopener noreferrer\" target=\"_blank\">ConfigMaps<\/a> and <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/secret\/\" rel=\"noopener noreferrer\" target=\"_blank\">Secrets<\/a>.<\/p>\n<p><b>Health checks are essential<\/b> for gaining insight into application health. These checks enable Kubernetes to automate health-related tasks to improve application performance. For instance, Kubernetes can hold network traffic until an application is ready to receive traffic or restart an application when necessary.<\/p>\n<p><b>Network and security policies<\/b> are used to reduce the effects of incorrect or malicious code. Network policies act like a firewall between applications. <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/policy\/pod-security-policy\/\" rel=\"noopener noreferrer\" target=\"_blank\">Pod Security Policies<\/a> and <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/security-context\/\" rel=\"noopener noreferrer\" target=\"_blank\">Security Contexts<\/a> protect hosts and other containers.<\/p>\n<p>You can read more recommendations for <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/developer-best-practices-resource-management\" rel=\"noopener noreferrer\" target=\"_blank\">resource management<\/a> and <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/developer-best-practices-pod-security\" rel=\"noopener noreferrer\" target=\"_blank\">pod security<\/a> in Microsoft&#8217;s official documentation.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Enhancing_operations_maturity\"><\/span>Enhancing operations maturity<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The second category, <i>operations maturity<\/i>, focuses on how Kubernetes is deployed and maintained. There are the following recommendations for this category.<\/p>\n<p><b>Scheduling optimization<\/b> enables safer operation of apps. <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/policy\/resource-quotas\/\" rel=\"noopener noreferrer\" target=\"_blank\">Resource quotas<\/a> allocate resources for an entire business application. <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#pod-disruption-budgets\" rel=\"noopener noreferrer\" target=\"_blank\">Pod disruption budgets<\/a> ensure safe rollouts of apps while keeping up with the load. <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/scheduling-eviction\/taint-and-toleration\/\" rel=\"noopener noreferrer\" target=\"_blank\">Taints and tolerations<\/a> separate application workloads when needed.<\/p>\n<p><b>Container image management<\/b> governs the artifacts of apps. This involves common vulnerabilities and exposures (<a href=\"https:\/\/cve.mitre.org\/cve\/\" rel=\"noopener noreferrer\" target=\"_blank\">CVE<\/a>) scanning, environment hardening, providing up-to-date security patches, and automatically building new images when base images are updated.<\/p>\n<p><b>Authentication and authorization<\/b> secures access to the Kubernetes API. Use <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-service-account\/\" rel=\"noopener noreferrer\" target=\"_blank\">service accounts<\/a> or role-based access control (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Role-based_access_control\" rel=\"noopener noreferrer\" target=\"_blank\">RBAC<\/a>) to set permissions, roles, and role bindings for Kubernetes users and groups.<\/p>\n<p><b>Cluster management<\/b> involves bringing the latest platform features and stability techniques. These techniques include automated cluster upgrades, <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/cluster-autoscaler\" rel=\"noopener noreferrer\" target=\"_blank\">cluster autoscaling<\/a>, platform and application high availability, as well as disaster recovery and business continuity. The documentation on Microsoft also suggests such <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/best-practices\" rel=\"noopener noreferrer\" target=\"_blank\">recommendations<\/a> to improve cluster management as:<\/p>\n<ul>\n<li style=\"margin-bottom: 6px;\">Bolster network connectivity by using different network models, ingress, and web application firewalls in addition to securing node SSH access<\/li>\n<li style=\"margin-bottom: 6px;\">Optimize storage by choosing the appropriate type and node size. Enable dynamically provisioning volumes and data backups.<\/li>\n<li>Improve business continuity and disaster recovery through region pairs and geo-replication of container images.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Using_external_tools_and_practices\"><\/span>Using external tools and practices<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The third category, <i>external tools and practices<\/i>, involves everything else besides apps and operations that support Kubernetes. This includes continuous integration (CI), continuous delivery (CD), testing, and external services. The following best practices are valid under this category.<\/p>\n<p><b>Be specific<\/b> about tools. Although Kubernetes is agnostic to languages and frameworks, picking tools that effectively express desired software features and enable rapid iteration.<\/p>\n<p><b>Use microservices<\/b> to allow apps to be separated into a distributed system. This way, application components can be scaled and managed independently from one another.<\/p>\n<p><b>Testing automation<\/b> plays a crucial role in attaining velocity. Be sure to incorporate unit, integration, performance, and smoke tests.<\/p>\n<p><b>Build a CI\/CD pipeline<\/b>. Under CI, artifacts are built and tested. The bulk of testing is performed in CI, making it a gateway for viable features. CD is the fully automated delivery of software and platform features beginning from code commit to production.<\/p>\n<p><b>Increase observability<\/b> to gain insights into the apps and platform. Use tools for monitoring, logging, tracing, topology, etc.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Kubernetes-Maturity-software-development-life-cycle.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Kubernetes-Maturity-software-development-life-cycle-1024x576.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-59424\" \/><\/a><small>Automation of multiple processes at the expert level (<a href=\"https:\/\/www2.slideshare.net\/altoros\/maturing-with-kubernetes-240982728\" rel=\"noopener noreferrer\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<blockquote><p>&#8220;To better understand what can be improved, we need to identify the activities involved in delivering software value. Let&#8217;s start with the software development life cycle. Business directions are communicated and translated into a design. This design feeds software development. This software is then tested and deployed. Metrics from the deployment are used to guide business decisions and further software improvements. Then, the process cycles. A company with an expert level of maturity will automate these processes as much as possible.&#8221; \u2014Barry Williams, Altoros<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Microsoft-specific_recommendations\"><\/span>Microsoft-specific recommendations<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>In addition to the recommendations listed above, organizations looking to accelerate their Kubernetes deployments should also adopt best practices suggested by service providers. With microservices becoming a popular architectural style for building apps, Microsoft suggests the following structured approach:<\/p>\n<ul>\n<li style=\"margin-bottom: 6px;\">Model microservices using <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/microservices\/model\/domain-analysis\" rel=\"noopener noreferrer\" target=\"_blank\">domain analysis<\/a>.<\/li>\n<li style=\"margin-bottom: 6px;\">Design <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/microservices\/model\/tactical-ddd\" rel=\"noopener noreferrer\" target=\"_blank\">domain-driven<\/a> microservices.<\/li>\n<li>Identify microservices <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/microservices\/model\/microservice-boundaries\" rel=\"noopener noreferrer\" target=\"_blank\">boundaries<\/a>.<\/li>\n<\/ul>\n<p>Since microservices-based architecture is distributed, it is ideal to maintain robust operations with a CI\/CD pipeline. According to Microsoft&#8217;s <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/reference-architectures\/containers\/aks-microservices\/aks-microservices\" rel=\"noopener noreferrer\" target=\"_blank\">official documentation<\/a>, a CI\/CD pipeline can enable:<\/p>\n<ul>\n<li style=\"margin-bottom: 6px;\">teams to build and deploy services that they own without impacting other fellow teams<\/li>\n<li style=\"margin-bottom: 6px;\">developer environments to test versions of new services before being deployed to production<\/li>\n<li style=\"margin-bottom: 6px;\">versions of new services to be deployed in parallel with older versions.<\/li>\n<li style=\"margin-bottom: 6px;\">proper configuration of access control policies<\/li>\n<li>safe deployments of container images<\/li>\n<\/ul>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Azure-Kubernetes-Service-reference-architecture-microservices.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Azure-Kubernetes-Service-reference-architecture-microservices-1024x661.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-59509\" \/><\/a><small>An example of a microservices deployment (<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/reference-architectures\/containers\/aks-microservices\/aks-microservices\" rel=\"noopener noreferrer\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<p>Even with a CI\/CD pipeline in place, in a microservices-based architecture, it is still crucial to keep track of everything happening across all services. To do so, Microsoft recommends to <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/microservices\/logging-monitoring\" rel=\"noopener noreferrer\" target=\"_blank\">collect logs and metrics<\/a> from each service. Logs are useful for troubleshooting and finding root causes. On the other hand, metrics are good for observing the system in real time to monitor trends.<\/p>\n<p>In AKS, both logging and metrics are easily collected with <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-monitor\/\" rel=\"noopener noreferrer\" target=\"_blank\">Azure Monitor<\/a>. The telemetry tool collects data from microservices and other sources, including applications, operating systems, and the platform itself.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"See_this_in_action\"><\/span>See this in action<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>To better understand the value of applying Kubernetes best practices, Barry prepared a <a href=\"https:\/\/github.com\/Altoros\/sample-azure-voting-app\/\" rel=\"noopener noreferrer\" target=\"_blank\">demonstration<\/a> involving app deployment with an automated CI\/CD pipeline. The workflow:<\/p>\n<ul>\n<li style=\"margin-bottom: 6px;\">A GitHub pull request brings in new features.<\/li>\n<li style=\"margin-bottom: 6px;\">Jenkins builds a Docker image and pushes it to Azure Container Registry.<\/li>\n<li style=\"margin-bottom: 6px;\">Spinnaker detects the new image and deploys it to AKS.<\/li>\n<\/ul>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Kubernetes-Maturity-delivery-pipeline.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Kubernetes-Maturity-delivery-pipeline-1024x576.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-59431\" \/><\/a><small>A workflow of the demo scenario (<a href=\"https:\/\/www2.slideshare.net\/altoros\/maturing-with-kubernetes-240982728\" rel=\"noopener noreferrer\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<p>Different pull requests simulated various scenarios to highlight how automation is able to protect the production environment from incorrect code. Barry demonstrated how Jenkins is able to detect errors during testing and stop deployment. If an error is not detected during testing and surfaces only while in production, Spinnaker is able to catch the failure and trigger a rollback.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Kubernetes-Maturity-Demo-App-Spinnaker-roll-back.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Kubernetes-Maturity-Demo-App-Spinnaker-roll-back-1024x643.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-59488\" \/><\/a><small>Spinnaker catching the failure in production and rolling back<\/small><\/center><\/p>\n<p>With an automated pipeline, the production environment remained up and stable even during pull requests that caused errors. By adopting best practices, having a robust CI\/CD pipeline in this case, organizations can ensure safe rollouts without any downtime.<\/p>\n<blockquote><p>&#8220;Being an expert at Kubernetes means the automation of all aspects of software delivery and testing. Ideally, companies should approach maturity from the point of view of a technical debt. Focus on things that bring the largest business value.&#8221; \u2014Barry Williams, Altoros<\/p><\/blockquote>\n<p>Want details? Watch the <a href=\"https:\/\/www.brighttalk.com\/webcast\/11925\/455388\" rel=\"noopener noreferrer\" target=\"_blank\">webinar<\/a> or read more about Kubernetes <a href=\"https:\/\/www.altoros.com\/blog\/maturity-of-app-deployments-on-kubernetes-from-manual-to-automated-ops\/\">maturity evaluation<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Related_slides\"><\/span>Related slides<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><center><iframe loading=\"lazy\" src=\"\/\/www.slideshare.net\/slideshow\/embed_code\/key\/8vAlCFlp9MQCdp\" 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;<\/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\/maturity-of-app-deployments-on-kubernetes-from-manual-to-automated-ops\/\">Maturity of App Deployments on Kubernetes: From Manual to Automated Ops<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/automating-event-based-continuous-delivery-on-kubernetes-with-keptn\/\">Automating Event-Based Continuous Delivery on Kubernetes with keptn<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/running-a-cloud-foundry-spring-boot-app-on-azure-kubernetes-service-aks\/\">Running a Cloud Foundry Spring Boot App on Azure Kubernetes Service (AKS)<\/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<p><a href=\"https:\/\/www.linkedin.com\/in\/barryewilliams42\/\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2020\/07\/Barry-Williams-Altoros.png\" alt=\"\" width=\"120\" class=\"alignright size-full wp-image-55106\" \/><\/p>\n<p><small><a href=\"https:\/\/github.com\/BarryWilliams\" rel=\"noopener noreferrer\" target=\"_blank\">Barry Williams<\/a> is Cloud Solutions Architect at Altoros. He has designed and implemented the architecture for microservice applications. Barry focuses on automation in all things and cloud platforms. He is an expert in Kubernetes, Cloud Foundry, Docker, Linux, Concourse CI, ELK Stack, Shell Script, Python, Java, Go, Ruby, Agile, Extreme Programming, etc.<\/small><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p><center><small>This blog 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>Identifying your level of adoption<\/p>\n<p>Kubernetes is a container orchestration system designed to run multiple types of cloud-native applications. It has several distributions, including Azure Kubernetes Service (AKS) from Microsoft. Given the size of the platform, organizations running Kubernetes are likely to have differences in the maturity state of their deployment.<\/p>\n<p>In [&#8230;]<\/p>\n","protected":false},"author":32,"featured_media":59695,"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-59397","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>The Ways to Streamline Apps and Ops on Azure Kubernetes Service | Altoros<\/title>\n<meta name=\"description\" content=\"Learn where to focus on if you seek building an efficient AKS deployment automated across the entire process of software delivery.\" \/>\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\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Ways to Streamline Apps and Ops on Azure Kubernetes Service | Altoros\" \/>\n<meta property=\"og:description\" content=\"Identifying your level of adoption Kubernetes is a container orchestration system designed to run multiple types of cloud-native applications. It has several distributions, including Azure Kubernetes Service (AKS) from Microsoft. Given the size of the platform, organizations running Kubernetes are likely to have differences in the maturity state of their deployment. In [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-14T14:58:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-06-23T12:05:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Accelerating-Kubernetes-Maturity-Best-Practices-Azure-Microsoft-AKS.gif\" \/>\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\/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=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/\",\"name\":\"The Ways to Streamline Apps and Ops on Azure Kubernetes Service | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Accelerating-Kubernetes-Maturity-Best-Practices-Azure-Microsoft-AKS.gif\",\"datePublished\":\"2021-01-14T14:58:21+00:00\",\"dateModified\":\"2022-06-23T12:05:26+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/833e109f77de753b2b472dca0236b442\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Accelerating-Kubernetes-Maturity-Best-Practices-Azure-Microsoft-AKS.gif\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Accelerating-Kubernetes-Maturity-Best-Practices-Azure-Microsoft-AKS.gif\",\"width\":1024,\"height\":576},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Ways to Streamline Apps and Ops on Azure Kubernetes Service\"}]},{\"@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":"The Ways to Streamline Apps and Ops on Azure Kubernetes Service | Altoros","description":"Learn where to focus on if you seek building an efficient AKS deployment automated across the entire process of software delivery.","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\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/","og_locale":"en_US","og_type":"article","og_title":"The Ways to Streamline Apps and Ops on Azure Kubernetes Service | Altoros","og_description":"Identifying your level of adoption Kubernetes is a container orchestration system designed to run multiple types of cloud-native applications. It has several distributions, including Azure Kubernetes Service (AKS) from Microsoft. Given the size of the platform, organizations running Kubernetes are likely to have differences in the maturity state of their deployment. In [...]","og_url":"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/","og_site_name":"Altoros","article_published_time":"2021-01-14T14:58:21+00:00","article_modified_time":"2022-06-23T12:05:26+00:00","og_image":[{"width":1024,"height":576,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Accelerating-Kubernetes-Maturity-Best-Practices-Azure-Microsoft-AKS.gif","type":"image\/gif"}],"author":"Carlo Gutierrez","twitter_misc":{"Written by":"Carlo Gutierrez","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/","url":"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/","name":"The Ways to Streamline Apps and Ops on Azure Kubernetes Service | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Accelerating-Kubernetes-Maturity-Best-Practices-Azure-Microsoft-AKS.gif","datePublished":"2021-01-14T14:58:21+00:00","dateModified":"2022-06-23T12:05:26+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/833e109f77de753b2b472dca0236b442"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Accelerating-Kubernetes-Maturity-Best-Practices-Azure-Microsoft-AKS.gif","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/01\/Accelerating-Kubernetes-Maturity-Best-Practices-Azure-Microsoft-AKS.gif","width":1024,"height":576},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/the-ways-to-streamline-apps-and-ops-on-azure-kubernetes-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"The Ways to Streamline Apps and Ops on Azure Kubernetes Service"}]},{"@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\/59397","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=59397"}],"version-history":[{"count":180,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/59397\/revisions"}],"predecessor-version":[{"id":66850,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/59397\/revisions\/66850"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/59695"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=59397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=59397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=59397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}