From 965e5046fc0288f3b4676df256160018640666a8 Mon Sep 17 00:00:00 2001 From: Sara <100384099+SaraDPH@users.noreply.github.com> Date: Thu, 20 Mar 2025 14:55:07 +0000 Subject: [PATCH 1/7] K8s fleet management - customer use case --- .../index.md | 85 ++++++++++++++++++ .../meta.png | Bin 0 -> 24665 bytes 2 files changed, 85 insertions(+) create mode 100644 content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md create mode 100644 content/blog/kubernetes-fleet-management-with-gitops-argo-cd/meta.png diff --git a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md new file mode 100644 index 000000000000..12d4b8df8eff --- /dev/null +++ b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md @@ -0,0 +1,85 @@ +--- +title: "Kubernetes Fleet Management With Gitops Argo Cd" + +# The date represents the post's publish date, and by default corresponds with +# the date and time this file was generated. Dates are used for display and +# ordering purposes only; they have no effect on whether or when a post is +# published. To influence the ordering of posts published on the same date, use +# the time portion of the date value; posts are sorted in descending order by +# date/time. +date: 2025-03-20T14:54:32Z + +# The draft setting determines whether a post is published. Set it to true if +# you want to be able to merge the post without publishing it. +draft: false + +# Use the meta_desc property to provide a brief summary (one or two sentences) +# of the content of the post, which is useful for targeting search results or +# social-media previews. This field is required or the build will fail the +# linter test. Max length is 160 characters. +meta_desc: + +# The meta_image appears in social-media previews and on the blog home page. A +# placeholder image representing the recommended format, dimensions and aspect +# ratio has been provided for you. +meta_image: meta.png + +# At least one author is required. The values in this list correspond with the +# `id` properties of the team member files at /data/team/team. Create a file for +# yourself if you don't already have one. +authors: + - joe-duffy + +# At least one tag is required. Lowercase, hyphen-delimited is recommended. +tags: + - change-me + + +# The social copy used to promote this post on Twitter and Linkedin. These +# properties do not actually create the post and have no effect on the +# generated blog page. They are here strictly for reference. + +# Here are some examples of posts we have made in the past for inspiration: +# https://www.linkedin.com/feed/update/urn:li:activity:7171191945841561601 +# https://www.linkedin.com/feed/update/urn:li:activity:7169021002394296320 +# https://www.linkedin.com/feed/update/urn:li:activity:7155606616455737345 +# https://twitter.com/PulumiCorp/status/1763265391042654623 +# https://twitter.com/PulumiCorp/status/1762900472489185492 +# https://twitter.com/PulumiCorp/status/1755637618631405655 + +social: + twitter: + linkedin: + +# See the blogging docs at https://github.com/pulumi/docs/blob/master/BLOGGING.md +# for details, and please remove these comments before submitting for review. +--- + +What you put here will appear on the index page. In most cases, you'll also want to add a Read More link after this paragraph (though technically, that's optional. To do that, just add an HTML comment like the one below. + + + +And then everything _after_ that comment will appear on the post page itself. + +Either way, avoid using images or code samples [in the first 70 words](https://gohugo.io/content-management/summaries/#automatic-summary-splitting) of your post, as these may not render properly in summary contexts (e.g., on the blog home page or in social-media previews). + +## Writing the Post + +For help assembling the content of your post, see [BLOGGING.md](https://github.com/pulumi/docs/blob/master/BLOGGING.md). For general formatting guidelines, see the [Style Guide](https://github.com/pulumi/docs/blob/master/STYLE-GUIDE.md). + +## Code Samples + +```typescript +let bucket = new aws.s3.Bucket("stuff"); +... +``` + +## Images + +![Placeholder Image](meta.png) + +## Videos + +{{< youtube "kDB-YRKFfYE?rel=0" >}} + +Note the `?rel=0` param, which tells YouTube to suggest only videos from same channel. diff --git a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/meta.png b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/meta.png new file mode 100644 index 0000000000000000000000000000000000000000..44a346913c3498ce31b90f943b1e2830cd0ca816 GIT binary patch literal 24665 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 Date: Fri, 21 Mar 2025 13:36:43 -0500 Subject: [PATCH 2/7] Draft 1 --- .../index.md | 145 +++++++++++++++--- 1 file changed, 127 insertions(+), 18 deletions(-) diff --git a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md index 12d4b8df8eff..cb2f8d0aad8f 100644 --- a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md +++ b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md @@ -1,5 +1,5 @@ --- -title: "Kubernetes Fleet Management With Gitops Argo Cd" +title: "Kubernetes Fleet Management Made Easy with Pulumi and GitOps" # The date represents the post's publish date, and by default corresponds with # the date and time this file was generated. Dates are used for display and @@ -7,7 +7,7 @@ title: "Kubernetes Fleet Management With Gitops Argo Cd" # published. To influence the ordering of posts published on the same date, use # the time portion of the date value; posts are sorted in descending order by # date/time. -date: 2025-03-20T14:54:32Z +date: 2025-03-25T07:54:32Z # The draft setting determines whether a post is published. Set it to true if # you want to be able to merge the post without publishing it. @@ -17,7 +17,7 @@ draft: false # of the content of the post, which is useful for targeting search results or # social-media previews. This field is required or the build will fail the # linter test. Max length is 160 characters. -meta_desc: +meta_desc: Learn how Imagine Learning optimized Kubernetes fleet management with Pulumi and GitOps, automating deployments to boost speed, reliability, and productivity. # The meta_image appears in social-media previews and on the blog home page. A # placeholder image representing the recommended format, dimensions and aspect @@ -28,11 +28,14 @@ meta_image: meta.png # `id` properties of the team member files at /data/team/team. Create a file for # yourself if you don't already have one. authors: - - joe-duffy + - sara-huddleston # At least one tag is required. Lowercase, hyphen-delimited is recommended. tags: - - change-me + - kubernetes + - gitops + - argo-cd + - kubernetes-fleet-management # The social copy used to promote this post on Twitter and Linkedin. These @@ -55,31 +58,137 @@ social: # for details, and please remove these comments before submitting for review. --- -What you put here will appear on the index page. In most cases, you'll also want to add a Read More link after this paragraph (though technically, that's optional. To do that, just add an HTML comment like the one below. +As enterprises continue adopting Kubernetes for managing containerized workloads, the complexity of Kubernetes fleet management increases. Imagine Learning, a leading K-12 education company, faced these challenges firsthand. Their internal developer platform struggled to scale with their enterprise needs, leading them to reevaluate their approach to managing multiple Kubernetes clusters efficiently. + +Learn how Imagine Learning transformed its Kubernetes fleet management using Pulumi and a GitOps bridge pattern with Argo CD. The outcome? Faster deployments, increased reliability, and reduced cognitive load for their teams. -And then everything _after_ that comment will appear on the post page itself. +## Challenges in Kubernetes Fleet Management + +Imagine Learning encountered several roadblocks in managing their Kubernetes environments: + +- **Limited visibility** into the current state of clusters, making it difficult to track and maintain consistency. +- **Fragmented deployment workflows** with multiple pipelines depending on the resource type. +- **High learning curve**, requiring developers to master an additional language for infrastructure provisioning. + +These challenges are common among enterprises scaling Kubernetes, highlighting the need for a GitOps-enabled, automated, and developer-friendly solution. + +## Implementing the GitOps Bridge Pattern with Pulumi + +To streamline Kubernetes fleet management, Imagine Learning adopted the GitOps bridge pattern, integrating Pulumi for infrastructure as code (IaC) and Argo CD for Kubernetes environment synchronization. This approach ensured infrastructure and application configurations remained consistent and automated. + +### How the GitOps Bridge Pattern Works + +The core of Imagine Learning's solution lies in the GitOps bridge pattern, which connects their infrastructure code (managed by Pulumi) with their Kubernetes environments (managed by Argo CD). Here's how it works: + +- **Infrastructure as Code with Pulumi**: Imagine Learning uses Pulumi to define their infrastructure resources, such as AWS VPCs, EKS clusters, and other platform-specific resources, in their preferred programming language (in this case, TypeScript). +- **Bridging to Kubernetes**: Once the infrastructure resources are created, Imagine Learning takes the relevant outputs from their Pulumi code (e.g., IAM role ARNs) and pushes them into a Kubernetes Secret managed by Argo CD. This secret serves as the bridge between their infrastructure code and their Kubernetes environments. +- **GitOps with Argo CD**: Argo CD, a popular GitOps tool, picks up the changes in the Kubernetes Secret and automatically reconciles the desired state in the Kubernetes clusters, ensuring that the infrastructure and application configurations are in sync. +- **Automated Deployments with GitHub Actions**: Every Git merge triggers a Pulumi deployment that updates the Kubernetes Secret. Argo CD then detects the changes and applies them to the Kubernetes clusters. -Either way, avoid using images or code samples [in the first 70 words](https://gohugo.io/content-management/summaries/#automatic-summary-splitting) of your post, as these may not render properly in summary contexts (e.g., on the blog home page or in social-media previews). +This GitOps bridge pattern allows Imagine Learning to maintain a single source of truth for its infrastructure and application configurations. This ensures consistency and reliability across its Kubernetes environments, eliminates manual interventions, and reduces deployment risks. -## Writing the Post +## Why Imagine Learning Chose Pulumi -For help assembling the content of your post, see [BLOGGING.md](https://github.com/pulumi/docs/blob/master/BLOGGING.md). For general formatting guidelines, see the [Style Guide](https://github.com/pulumi/docs/blob/master/STYLE-GUIDE.md). +Imagine Learning selected Pulumi for its developer-first approach to Kubernetes fleet management, offering: -## Code Samples +- **Familiar Programming Languages**—Pulumi allows developers to write infrastructure code in the same programming languages they use for their application code, such as TypeScript, Python, or Go. This reduces the need to learn domain-specific languages, reducing the cognitive load and context-switching required, enabling the team to be more productive. +- **Code Reusability** – Teams can manage multiple stacks (environments) with different configurations using the same codebase, promoting code reuse and maintainability. +- **Powerful Abstractions** – Pulumi provides powerful abstractions, such as the Crosswalk for AWS library, which encapsulates best practices for deploying resources like VPCs and EKS clusters. This allows the Imagine Learning team to focus on the high-level infrastructure design rather than the low-level details. +- **Seamless GitOps Integration** – ulumi's integration with Git and GitHub enables Imagine Learning to leverage the GitOps bridge pattern, where their infrastructure code is the source of truth and automatically deployed through GitHub Actions. +- **Visibility and Auditability** – The Pulumi UI provides a clear history of infrastructure changes, allowing the team to easily understand and review the history of their deployments. -```typescript -let bucket = new aws.s3.Bucket("stuff"); +## Technical Implementation of the GitOps Bridge Pattern + +Let's dive into the technical implementation of Imagine Learning's GitOps bridge pattern using Pulumi. + +{{< youtube "1Q3XPmenthg?rel=0" >}} + +See the implementation examples below and [explore the demo code](https://github.com/blakeromano/gitops-bridge-demo) provided by Blake Romano, Imagine Learning. + +### Defining Infrastructure with Pulumi + +Imagine Learning uses Pulumi to define its infrastructure resources, such as VPCs and EKS clusters. Here's an example of how they create a VPC using the Crosswalk for AWS library: + +``` +import * as aws from "@pulumi/aws"; +import * as awsx from "@pulumi/awsx"; + +const vpc = new awsx.network.VPC("main-vpc", { + cidrBlock: "10.0.0.0/16", + numberOfAvailabilityZones: 3, + natGatewayStrategy: "single_nat_gateway", +}); ... ``` -## Images +### Updating Kubernetes Configurations Dynamically + +Imagine Learning also uses Pulumi to dynamically update Kubernetes resources based on the infrastructure they've created. For example, they update the AWS EKS ConfigMap with the IAM role ARN created in their Pulumi code: + +``` +const eksConfigMap = new k8s.core.v1.ConfigMap("eks-config-map", { + metadata: { name: "aws-auth", namespace: "kube-system" }, + data: { mapRoles: JSON.stringify([{ rolearn: eksCluster.roleArn, username: "system:node:{{EC2PrivateDNSName}}", groups: ["system:bootstrappers", "system:nodes"] }]) } +}); +... +``` + +### Bridging to Kubernetes with Argo CD + +To bridge the gap between their infrastructure code and Kubernetes, Imagine Learning uses Argo CD to manage a Kubernetes secret that contains the relevant metadata from their Pulumi deployments. Here's an example of how they create this secret: + +``` +const clusterSecret = new k8s.core.v1.Secret("cluster-secret", { +metadata: { +name: "cluster-secret", +annotations: { +"pulumi.com/secret": "true", +"pulumi.com/secret-encryption-context": JSON.stringify({ +"pulumi:project": pulumi.getProject(), +"pulumi:stack": pulumi.getStack(), +}), +}, +}, +type: "Opaque", +stringData: { +"eks-cluster-name": eksCluster.name, +"eks-cluster-arn": eksCluster.arn, +"eks-cluster-endpoint": eksCluster.endpoint, +"eks-cluster-certificate-authority": eksCluster.certificateAuthority.data, +}, +}, { provider: k8s.provider }); +... +``` + +In this example, Imagine Learning is creating a Kubernetes secret that contains the relevant metadata from their EKS cluster deployment, such as the cluster name, ARN, endpoint, and certificate authority. They use Pulumi's GitHub provider to manage this secret in a Git repository, ensuring that the desired state of their infrastructure is tracked in version control. + +### Automating Deployments with GitHub Actions + +To streamline their deployment process, Imagine Learning leverages GitHub Actions to automate the deployment of their infrastructure changes. When a pull request is merged into the main branch, the GitHub Actions workflow triggers a Pulumi deployment, which in turn updates the Kubernetes secret in the Git repository. Argo CD then detects the changes and applies them to the Kubernetes clusters. + +This automated deployment process allows Imagine Learning to quickly and reliably deploy changes to all of their Kubernetes environments, reducing the manual effort and the risk of inconsistencies between their infrastructure and application configurations. + +## Results: Faster Deployments, Increased Reliability, and Reduced Cognitive Load + +Imagine Learning's adoption of the GitOps bridge pattern with Pulumi and Argo CD has transformed their Kubernetes fleet management capabilities: + +- Faster Deployments – Kubernetes fleet updates within 5-10 minutes. +- Increased Reliability – Automated validation and change previews improve deployment confidence. +- Reduced Cognitive Load – Developers work in familiar programming languages. +- Seamless GitOps Integration – Infrastructure code remains the single source of truth. +- Automatic Change Propagation – Updates flow effortlessly from Pulumi to Kubernetes clusters. +- Faster Environment Provisioning – New environments spin up in minutes instead of weeks. + +Conclusion -![Placeholder Image](meta.png) +Imagine Learning’s Kubernetes fleet management transformation showcases the power of combining Pulumi with GitOps for scalable, automated deployments. By bridging infrastructure provisioning with Kubernetes orchestration, Imagine Learning achieved remarkable results in deployment speed, reliability, and developer productivity. -## Videos +Adopting Pulumi and GitOps can unlock scalability, automation, and operational efficiency for organizations facing similar Kubernetes fleet management challenges. If you're interested in learning more about Pulumi and the GitOps bridge pattern, be sure to check -{{< youtube "kDB-YRKFfYE?rel=0" >}} +- Get started with [Pulumi Tutorials](https://www.pulumi.com/tutorials/) +- Attend an [upcoming workshop](https://www.pulumi.com/events/#upcoming) +- But most importantly, [try Pulumi](https://app.pulumi.com/signup) today! -Note the `?rel=0` param, which tells YouTube to suggest only videos from same channel. +Explore Pulumi's Kubernetes solutions here, or check out the full GitOps bridge implementation on GitHub From a884c4865b7001889498f03d070c50d67776114e Mon Sep 17 00:00:00 2001 From: Sara <100384099+SaraDPH@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:38:47 -0500 Subject: [PATCH 3/7] Update content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md --- .../index.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md index cb2f8d0aad8f..e111b40cde0e 100644 --- a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md +++ b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md @@ -64,6 +64,14 @@ Learn how Imagine Learning transformed its Kubernetes fleet management using Pul +> [!INFO] +> Let's talk about Kubernetes and all you can do! Meet us at: +> +> - **KubeCon Europe Booth S450** - [Request a 1:1 Demo](https://www.pulumi.com/kubecon-europe/) +> - **Google Next'25 booth 1589** - [Join us for a Happy House and/or Request your 1:1 Demo](https://www.pulumi.com/google-next/) +> +> Don’t miss the chance to see Pulumi in action, ask questions, and explore why Kubernetes + Google Cloud + Pulumi go better together. 🚀 + ## Challenges in Kubernetes Fleet Management Imagine Learning encountered several roadblocks in managing their Kubernetes environments: From 268131f08d7d50975c9dba69507322fa5be3605f Mon Sep 17 00:00:00 2001 From: Sara <100384099+SaraDPH@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:40:44 -0500 Subject: [PATCH 4/7] Update content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md --- .../kubernetes-fleet-management-with-gitops-argo-cd/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md index e111b40cde0e..91f4e96b82fd 100644 --- a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md +++ b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md @@ -70,7 +70,7 @@ Learn how Imagine Learning transformed its Kubernetes fleet management using Pul > - **KubeCon Europe Booth S450** - [Request a 1:1 Demo](https://www.pulumi.com/kubecon-europe/) > - **Google Next'25 booth 1589** - [Join us for a Happy House and/or Request your 1:1 Demo](https://www.pulumi.com/google-next/) > -> Don’t miss the chance to see Pulumi in action, ask questions, and explore why Kubernetes + Google Cloud + Pulumi go better together. 🚀 +> Don’t miss the chance to see Pulumi in action, ask questions, and explore why Kubernetes + Pulumi go better together. 🚀 ## Challenges in Kubernetes Fleet Management From 51f1d66b9793f381ea696cf9d69cb10d1537a920 Mon Sep 17 00:00:00 2001 From: Sara <100384099+SaraDPH@users.noreply.github.com> Date: Tue, 25 Mar 2025 10:26:41 -0500 Subject: [PATCH 5/7] Apply suggestions from code review --- .../index.md | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md index 91f4e96b82fd..f665a23f92f2 100644 --- a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md +++ b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md @@ -7,7 +7,7 @@ title: "Kubernetes Fleet Management Made Easy with Pulumi and GitOps" # published. To influence the ordering of posts published on the same date, use # the time portion of the date value; posts are sorted in descending order by # date/time. -date: 2025-03-25T07:54:32Z +date: 2025-03-26T07:54:32Z # The draft setting determines whether a post is published. Set it to true if # you want to be able to merge the post without publishing it. @@ -58,33 +58,33 @@ social: # for details, and please remove these comments before submitting for review. --- -As enterprises continue adopting Kubernetes for managing containerized workloads, the complexity of Kubernetes fleet management increases. Imagine Learning, a leading K-12 education company, faced these challenges firsthand. Their internal developer platform struggled to scale with their enterprise needs, leading them to reevaluate their approach to managing multiple Kubernetes clusters efficiently. +Kubernetes adoption for managing containerized workloads continues to grow, and so does the complexity of Kubernetes fleet management. Imagine Learning, a digital-first K-12 education company, experience the same growing pains. Their struggled to scale their internal developer platform to meet their growing enterprise needs, leading them to reevaluate their approach to managing multiple Kubernetes clusters efficiently. Learn how Imagine Learning transformed its Kubernetes fleet management using Pulumi and a GitOps bridge pattern with Argo CD. The outcome? Faster deployments, increased reliability, and reduced cognitive load for their teams. > [!INFO] -> Let's talk about Kubernetes and all you can do! Meet us at: +> Let's talk about Kubernetes and platform engineering with Pulumi. Meet us at: > > - **KubeCon Europe Booth S450** - [Request a 1:1 Demo](https://www.pulumi.com/kubecon-europe/) > - **Google Next'25 booth 1589** - [Join us for a Happy House and/or Request your 1:1 Demo](https://www.pulumi.com/google-next/) > -> Don’t miss the chance to see Pulumi in action, ask questions, and explore why Kubernetes + Pulumi go better together. 🚀 +> Don’t miss the chance to see Pulumi in action, ask questions, and explore why Kubernetes + Pulumi go better together. -## Challenges in Kubernetes Fleet Management +## Challenges in Scaling the Internal Developer Platform and Kubernetes -Imagine Learning encountered several roadblocks in managing their Kubernetes environments: +Imagine Learning had an existing internal developer platform (IDP) that was not built to scale and meet its current enterprise needs. Before making any changes, they decided to evaluate their core challenges: - **Limited visibility** into the current state of clusters, making it difficult to track and maintain consistency. - **Fragmented deployment workflows** with multiple pipelines depending on the resource type. - **High learning curve**, requiring developers to master an additional language for infrastructure provisioning. -These challenges are common among enterprises scaling Kubernetes, highlighting the need for a GitOps-enabled, automated, and developer-friendly solution. +These challenges are common among enterprises. Many have the same issues as they attempt to scale their Kubernetes environments, highlighting the need for a more robust, scalable, automated, and developer-friendly solution. ## Implementing the GitOps Bridge Pattern with Pulumi -To streamline Kubernetes fleet management, Imagine Learning adopted the GitOps bridge pattern, integrating Pulumi for infrastructure as code (IaC) and Argo CD for Kubernetes environment synchronization. This approach ensured infrastructure and application configurations remained consistent and automated. +To address these challenges and streamline Kubernetes fleet management, Imagine Learning adopted the GitOps bridge pattern, integrating Pulumi for infrastructure as code (IaC) and Argo CD for Kubernetes environment synchronization. This approach ensured infrastructure and application configurations remained consistent and automated. ### How the GitOps Bridge Pattern Works @@ -103,9 +103,10 @@ Imagine Learning selected Pulumi for its developer-first approach to Kubernetes - **Familiar Programming Languages**—Pulumi allows developers to write infrastructure code in the same programming languages they use for their application code, such as TypeScript, Python, or Go. This reduces the need to learn domain-specific languages, reducing the cognitive load and context-switching required, enabling the team to be more productive. - **Code Reusability** – Teams can manage multiple stacks (environments) with different configurations using the same codebase, promoting code reuse and maintainability. +- **Deploy to Multiple Regions or Clouds**—Imagine Learning uses this ability to deploy to multiple regions, such as US East 1, US East 2, and US West 2, within a single stack and to providers like GitHub to manage files within GitHub, allowing power automation. - **Powerful Abstractions** – Pulumi provides powerful abstractions, such as the Crosswalk for AWS library, which encapsulates best practices for deploying resources like VPCs and EKS clusters. This allows the Imagine Learning team to focus on the high-level infrastructure design rather than the low-level details. -- **Seamless GitOps Integration** – ulumi's integration with Git and GitHub enables Imagine Learning to leverage the GitOps bridge pattern, where their infrastructure code is the source of truth and automatically deployed through GitHub Actions. -- **Visibility and Auditability** – The Pulumi UI provides a clear history of infrastructure changes, allowing the team to easily understand and review the history of their deployments. +- **Seamless GitOps Integration** – Pulumi's integration with Git and GitHub enables Imagine Learning to leverage the GitOps bridge pattern, where their infrastructure code is the source of truth and automatically deployed through GitHub Actions. +- **Visibility and Auditability** – The Pulumi UI provides a clear history of infrastructure changes, allowing the team to quickly understand and review the history of their deployments in each one of their environments. It also allows them to see what is in the state since Pulumi manages the state and contains all its information. ## Technical Implementation of the GitOps Bridge Pattern @@ -182,16 +183,17 @@ This automated deployment process allows Imagine Learning to quickly and reliabl Imagine Learning's adoption of the GitOps bridge pattern with Pulumi and Argo CD has transformed their Kubernetes fleet management capabilities: -- Faster Deployments – Kubernetes fleet updates within 5-10 minutes. -- Increased Reliability – Automated validation and change previews improve deployment confidence. -- Reduced Cognitive Load – Developers work in familiar programming languages. -- Seamless GitOps Integration – Infrastructure code remains the single source of truth. -- Automatic Change Propagation – Updates flow effortlessly from Pulumi to Kubernetes clusters. -- Faster Environment Provisioning – New environments spin up in minutes instead of weeks. +- **Faster Deployments** – Imagine Learning can deploy changes to all their Kubernetes environments within 5-10 minutes. +- **Increased Reliability** – Improved deployment trust since the team can easily preview changes and validate the desired state before merging to the main branch. +- **Reduced Cognitive Load** – Using Pulumi, Imagine Learning's developers can write infrastructure code in the same programming languages they use for their application code, eliminating the need to learn a new language and reducing context-switching. +- **GitOps Continuity** – The GitOps bridge pattern has allowed Imagine Learning to maintain a consistent GitOps approach across its infrastructure code and Kubernetes configurations, ensuring a unified source of truth. +- **Automatic Change Propagation** – Updates to the infrastructure code in Pulumi automatically propagate to the Kubernetes environments through the Argo CD-managed Kubernetes secret, reducing the manual effort required to keep environments in sync. +- **Built-in Auditing** – The team can quickly check and understand the changes to the environments. +- **Faster Environment Provisioning** – Building new environments used to take weeks or months now, they can be spun up in hours or minutes. -Conclusion +## Conclusion -Imagine Learning’s Kubernetes fleet management transformation showcases the power of combining Pulumi with GitOps for scalable, automated deployments. By bridging infrastructure provisioning with Kubernetes orchestration, Imagine Learning achieved remarkable results in deployment speed, reliability, and developer productivity. +Imagine Learning's journey with Pulumi and the GitOps bridge pattern is an example of how organizations can overcome the scalability growing pains of internal developer platform and the challenges of Kubernetes fleet management. By bridging infrastructure provisioning with Kubernetes orchestration, Imagine Learning improved deployment speed, reliability, and developer productivity. Adopting Pulumi and GitOps can unlock scalability, automation, and operational efficiency for organizations facing similar Kubernetes fleet management challenges. If you're interested in learning more about Pulumi and the GitOps bridge pattern, be sure to check @@ -199,4 +201,4 @@ Adopting Pulumi and GitOps can unlock scalability, automation, and operational e - Attend an [upcoming workshop](https://www.pulumi.com/events/#upcoming) - But most importantly, [try Pulumi](https://app.pulumi.com/signup) today! -Explore Pulumi's Kubernetes solutions here, or check out the full GitOps bridge implementation on GitHub +Explore how you can leverage the power of Pulumi and GitOps bridge pattern to scale, simplify, and streamline your Kubernetes fleet management. From b7a08e3516da5ef84544cd65c32158161771d6d8 Mon Sep 17 00:00:00 2001 From: Sara <100384099+SaraDPH@users.noreply.github.com> Date: Tue, 25 Mar 2025 10:37:15 -0500 Subject: [PATCH 6/7] Update index.md one space one error to be fixed --- .../kubernetes-fleet-management-with-gitops-argo-cd/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md index f665a23f92f2..4b09c90e1342 100644 --- a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md +++ b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md @@ -70,7 +70,7 @@ Learn how Imagine Learning transformed its Kubernetes fleet management using Pul > - **KubeCon Europe Booth S450** - [Request a 1:1 Demo](https://www.pulumi.com/kubecon-europe/) > - **Google Next'25 booth 1589** - [Join us for a Happy House and/or Request your 1:1 Demo](https://www.pulumi.com/google-next/) > -> Don’t miss the chance to see Pulumi in action, ask questions, and explore why Kubernetes + Pulumi go better together. +> Don’t miss the chance to see Pulumi in action, ask questions, and explore why Kubernetes + Pulumi go better together. ## Challenges in Scaling the Internal Developer Platform and Kubernetes From 35ed7b129e7cfe95de3672974f72d4b621be7c5b Mon Sep 17 00:00:00 2001 From: Sara <100384099+SaraDPH@users.noreply.github.com> Date: Tue, 25 Mar 2025 13:28:11 -0500 Subject: [PATCH 7/7] correcting code formatting --- .../index.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md index 4b09c90e1342..d8b78247d65c 100644 --- a/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md +++ b/content/blog/kubernetes-fleet-management-with-gitops-argo-cd/index.md @@ -150,23 +150,23 @@ To bridge the gap between their infrastructure code and Kubernetes, Imagine Lear ``` const clusterSecret = new k8s.core.v1.Secret("cluster-secret", { -metadata: { -name: "cluster-secret", -annotations: { -"pulumi.com/secret": "true", -"pulumi.com/secret-encryption-context": JSON.stringify({ -"pulumi:project": pulumi.getProject(), -"pulumi:stack": pulumi.getStack(), -}), -}, -}, -type: "Opaque", -stringData: { -"eks-cluster-name": eksCluster.name, -"eks-cluster-arn": eksCluster.arn, -"eks-cluster-endpoint": eksCluster.endpoint, -"eks-cluster-certificate-authority": eksCluster.certificateAuthority.data, -}, + metadata: { + name: "cluster-secret", + annotations: { + "pulumi.com/secret": "true", + "pulumi.com/secret-encryption-context": JSON.stringify({ + "pulumi:project": pulumi.getProject(), + "pulumi:stack": pulumi.getStack(), + }), + }, + }, + type: "Opaque", + stringData: { + "eks-cluster-name": eksCluster.name, + "eks-cluster-arn": eksCluster.arn, + "eks-cluster-endpoint": eksCluster.endpoint, + "eks-cluster-certificate-authority": eksCluster.certificateAuthority.data, + }, }, { provider: k8s.provider }); ... ```