Platform Engineering at Microsoft

For a while, I have been hearing chatter around “What is Microsoft doing in the Platform Engineering space?” and “What is Microsoft’s stance on Platform Engineering?”. Well, today is the first day of Microsoft Ignite 2024 and I am happy to say Microsoft has officially released a Platform engineering guide. It can be found here: https://aka.ms/plat-eng-learn

It is broken down into the following sections: Overview, Concept, How-To Guide, and Architecture!

Working through this guide will help you discover how platform engineering teams can leverage technologies from Microsoft and other vendors/providers to craft highly personalized, optimized, and secure developer experiences.

This guide essentially gives you the scoop on Microsoft’s perspective when it comes to Platform Engineering. It can be used to help you along your Platform Engineering journey!

Shout out to the core team that built this! DevDiv: Mark Weitzel, Chuck Lantz, Russell Conard and AKS Engineering: Daniel Sol.

I was honored and happy to be one of the reviewers of this guide! Also, it was a nice surprise to find a reference to one of my past Azure Architecture center articles “CI/CD for AKS apps with GitHub Actions and GitFlow (GitOps)” in the Platform Engineering guide here: https://learn.microsoft.com/en-us/platform-engineering/engineering-systems#enable-automatic-application-infrastructure-provisioning-during-continuous-delivery.

Released today also is a blog post from Amanda Silver Corporate Vice President of Microsoft’s Developer Division on Building Paved Paths in Platform Engineering. In this blog post, she talks about the new PE guide, what PE is, Microsoft’s learnings in PE, developer happiness, and Microsoft’s overall perspective on Platform Engineering. Check it out here: https://devblogs.microsoft.com/engineering-at-microsoft/building-paved-paths-the-journey-to-platform-engineering/

Another nice surprise today upon checking out Amanda’s Twitter profile is I discovered she is following me!

In addition to this new guide, there are a number of sessions at Ignite around Platform Engineering.

I will list them here with their links so you can watch them:

-Keynote by Amanda Silver: Productive and secure end-to-end developer experiences powered by AI

-Session by Mark Weitzel Principal Architect, DevDiv, and Dan Sol AKS Program Manager Breakout: Master Platform Engineering: Architecting Scalable & Resilient Systems

Discussion: Platform engineering Q&A with the Microsoft platform engineering team

Another cool thing launched today is Microsoft’s Platform Engineering Interest Group.

At Microsoft, we want to hear about your challenges with Platform Engineering and provide opportunities to connect with other teams, at Microsoft and at other companies, who are working together to build solutions in the Platform Engineering space. Joining this group will let you get exclusive early access to new tools and services from Microsoft. Sign up here:

https://aka.ms/plat-eng-signup

The last thing I want to mention in this post is a new open-source product from Microsoft named Radius. Radius is a single tool to describe, deploy, and manage your entire application. Radius is dedicated to addressing the platform engineering challenges associated with facilitating application deployments across on-premises infrastructure and major cloud providers such as Microsoft Azure and Amazon Web Services.

Radius is not an IDP. It’s an optional part of an IDP focused on the applications that provides infrastructure Recipes, simplifying the platform configurations like permissions, connection strings, and more to manage the application and its resources.

Radius empowers developers to comprehend their applications, recognizing that an application extends beyond Kubernetes alone. Radius assists developers in visualizing all the components that form their application. More about Radius here: radapp.io

Read more

Platform Engineering Discussion with Andrew Shafer

I’m very excited to announce something that has been in the works for a little while now. I was fortunate to interview the legendary Andrew Shafer (@littleidea). We had a discussion about Platform Engineering. If you don’t know Andrew here is his BIO:

Andrew Clay Shafer helped create the tools and practices that made DevOps a word. He is fascinated with the dynamics of high-performing individuals and organizations and has a reputation for improving outcomes at the intersection of Open Source, Cloud Computing and Software Delivery working on Puppet, OpenStack, Cloud Foundry and Kubernetes before founding Ergonautic to focus on improving the way people work.

Basically, he started this whole DevOps thing, was key in the DevOps Days events, has founded some high-profile companies, and more. He is the perfect person to chat with about Platform Engineering because if anyone knows it he does!

I chatted with Andrew in an episode of Pluralsight’s Expert Access. Expert Access is a YouTube series where we (Pluralsight authors) bring in some of the best minds in tech to hear how tech leaders are solving business challenges and their takes on what’s next.

The title of the episode is: “Pluralsight Expert Access: Andrew Shafer on platform engineering as an evolution, not a replacement“. In this episode, I interview Andrew, as he gives his take on what Platform Engineering is, what organizations are chasing to enable developers, and what’s keeping organizations from long-term success when it comes to their DevOps practices. In the discussion we tackle these questions and more:

  • Is Platform Engineering a result of failed DevOps efforts in organizations? Is it just a Service Catalog with the twist of it being geared towards devs?
  • Platforms are not a new concept in the software world. In one of your tweets, there is an interesting line “Continuous Delivery without a platform is malpractice.“ Is this highlighting that organizations have been doing DevOps without platforms? Can you break down this line for us? It seems like there may be a story behind this?
  • Some people may equate Platform Engineering to having an Internal Developer Platform, is this the core of PE or are there other technologies that are also core to it?

Watch the episode for more insights on the importance of changing practices–not just words–for achieving sustainable progress and seeing Platform Engineering as a holistic approach to DevOps and delivery.

Watch the video here:

Read more

New Platform Engineering Course and Blog

Many organizations have embraced DevOps and adopted technologies like Kubernetes, cloud computing, and Infrastructure as Code (IaC) tools like Terraform or Pulumi. Despite these efforts, they often face challenges in delivering on the promises of DevOps and cloud-native. Platform engineering has emerged as the next step in the evolution, breaking down barriers and empowering developers to bring software to the market faster and more efficiently.

Recently I have been working on content to help educate and share my knowledge in this space. I am happy to announce two new pieces of content on Platform Engineering including a new course and a new blog.

Course: Platform Engineering: The Big Picture

Last week my 22nd course was published on Pluralsight! I am really excited about this course because it covers something that has been really hot in tech lately. It is about Platform Engineering. Platform Engineering has emerged as the next step in the evolution, breaking down barriers and empowering teams. Being someone that works with Kubernetes and cloud native this course was right up my alley because I work directly in this space.

The course is titled “Platform Engineering: The Big Picture“. This course will help you explore platform engineering and discover how it can elevate cloud-native development, making developers’ lives easier while achieving new heights in software delivery. Platform Engineering unifies and centralizes toolchains & workflows for self-service making developers’ lives easier while achieving new heights in software delivery.

In this course, you will gain an understanding about Platform Engineering, its benefits, architecture, tooling, workflow and how to adopt it.

Some of the major topics covered in the course include:

  1. A Platform Engineering overview and why it’s needed, how Platforms enhance DevOps and streamline cloud native.
  2. A comparison of DevOps, SRE, and Platform Engineering.
  3. You will learn about Platform Engineering Architecture, its tooling landscape, and Internal Developer Platforms.

Check out the “Platform Engineering: The Big Picture“ course here:

https://www.pluralsight.com/courses/platform-engineering-big-picture

I hope you find value in this new Platform Engineering course. Be sure to follow my profile on Pluralsight so you will be notified as I release new courses

Here is the link to my Pluralsight profile to follow me:

https://www.pluralsight.com/authors/steve-buchanan

Blog: 8 tools every platform engineer should know about

I am also excited to announce my second Platform Engineering-related blog post on Pluralsight. This one is titled: “8 tools every platform engineer should know about”. In Platform Engineering there are a lot of tools that can make up a platform. It can be confusing and hard to know what tools to focus on in the Platform Engineering space. In this blog post, I list 8 tools that are a must-know when you are in the Platform Engineering space.

👉 Read the blog post here:

https://www.pluralsight.com/resources/blog/it-ops/top-platform-engineering-tools

Read more

Pluralsight Spotlight: Steve Buchanan on Upskilling, Hybrid and Multi-Cloud, & Impostor Syndrome

I recently had the honor to film an episode of Spotlight at the Pluralsight headquarters.

It was an awesome experience and fun talking with Adam Gunn.

In the episode, we talked about:

Tech skills you need to master for the future, including hybrid and multi-cloud, Kubernetes, AI, and more. We also touched on how I landed in tech and how to overcome impostor syndrome to become a successful professional.

You can check out the episode here:

Read more

My 1st Microsoft Article: Build and deploy apps on AKS using DevOps (GitHub Actions) and GitOps (ArgoCD)

Yesterday a new article titled “Build and deploy apps on AKS using DevOps and GitOps” was published. This is an article I was working on for a while and it is the first item of work that I can share publicly since joining Microsoft. I am working on many other things I can’t share publicly at the moment. :-)!

The article is a part of the Azure Architecture Center. This article is about modernizing end-to-end app build and deploy using containers, continuous integration (CI) via GitHub Actions for build and push to an Azure Container Registry, as well as GitOps via Argo CD for continuous deployment (CD) to an AKS cluster.

The article can be found here: 

https://learn.microsoft.com/en-us/azure/architecture/example-scenario/apps/devops-with-aks

The article explores deploying a Python and Flask based app via two CI/CD approaches push-based and pull-based (GitOps). It is complete with a pros and cons comparison of both approaches and architecture diagrams for each that you can download. Here is a screenshot of the pull-based (GitOps) architecture:

The technologies used in this article and scenario include:

GitHub

GitHub Actions

Azure Container Registry

Azure Kubernetes Service (AKS)

Argo CD (GitOps Operator)

Azure Monitor

This article also has a repository with code for both the push-based CI/CD scenario and the pull-based CI/CD (GitOps) scenario in the AKS Baseline Automation. I had the opportunity to spearhead and work on these. They will walk through using each approach and have the code for the Flask App, and GitHub Actions to run the approaches. A direct link to this section of the article is here: https://learn.microsoft.com/en-us/azure/architecture/example-scenario/apps/devops-with-aks#deploy-this-scenario

I hope that you find all of this useful. Now go check out the article and deploy the app using the approaches. Stay tuned for more from me at Microsoft and for more blog posts here!

Read more

How To Set the Application Reconciliation Timeout in Argo CD

Argo CD has something called the Application reconciliation timeout. This is how often your applications will sync from Argo CD to the Git repository. It looks for changes and when it sees changes it will then apply the desired state from the repo to the Kubernetes (K8s) cluster. By default the timeout period is set to 3 minutes. This is set in the General Argo CD configuration.

The General Argo CD configuration is set in the argocd-cm ConfigMap. And the argocd-cm ConfigMap is deployed in the argocd namespace.

You can view what is currently set by running the following kubectl command on your K8s cluster that is running your Argo CD instance:

kubectl describe configmaps argocd-cm -n argocd

The output will look like the following:

You can also see that the argocd-cm Data is empty by running kubectl get configmaps -n argocd or if you are using AKS navigate to ConfigMaps in the Azure portal like in the following screenshot.

Most Argo CD instances are running the default settings for its configurations. The argocd-server component reads and writes to the argocd-cm ConfigMap and other Argo configuration ConfigMaps based on admin user interactions with the Argo CD web UI or the Argo CD CLI. It is normal for it to be empty with Data at 0 if you have not changed any defaults or set anything directly in the ConfigMap yet.

To change the Application reconciliation timeout you need to do the following:

  1. Get a copy of the argocd-cm ConfigMap here: https://github.com/argoproj/argo-cd/blob/master/docs/operator-manual/argocd-cm.yaml
  2. The Application reconciliation timeout can be found on line 283 “timeout.reconciliation: 180s”.
  3. Change “180s” to whatever number you want to change it to i.e. change to “60s” to reduce the sync internal to 1 minute.
  4. Remove all of the other settings in the file except for the Application reconciliation timeout. The file should look like this:
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
  labels:
    app.kubernetes.io/name: argocd-cm
    app.kubernetes.io/part-of: argocd
data:
  # Application reconciliation timeout is the max amount of time required to discover if a new manifests version got
  # published to the repository. Reconciliation by timeout is disabled if timeout is set to 0. Three minutes by default.
  # > Note: argocd-repo-server deployment must be manually restarted after changing the setting.
  timeout.reconciliation: 60s

5. Save the file.

6. Connect to the Kubernetes cluster that is running Argo CD and apply the argocd-cm ConfigMap file you just updated by running the following:

kubectl apply -f argocd-cm.yaml -n argocd

7. Run the following to verify the update was applied:

kubectl describe configmaps argocd-cm -n argocd

You should also notice at least 1 is listed under Data for the ConfigMap now.

8. It is a good practice to redeploy the argocd-repo-server after updating the argocd-cm ConfgigMap. You can redeploy the argocd-repo-server by running the following:

kubectl -n argocd rollout restart deploy argocd-repo-server

That’s it! Now your app in Argo CD will sync on the new Application Reconciliation Timeout that you set. Check back soon for more Azure, Cloud, Kubernetes, GitOps, Argo CD content and more.

BTW: For more in-depth information on GitOps and Argo CD check out my GitOps and Argo CD courses on Pluralsight here:

GitOps: The Big Picture“:

https://app.pluralsight.com/library/courses/gitops-the-big-picture

Getting Started with Argo CD“:

https://app.pluralsight.com/library/courses/argo-cd-getting-started

And here is the link to my Pluralsight profile to follow mehttps://app.pluralsight.com/profile/author/steve-buchanan

Read more

GitOps Fundamentals Certification

Recently Codefresh launched the 1st certification in its GitOps certification path. This one is called “GitOps Fundamentals“. You can find it here: https://codefresh.learnworlds.com .

It takes you through the basics of GitOps to gain theoretical knowledge, and how to utilize Argo CD as the GitOps operator to gain hands-on knowledge. You will learn about both and will have questions on both in the quizzes and final exam.

They also touch on Argo Rollouts to go over Progressive Delivery with topics such as blue/green deployments and canary deployments. This is the 1st ever GitOps certification and it’s free! They do have plans for GitOps at Edge and GitOps at Scale certifications.

You can find more information about the GitOps certification and Codefresh’s future plans for it on this blog by Hannah Seligson (one of the authors of the course and exam) here: https://codefresh.io/blog/get-gitops-certified-argo.

I jumped all over this opportunity to get certified on GitOps, by signing up for the course, taking the training, and the exam! I passed and now I am GitOps certified.

Here is the certification:

GitOps is gaining adoption more and more every day in the Kubernetes space. Also, Argo CD is growing extremely fast as one of the top if not the top GitOps operator. I recommend you check this Codefresh GitOps certification out and get GitOps certified as this pattern and the technology behind it are growing at a super fast rate.

Also note, it looks like Weaveworks is planning to launch a “Certified GitOps Practitioner (CGP)” certification soon. I would guess the Weaveworks GitOps certification will contain content on Flux another GitOps operator. You can learn more about their coming GitOps certification here: https://www.weave.works/certified-gitops-practitioner

Also for more training on GitOps and Argo CD be sure to check out my GitOps and Argo CD courses on Pluralsight here:

GitOps: The Big Picture“:

https://app.pluralsight.com/library/courses/gitops-the-big-picture

Getting Started with Argo CD“:

https://app.pluralsight.com/library/courses/argo-cd-getting-started

And here is the link to my Pluralsight profile to follow me for future GitOps, Kubernetes, Cloud, and DevOps content: https://app.pluralsight.com/profile/author/steve-buchanan

Read more

Cloudbusting Podcast Guest EP130 – Diving into Jucy Lucy, & Root Canal’s with a little Kubernetes, Azure Arc, & GitOps on the side

This was a fun podcast with Jez Ward, and Dave Chapman of Cloudreach. They run a podcast called Cloudbusting. On the podcast they focus on transformation, leadership, ways of working and emerging technology they explore the significant impact that cloud is having on people and businesses.

On this podcast episode, we set out to answer very important questions such as what are Jucy Lucy’s?, what are root Canals like today? oh, and yeah we also spend some time talking about what Containers, Kubernetes, & GitOps are and how they fit in the cloud.

Check out the podcast episode here:

https://www.cloudreach.com/en/podcasts/diving-into-kubernetes-azure-arc-gitops-episode-130

Read more

Registering an Azure Kubernetes Service Cluster with Argo CD

Argo CD is a GitOps operator and the goal of it is to be able to deploy apps to Kubernetes. In the majority of cases, we want to use Argo CD to deploy apps to many clusters.

Argo CD itself is deployed as a set of pods on a Kubernetes cluster. By default with an Argo CD deployment, the cluster it is running on is set as “in-cluster” (https://kubernetes.default.svc). When apps are configured for deployment a Kubernetes Cluster under Destination is required. They can be deployed to either the “in-cluster” K8s cluster or an external K8s cluster.

In order to deploy apps to an external Kubernetes cluster, you will need to register an external K8s cluster with Argo CD.

If you want to see the clusters you have registered with your Argo CD one way is through the web UI. Once you log in navigate to Settings and then Clusters to see them.

You can also see the clusters you have in the Argo CD CLI. To use the Argo CD CLI you need to log into the Argo CD API Server as shown in the following screenshot.

To see what clusters are registered from the CLI you can run

argocd cluster list

You will notice that you will only see the In-Cluster K8s cluster until you add an external one. Also, note that you are not able to register a new K8 cluster in the Argo CD web UI. You can only register a new K8s cluster from the Argo CD CLI. Within the Argo CD web UI you can delete the default in-cluster K8s cluster. This is not recommended.

If you click on the In-Cluster K8s cluster you can modify some settings of the in-cluster K8s cluster in the Argo CD web UI such as the name of it and its namespace. Not useful when you want to have more control over the settings around the K8s cluster you will be deploying apps to.

In my example, my Azure subscription has two AKS clusters. You can see this in the following screenshot. The arriving-gelding-k8s cluster is my In-Cluster object in Argo CD. The selected-worm-k8s is not my In-Cluster so I want to add this one to my Argo CD.

To add the new external cluster run use the following steps.

Step 1: Add your target K8s cluster to ArgoCD via the context in your kubectl config.

-For AKS you can simply log into your Azure subscription from VS Code on your computer and then run

 az aks get-credentials –resource-group RGNAME –name AKSCLUSTERNAME

This will add the context for your AKS cluster to your kubeconfig file.

-For the process on your setup refer to the following link as it may differ:  https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters

Step 2: List the K8 cluster contexts in your current kubeconfig file to ensure your target cluster has been added. Do this by locally running:

kubectl config get-contexts -o name

Step 3: Install a Service Account (argocd-manager), into the kube-system namespace of your kubeconfig file context:

argocd cluster add CONTEXTNAME

It will look like this:

After completing the previous steps you can run argocd cluster list again or go into the portal. You will see your new cluster added.

That wraps up this blog post. Now you should be able to deploy to more than just your In-Cluster Kubernetes cluster. Check back soon for more posts on Argo CD, GitOps, Kubernetes, and Azure topics.

Read more

Deploy App to Azure Kubernetes Service via Argo CD

In my last post on Argo CD with AKS, I mentioned the next post would explore deploying an app via Argo CD. Well, in this post we are going to do just that. I am going to walk through deploying an app from Argo CD to AKS. Note this same process would work for any Kubernetes cluster. This is not going to be a long post as the process is straightforward.

First of all, you can deploy an app from the Argo CD web UI or CLI. Ready your application in a Git-based repository. It does not matter what source control system you use for your repository as long as it is Git-based. You can use Azure DevOps, Gitlab, Bit Bucket etc. In my case I use GitHub. To deploy an app you need to point to a Git repository of either K8s manifest, Helm, or Kustomize. In this blog post I am going to keep it simple and use the Hello K8s app from Paul Bouwer. Ok, now let’s jump in.

Here are the steps for Deploying an App to Argo CD within the Web UI:

  1. In the Argo CD web UI ensure you are on the Applications page
  2. Click the + NEW APP button
  3. Give the app the name hellok8s, use the project default (I used a dev project in my example), select Automatic for the sync policy, check AUTO-CREATE NAMESPACE
  4. On Source for the Repo URL use https://github.com/paulbouwer/hello-kubernetes.git & select deploy/helm/hello-kubernetes for the path
  5. For the DESTINATION select https://kubernetes.default.svc for the Cluster URL and use hellok8s for the namespace
  6. Leave all the defaults under HELM
  7. Click the CREATE button at the top of the UI

Once the app is deployed it will look like this:

You can view the resources in AKS now. In the following screenshot you can see the deployment, pods, and service of a load balancer type.

You can also speed things up by deploying your app via the Argo CD CLI. This will accomplish the same goal as you would deploying the app via the Argo CD Web UI.

Deploying an App to Argo CD from the Argo CD CLI:

argocd app create hellok8s –repo https://github.com/paulbouwer/hello-kubernetes.git –path deploy/helm/hello-kubernetes –dest-server https://kubernetes.default.svc –dest-namespace default

That wraps things up for this post. Check back soon for more posts on Argo CD, GitOps, Kubernetes, and Azure topics.

Read more