{"id":18707,"date":"2022-08-31T11:00:37","date_gmt":"2022-08-31T16:00:37","guid":{"rendered":"https:\/\/sterling.com\/?p=18707"},"modified":"2022-08-31T11:00:37","modified_gmt":"2022-08-31T16:00:37","slug":"gitops-with-vmware-tanzu-for-automated-application-and-service-delivery","status":"publish","type":"post","link":"https:\/\/sterling.com\/stargazer\/?p=18707","title":{"rendered":"GitOps with VMware Tanzu for Automated Application and Service Delivery"},"content":{"rendered":"<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; color: #2f5496; font-size: 13pt;\"><strong><em>What is GitOps and How Does It Guide Us to Efficiency?<\/em><\/strong><\/h2>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">GitOps is the technical implementation of a DevOps culture for automated software delivery.<img decoding=\"async\" width=\"232\" height=\"154\" class=\"alignleft wp-image-18708 size-full\" style=\"margin-right: 9pt; margin-top: 0.15pt;\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Graphic-7-232w154h.png\" \/> As DevOps defines collaboration and culture, team structures, potential outcomes for platforms, and so forth, GitOps provides a prescriptive technical implementation of those principles to standardize industry best practices for software and infrastructure delivery.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">The overarching benefit of GitOps is the commonality of interface and platform, when following industry practices, used to simplify the orchestration of application delivery. For example, a GitOps implementation today would commonly standardize on Git as the version-controlled source of truth for the declaration of the entire application environment, and Kubernetes as the common platform API to reconcile the state held within Git. As a result, developers and operators alike are afforded the ability to manage, deploy, and optimize their end-user experience and software lifecycle via a common language of understanding. This language then fully cements the concept of collaboration among disparate teams with differing skills and responsibilities.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; color: #2f5496; font-size: 13pt;\"><strong>GitOps Definition<\/strong><\/h2>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">GitOps is not regarded as groundbreaking or even new. The principles for efficient software delivery have been around for ages, however refined over time. GitOps is simply the latest named iteration based on the tools and concepts available. As such, the OpenGitOps (opengitops.dev) project has been established to formerly define the <strong>GitOps methodology <\/strong>within <strong>four key principles<\/strong>:<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<div class=\"ol\" style=\"margin: 0;\">\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 54pt;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; font-weight: bold;\">1.<\/span><strong>Declarative<\/strong><\/div>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 54pt;\">A system managed by GitOps must have its desired state expressed declaratively.<\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0; padding-bottom: 0; line-height: 1; margin-left: 54pt;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 54pt;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; font-weight: bold;\">2.<\/span><strong>Versioned and Immutable<\/strong><\/div>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 54pt;\">The desired state is stored in a way that enforces immutability and versioning, retaining a complete version history.<\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0; padding-bottom: 0; line-height: 1; margin-left: 54pt;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 54pt;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; font-weight: bold;\">3.<\/span><strong>Pulled Automatically<\/strong><\/div>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 54pt;\">Software agents automatically pull the desired state declarations from the source.<\/p>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 54pt;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<\/div>\n<div class=\"li\" style=\"margin: 0;\">\n<div style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 54pt;\"><span style=\"display: inline-block; position: relative; text-indent: -18pt; font-weight: bold;\">4.<\/span><strong>Continuously Reconciled<\/strong><\/div>\n<p style=\"text-align: left; margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 54pt;\">Software agents continuously observe actual system state and attempt to apply the desired state.<\/p>\n<\/div>\n<\/div>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 18pt;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 18pt;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; color: #2f5496; font-size: 13pt;\"><strong>How Did We Get Here? <\/strong><\/h2>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">I always like to relate technological iteration to broader and more relatable life scenarios, using analogies. In this instance, how we got to GitOps falls in line with the general idea of how we became a self-governed society.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">Where does it start? We started with disparate communities of people all working within their specific groups, learning niche skills, speaking exclusive languages, developing unique cultures, all while working under a similar goal of general survival. The end goal was the same; only the means to get there were slightly different.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 36pt;\">Over time, it became apparent that working together to pool knowledge of differentiated skills to accomplish similar goals was the most efficient way to guarantee a predictable outcome. Tribes became villages, villages became towns, and so forth. As each previously isolated group came together to share their methods, a shared culture grew through common tools, ethics, and languages. Through these commonalities, the establishment of large-reaching societies organically grew to form an environment where everyone contributed to a mutual outcome through understood practices such as moral guidance and ethics.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; margin-left: 36pt;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">However, ethics and morality can differ among groups of people, even with shared interests and common goals. There came a point where definitions and centralized interpretations of culture became necessary to formally dictate the implementation of processes so everyone could continue to contribute to society under well understood policies. Laws and governance became a way for people to codify their shared interests and expectations.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">Bringing this analogy back to GitOps, we can relate these iterations of establishing a self-governed society to how individual software organizations mature over time. As with the running of disparate communities, engineers with specific skills within organizations can become siloed, only working on their discipline, focusing only on their tightly scoped set of goals, speaking their respective languages, and using their unique tools. This can cause them to lose sight of the bigger picture, creating an environment of tossing issues over the proverbial fence to other teams, without working together or discussing common conclusions.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">To increase efficiency, there needs to be collaboration and shared responsibility among teams to predictably meet their common goals of software delivery and reliability. DevOps as a practice is intended to create a shared culture among these isolated teams to widen their scope and encourage a \u2019look over the wall.\u2019 To be successful, developers, application owners, and operations teams within a DevOps culture need to establish common platforms, shared interests, and understood communication methods. A cultural shift to reorganize and facilitate open collaboration for shared responsibility across disciplines is the result.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">However, much like establishing a society with shared ethics and morals, there needs to be a prescriptive implementation of the DevOps culture to succeed in a long-term sustainable way that is self-governable via well understood centralized principles. GitOps provides a defined list of technical best practices to codify the culture of DevOps into a set of tangible requirements for what an efficient software-development lifecycle should be.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; color: #2f5496; font-size: 13pt;\"><strong>What is a Realistic<\/strong><a id=\"_Int_C1IVBTKc\"><\/a><strong> Implementation? <\/strong><\/h2>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">Within an organization based on DevOps principles, GitOps provides the technical guidance to correlate methodology to culture by referring to the four core GitOps principles.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<figure style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><img fetchpriority=\"high\" decoding=\"async\" width=\"624\" height=\"316\" class=\"wp-image-18709 size-full\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-70-624w316h.png\" alt=\"Logo, company name\n\nDescription automatically generated\" srcset=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-70-624w316h.png 624w, https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-70-624w316h-300x152.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><figcaption style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 10pt; padding-bottom: 0; line-height: 1; font-style: italic; color: #44546a; font-size: 9pt;\">Figure 1<\/figcaption><\/figure>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">Using Figure 1 as a general reference architecture, we can start to tie principles to tools and platforms. Principle one provides the requirement of a declarative system allowing our teams to write desired-state configurations without manually executing imperative lists. Kubernetes is an optimal choice of platform in this regard, as it offers a centralized, declarative API that can consume our desired state and build reconciliation loops around our intention to ensure that what we want is what we get.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">Kubernetes, being extensible, is also not limited to just native objects. For example, Kubernetes can be used to build cloud resources or have application context added through projects such as Crossplane or the Operator Framework, respectively. However, even if Kubernetes is the platform of choice, we still need ease of use to stand the platform up from scratch. Tanzu Mission Control provides a SaaS-based interface that allows you to use a GUI, or an API, for managing complete cluster lifecycles. Tanzu Mission Control can be used as a bootstrap point to establish our base-layer platform, while enabling Day Two capabilities,<a id=\"_Int_wYbtplTu\"><\/a> such as backups and monitoring.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><img decoding=\"async\" width=\"624\" height=\"183\" class=\"wp-image-18710 size-full\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-71-624w183h.png\" alt=\"Chart, line chart\n\nDescription automatically generated\" srcset=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-71-624w183h.png 624w, https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-71-624w183h-300x88.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">Now that we have established the declarative system, on which our applications and services will be deployed, we can turn to principle two, which is to ensure our desired state is stored in a way that is easily versioned and immutable. Again, a few options meet this need; however, Git is the de facto standard for storing code in this manner. But Git alone can become burdensome to manage, and since this will be the single interface into our environment, it would be beneficial to roll it into a platform, such as GitLab, to easily manage security, pipeline automation, task tracking, developer onboarding, and so forth. In this instance, Git is being used to store our desired state, and GitLab, as a platform, will become our single interface for all management requirements.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><img loading=\"lazy\" decoding=\"async\" width=\"424\" height=\"517\" class=\"wp-image-18711 size-full\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-73-424w517h.png\" alt=\"A picture containing company name\n\nDescription automatically generated\" srcset=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-73-424w517h.png 424w, https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-73-424w517h-246x300.png 246w\" sizes=\"(max-width: 424px) 100vw, 424px\" \/><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">Our desired state is version controlled and ready to be consumed by a declarative system. To adhere to the last two principles, this process of deployment must be pulled into the system and automatically and continuously reconciled to <em>ensure the actual state always matches the desired state<\/em>. In this case, Fluxv2 is our choice of tool. There are again several options; however, built into Tanzu Mission Control is the ability to automatically deploy and manage the Flux operator and agent controller to conveniently deploy Kubernetes clusters and enable them with the appropriate GitOps-based agents to continuously pull and reconcile the desired state from our centralized GitLab repositories.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><img loading=\"lazy\" decoding=\"async\" width=\"553\" height=\"275\" class=\"wp-image-18712 size-full\" src=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-72-553w275h.png\" alt=\"A picture containing polygon\n\nDescription automatically generated\" srcset=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-72-553w275h.png 553w, https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/Picture-72-553w275h-300x149.png 300w\" sizes=\"(max-width: 553px) 100vw, 553px\" \/><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">The benefit of this system is in its simplicity and flexibility. For example, developers can alter the entire environment by committing changes to their GitLab repository, kicking off automated integration pipelines that merge their changes into a branch monitored by Flux agents on destination Kubernetes clusters. Once the developer\u2019s code successfully completes whatever testing is necessary, new container images are created, Kubernetes declarative manifests are altered to reflect the new image tags, and Flux reconciles the differences and updates the running application within the intended cluster. This system of management is not limited to developers and their source code, however. As the operator model becomes more prevalent, vendors are creating specialized operators to inject application context and logic into Kubernetes controllers to make deployment and lifecyle management of complex applications an automated process. Tanzu SQL for Kubernetes is an example of this architecture. With Tanzu SQL, administrators can create customer-resource definitions, such as MySQL instances, in a declarative manner; store those manifests within their own GitLab repository monitored again by Flux; and have Kubernetes take and create entire databases. This is taking Infrastructure as Code and correlating it to GitOps principles <em>and<\/em> adding application development without creating two disparate systems, or methods, of management and deployment.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<h2 style=\"margin-top: 2pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1; color: #2f5496; font-size: 13pt;\"><strong>Bringing It All Together<\/strong><\/h2>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\">Developers, operators, and application owners can all standardize on a single platform for their source of truth in GitLab, a single platform for running their declared state in Tanzu Kubernetes, and a single interface for interacting with the environment in Git. Through these common tools and shared interests, collaboration can occur organically while processes and procedures are codified through GitOps principles. This is the end goal. <em>However,<\/em> as with all new things, there are caveats. It takes time to mature to this level of automation and elegant simplicity, and there are plenty of instances in which this may not be 100% possible. Sterling has expertise in this field and can provide services that ensure viability and potential migration \u2014 or deployment \u2014 of GitOps-based systems to start your maturation process. Reach out to Sterling via the <a href=\"https:\/\/sterling.com\/stargazer\/contact-information\/\">contact us<\/a> page for more information.<\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n<p style=\"margin-top: 0pt; padding-top: 0; margin-bottom: 0pt; padding-bottom: 0; line-height: 1;\"><span style=\"display: inline-block; height: 1em;\"><span style=\"display: none;\">.<\/span><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>. . What is GitOps and How Does It Guide Us to Efficiency? . . GitOps is the technical implementation of a DevOps culture for automated software delivery. As DevOps [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":18713,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,14,15],"tags":[],"class_list":["post-18707","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-cloud","category-data-center"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GitOps with VMware Tanzu for Automated Application and Service Delivery - Sterling<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GitOps with VMware Tanzu for Automated Application and Service Delivery - Sterling\" \/>\n<meta property=\"og:description\" content=\". . What is GitOps and How Does It Guide Us to Efficiency? . . GitOps is the technical implementation of a DevOps culture for automated software delivery. As DevOps [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sterling.com\/stargazer\/?p=18707\" \/>\n<meta property=\"og:site_name\" content=\"Sterling\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/facebook.com\/SterlingComp\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-31T16:00:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/gitopsbilly.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"627\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sterling\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@sterlingcomp\" \/>\n<meta name=\"twitter:site\" content=\"@sterlingcomp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sterling\" \/>\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\":\"Article\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707\"},\"author\":{\"name\":\"Sterling\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#\\\/schema\\\/person\\\/b812a18f3a1e77cd0925429d1546e49d\"},\"headline\":\"GitOps with VMware Tanzu for Automated Application and Service Delivery\",\"datePublished\":\"2022-08-31T16:00:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707\"},\"wordCount\":1599,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/gitopsbilly.jpg\",\"articleSection\":[\"Blog\",\"Cloud\",\"Data Center\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707\",\"url\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707\",\"name\":\"GitOps with VMware Tanzu for Automated Application and Service Delivery - Sterling\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/gitopsbilly.jpg\",\"datePublished\":\"2022-08-31T16:00:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707#primaryimage\",\"url\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/gitopsbilly.jpg\",\"contentUrl\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/gitopsbilly.jpg\",\"width\":1200,\"height\":627},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?p=18707#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GitOps with VMware Tanzu for Automated Application and Service Delivery\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#website\",\"url\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/\",\"name\":\"Sterling\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#organization\",\"name\":\"Sterling\",\"url\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/Sterling-Computers-Logo-TM.png\",\"contentUrl\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/Sterling-Computers-Logo-TM.png\",\"width\":399,\"height\":145,\"caption\":\"Sterling\"},\"image\":{\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"http:\\\/\\\/facebook.com\\\/SterlingComp\\\/\",\"https:\\\/\\\/x.com\\\/sterlingcomp\",\"https:\\\/\\\/www.instagram.com\\\/sterlingcomputers\\\/\",\"http:\\\/\\\/youtube.com\\\/@sterlingcomp\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/sterling-computers\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/#\\\/schema\\\/person\\\/b812a18f3a1e77cd0925429d1546e49d\",\"name\":\"Sterling\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g\",\"caption\":\"Sterling\"},\"url\":\"https:\\\/\\\/sterling.com\\\/stargazer\\\/?author=2\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GitOps with VMware Tanzu for Automated Application and Service Delivery - Sterling","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"GitOps with VMware Tanzu for Automated Application and Service Delivery - Sterling","og_description":". . What is GitOps and How Does It Guide Us to Efficiency? . . GitOps is the technical implementation of a DevOps culture for automated software delivery. As DevOps [&hellip;]","og_url":"https:\/\/sterling.com\/stargazer\/?p=18707","og_site_name":"Sterling","article_publisher":"http:\/\/facebook.com\/SterlingComp\/","article_published_time":"2022-08-31T16:00:37+00:00","og_image":[{"width":1200,"height":627,"url":"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/gitopsbilly.jpg","type":"image\/jpeg"}],"author":"Sterling","twitter_card":"summary_large_image","twitter_creator":"@sterlingcomp","twitter_site":"@sterlingcomp","twitter_misc":{"Written by":"Sterling","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sterling.com\/stargazer\/?p=18707#article","isPartOf":{"@id":"https:\/\/sterling.com\/stargazer\/?p=18707"},"author":{"name":"Sterling","@id":"https:\/\/sterling.com\/stargazer\/#\/schema\/person\/b812a18f3a1e77cd0925429d1546e49d"},"headline":"GitOps with VMware Tanzu for Automated Application and Service Delivery","datePublished":"2022-08-31T16:00:37+00:00","mainEntityOfPage":{"@id":"https:\/\/sterling.com\/stargazer\/?p=18707"},"wordCount":1599,"commentCount":0,"publisher":{"@id":"https:\/\/sterling.com\/stargazer\/#organization"},"image":{"@id":"https:\/\/sterling.com\/stargazer\/?p=18707#primaryimage"},"thumbnailUrl":"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/gitopsbilly.jpg","articleSection":["Blog","Cloud","Data Center"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/sterling.com\/stargazer\/?p=18707","url":"https:\/\/sterling.com\/stargazer\/?p=18707","name":"GitOps with VMware Tanzu for Automated Application and Service Delivery - Sterling","isPartOf":{"@id":"https:\/\/sterling.com\/stargazer\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sterling.com\/stargazer\/?p=18707#primaryimage"},"image":{"@id":"https:\/\/sterling.com\/stargazer\/?p=18707#primaryimage"},"thumbnailUrl":"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/gitopsbilly.jpg","datePublished":"2022-08-31T16:00:37+00:00","breadcrumb":{"@id":"https:\/\/sterling.com\/stargazer\/?p=18707#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sterling.com\/stargazer\/?p=18707"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sterling.com\/stargazer\/?p=18707#primaryimage","url":"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/gitopsbilly.jpg","contentUrl":"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2022\/08\/gitopsbilly.jpg","width":1200,"height":627},{"@type":"BreadcrumbList","@id":"https:\/\/sterling.com\/stargazer\/?p=18707#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sterling.com\/stargazer\/"},{"@type":"ListItem","position":2,"name":"GitOps with VMware Tanzu for Automated Application and Service Delivery"}]},{"@type":"WebSite","@id":"https:\/\/sterling.com\/stargazer\/#website","url":"https:\/\/sterling.com\/stargazer\/","name":"Sterling","description":"","publisher":{"@id":"https:\/\/sterling.com\/stargazer\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sterling.com\/stargazer\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/sterling.com\/stargazer\/#organization","name":"Sterling","url":"https:\/\/sterling.com\/stargazer\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sterling.com\/stargazer\/#\/schema\/logo\/image\/","url":"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2023\/03\/Sterling-Computers-Logo-TM.png","contentUrl":"https:\/\/sterling.com\/stargazer\/wp-content\/uploads\/2023\/03\/Sterling-Computers-Logo-TM.png","width":399,"height":145,"caption":"Sterling"},"image":{"@id":"https:\/\/sterling.com\/stargazer\/#\/schema\/logo\/image\/"},"sameAs":["http:\/\/facebook.com\/SterlingComp\/","https:\/\/x.com\/sterlingcomp","https:\/\/www.instagram.com\/sterlingcomputers\/","http:\/\/youtube.com\/@sterlingcomp","https:\/\/www.linkedin.com\/company\/sterling-computers"]},{"@type":"Person","@id":"https:\/\/sterling.com\/stargazer\/#\/schema\/person\/b812a18f3a1e77cd0925429d1546e49d","name":"Sterling","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/49107847cab9312fecfc9475e27da24373a491ca9faf45408ea019ad846f2c44?s=96&d=mm&r=g","caption":"Sterling"},"url":"https:\/\/sterling.com\/stargazer\/?author=2"}]}},"_links":{"self":[{"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/wp\/v2\/posts\/18707","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=18707"}],"version-history":[{"count":0,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/wp\/v2\/posts\/18707\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=\/wp\/v2\/media\/18713"}],"wp:attachment":[{"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=18707"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=18707"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sterling.com\/stargazer\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=18707"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}