π1yr Pulumi Anniversary!π
Posted on June 21, 2024 • 19 minutes • 3960 words
Table of contents
- πͺ Year One of DevRel @ Pulumi!
- β―οΈ The Content
- πββ¬ The KatWalk LLM AI Server π π»
- π©πΌβπ» Pulumi Devcontainers
- π¦ Kubernetes π»
- π² AI + Pinecone
- π Pulumi Providers β‘
- π οΈ Pulumi Deployments
- βοΈ KubeVirt Baremetal PaaS - Community Platform Engineering
- π AWS
- π΅ Azure
- π’ GCP
- π EmpathyOps - Twitter Spaces (25 & Counting!)
- π Youtube Podcasts, Interviews, and Livestreams!
- π¦ Twitter Nonsense
- π§πΏβπ€βπ§π» Meetups/Community Events
From learning to code, content engineering, the rise of AI, Platform Engineering and beyond. So much learning, teaching, and creating. I want to talk about it so let’s dive in!
“The art of teaching is the art of assisting discovery”
β Mark Van Dore 1
πͺ Year One of DevRel @ Pulumi!
π Yesterday was June 26th, and the anniversary of my first year at Pulumi! ππ
π₯ Oh, I will not apologize for emoji in my blogs @ibuildthecloud , get rekt… π
π Story Time
π§ What is Pulumi?
Pulumi is an ecosystem built from a fully Open Source Software (OSS) “Infrastructure as Code” (IaC) cloud orchestration tool that supports writing IaC in general purpose programming languages like Python, Go, TypeScript, and C#.
π The problem of DevOps without Pulumi
My first time using Pulumi IaC was circa 2019. I was working at Red Hat at the time, and new on a team delivering OpenShift and an air-gap DevSecOps platform for the US Department of Defense Platform One initiative.
To accomplish our goal of a push-button platform provisioning automation, we assembled a stack of tools including Ansible, Terraform, Docker, OpenStack, Bash, and Python to accomodate our end-to-end requirements, at one point the project called CodeSparta developed entirely in the professional services consulting org was even referred to by RH Product Engineering as “a purpose built OpenShift installer”.
Dockerfiles, bash, Ansible, Python, and Terraform add up to a large web of functionality spread across a dizzying array of tools, languages, and requires an unreasonably wide range of expertise to maintain and operate. As the lead developer and maintainer on the Sparta work, I discovered the limits of scaling the work to maintain and develop such an obscure and patchwork product across a larger team of engineers to be more challenging as the complexity continued to spiral out of control.
π Why I like Pulumi IaC
Pulumi, was first shown to me by Chris Kuperstein , a brilliant talent with the vision and goals of a leader. By comparison, Pulumi has in my experience, completely replaced most of that laundry list of tools, and proven far more capable and flexible besides.
I would go on to write a bit of Pulumi IaC while at Red Hat primarily for my own interest, before moving on to write many consulting engagements in Pulumi python, typescript, and golang while working as a consulting engineer at Kong Inc , an API Ops company.
β±οΈ Once in a Lifetime
There are many DevRel opportunities in the tech industry. Among them are only a small few I would consider taking on myself. Pulumi specifically is a technology I was already convinced is the future of orchestration, and in keeping with a theme I adhere to at every opportunity, choose an architecture that eliminates the most tools from your stack.
Choose an architecture that eliminates the most tools from your stack.
- Kat Morgan
The conventional DevOps, Platform Engineering, and general operations tool belt has exploded in complexity and variety. With the greatest of intentions, organizations frequently make mistakes in ops architectures where features are bought and bolted on without a vision for simplification and velocity.
Pulumi’s single greatest feature, is the ability to write arbitrary logic inline with your IaC to intelligently operate cloud infrastructure with the flexibility to meet real world demands. This key feature is a primary focus of my own learning journey with Pulumi, breaking down the barriers between Traditional Ops (TradOps) and more software development skills while elegantly meeting more complex orchestration problems without breaking a sweat.
The pairing of the ultimate infrastructure as code tooling and ecosystem, with the job description of developer advocacy and community work, is bar none, one of the most exciting professional opportunities in the industry today. Serving as the “glue” technology bringing together the best cloud services on earth, to elegantly deliver a robust and simple path to cloud orchestration, my role as a community engineer at Pulumi offers me direct access to dabbling, or diving deep into almost any tech on the bleeding edge of cloud computing today.
π€ Why join Pulumi
Before joining Pulumi myself, I had the great privilege of collaborating with the Pulumi team on a Kong + Pulumi project, and joined PulumiUP 2022 as a panelist with other amazing experts.
Walking among The Greatsβ’οΈ I joined Pulumi’s Developer Relations π₯ Community Engineering team, contributing to the most interesting community growing in the cloud orchestration space.
From AI to Kubernetes, Virtual Machine and Container platforms, if nothing else, the last year has proven that not only have I been fortunate to write an incredible professional development story from my own humble beginnings, but that you only reach the ceiling once you settle for having already achieved it.
I am beyond proud of this past year’s work, and I couldn’t be more excited to leap directly into what is next.
π₯ The GreatsοΈοΈοΈβ’οΈ
Note: This concludes the official “blog” portion of this post. Continue on for more detailed content and resources from the past year of work.
β―οΈ The Content
Below is a collection of the past year’s highlights listed by topic.
Each section includes a brief overview of the project, the challenges faced, and the successes achieved for a highlighted item, and also includes an “click to expand” resource list of additional content for further exploration.
All content is my own original work with code and reference links unless otherwise noted.
Thank you to all who have supported and contributed to these successes and more!
πββ¬ The KatWalk LLM AI Server π π»
The Oops
The KatWalk project was my opening act on the Pulumi DevRel team. I’ve told this story a few times, but irony never fails to entertain me and I’ll write it down finally to share here as well.
Pulumi supports many languages. While interviewing for Pulumi, I pre-cleared a preference for writing mainly only golang and typescript in seat, and that I specifically did not want to write python. My preference was thankfully accepted and supported on the part of Pulumi decision makers. However, fate saw fit to change my plans on day one.
Being only 2 months after ChatGPT’s release, in less than 3 hours of day one at Pulumi, I landed in a team call where the topic of AI came up. Having nothing on my plate yet I volunteered to do some ice breaking into the burgeoning machine learning and data science space. If you know anything about the AI field, you know to expect lots of Python! … EVERYWHERE. Inevitably, I’ve written almost exclusively Python since joining.
The Ops
The KatWalk project was a full stack development endeavor. The app source and infrastructure as code (IaC) source code is all written in Python and a frontend written as a very simple javascript app deployed to Vercel.
From first enabling CUDA support inside and outside of the KatWalk container runtime, to coordinating compatible versions of cuda with the various vLLM and other python libraries required, the minutia was frought with pitfalls especially being so early in the ChatGPT era.
The Work
The total work product includes:
A vLLM based LLM API Service app source code
A function to download the LLM from Huggingface.io at startup if not found at the configured path.
An Nvidia CUDA enabled Python container for Llama3 or other LLM service deployment.
Pulumi IaC to build the container and publish the container image on Github Container Registry ghcr.io
Pulumi IaC to support deploying the container to many targets including:
- locally via Docker (with cuda support)
- Azure ACI
- Runpod.io
I used the Pulumi Dynamic Provider to support Runpod.io’s alternative cloud service prior to the official provider’s release.
Bonus points: we ultimately published a new Runpod.io native provider to Pulumi Registry’s official catalog as a parallel effort started during KatWalk development.
π©πΌβπ» Pulumi Devcontainers
Why Devcontainers?
The “Development Containers” or the Devcontainer project was created to solve the problem of “it works on my machine!” and reduce the frequency of productivity drains caused by variations in local development environments.
Nix didnt work
In starting my journey at Pulumi, I first turned to the promise of the Nix, NixOS, Nixpkgs, home-manager, direnv, and the rest of the Nix ecosystem to simplify dependency installation and versioning in Pulumi IaC developer environments.
Nix is a powerful ecosystem and my novice understanding definitely limited my fluency with solving problems as I encountered them, however I found that aspect to be a concerning barrier to entry for the goal of making Pulumi development life easier and inevitably determined that Nix was not the right tool for the job at this time. I have since adopted NixOS with Plasma 6 as my personal laptop daily driver OS for it’s ease of management and configuration, but for Pulumi IaC cloud orchestration and platform developers Nix is still an out-of-reach baseline barrier to entry.
So what actually meets the needs of an easily sharable and maintainable developer environment with full support for kind kubernetes local k8s development or even localstack aws development? Enter Devcontainers !
Achieving Success
The Pulumi Devcontainer work was a great opportunity to meaningfully improve the daily workflow for myself and others in the Pulumi community and proved to be a straightforward solution to implement and scale.
Once released, the ghcr.io/pulumi/devcontainer:extra
image and github.com/pulumi/devcontainer
template repository together immediately accelerated every Pulumi project I worked on as the foundational first step to getting started in everything I do, and adds the benefit of providing a best case scenario of sharing demo success beyond the stage with others by serving as a click-to-start reproducible path that eliminates the prerequisites and beginners fatigue.
Devcontainer Impact
Since it’s release, I personally used the Devcontainer as my first step in every Pulumi project I’ve delivered. From streamlining my prerequisits and sharing that success with others, to seeing it’s adoption in the community, the Devcontainer already has proven the community need from the growing interest alone.
Furthermore, in combination with Github Codespaces , the Pulumi Devcontainer now offers a “one click to start” method to try many Pulumi examples and demos with zero setup required, making all of the official Pulumi Examples on Github directly accessible to anyone with a Github account and a browser.
Pulumi Devcontainer adoption on Github
π*Click to Expand Enhanced Projects List*
- Pulumi Docs - github.com/puulumi/pulumi-hugo
- Pulumi Examples - github.com/pulumi/examples
- Pulumi Pinecone Provider
- Kind Provider - github.com/usrbinkat/pulumi-kind-native
- New Pulumi Provider Development Template
- Pulumi Minecraft IaC Exercise
- Docker Compose GenAI Port to Pulumi IaC (incomplete)
- Pulumi IaC for GCP Cloud Run
- Pulumi Cert Manager Exercise
- AWS Demos Roadmap
- Github Workflows Secrets - IaC in the wild
- Docker Build - IaC in the wild
- Pulumi IaC Template Repo - IaC in the wild
- Pulumi Azure AKS - IaC in the wild
- Lambda Labs AI Cloud Native Provider - Community Provider
- Pulumi Provider for k0s Kubernetes
- Pulumi Provider for CEPH Rados Gateway
- Pulumi Azure AKS AI Workload K8s Cluster IaC
- Pulumi GCP Java Serverless IaC
- Pulumi Kubernetes IaC Workshop & Demo Repository
- Pulumi Hugo IaC with Example Inputs/Outputs and Output
Logic Feature Flows
Learn more
π¦ Kubernetes π»
It’s Kubernetes Time
Among the top 5 most used providers, the Pulumi Kubernetes Provider is the first Pulumi provider that I ever used.
In the Pulumi ecosystem, “Pulumi Providers ” inform Pulumi’s IaC engine on the many cloud service API’s that orchestrate the cloud. Between k8s popularity among our own provider offering, and Pulumi’s close ties to the larger CNCF landscape, it’s no surprise that there was a lot of Kubernetes work over the past year.
Teaching & Learning in Public
Tweet of Marino and Kat on Network Policy as Code at Civo Navigate 2023
There was so much kubernetes in fact, that I created a longer-lived and maintained repository for developing and practicing a larger and more sophisticated baseline IaC project structure.
In this repository I was able to evolve from the “hello world” level of Pulumi code structure and repostory layout, into more efficient, maintainable, and mature. Some of these examples may seem obvious to experienced software developers however Pulumi serves both the modern developer audience as well as tranditional infrastructure engineers such as my self who may be learning to code for the first time or be new to software development practices in general.
Among the most prominently useful discoveries across my collected works to highlight includes the practices of:
- Adopting Feature Flags in IaC with Pulumi to enable and disable features in a controlled and declarative way.
- Writing actionable Pulumi Stack Export outputs that can be put to work in controlling the versioning update rollout flows through dev/test/prod to reduce dependence on things like Dependabot and further simplify the tool stack with consolidation directly into the IaC codebase.
Find it in the code
- Pulumi.yaml IaC Project Configuration
- Pulumi Python modular source directory layout
- Declarative Modular IaC with Feature Flags in Pulumi
- Calling IaC module imports with arguments
- Just-in-time Helm release version lookup
- Helm release version pinning via Pulumi config
- Dynamically building a Pulumi Export for automated version control and dev/test/prod promotion
π*Click to expand: Pulumi + Kubernetes Content List*
π² AI + Pinecone
Pinecone is a purpose built cloud native vector database for AI and ML workloads. Riding the burgeoning wave of ChatGPT’s sudden rise to prominence and powering many applications in the race to commercialize LLMs. Pinecone and the AI application architectures that it plugs into as a RAG (Retrieval Augmented Generation) database are suddenly high demand practitioner skillsets.
Pinecone Pulumi Meetup in San Francisco
Pinecone Pulumi Meetup in Seattle
pinecone provider
πClick to find more AI content* π€
π Pulumi Providers β‘
While ice braking in the AI space with the KatWalk LLM Server project, it became obvious that the rapid growth in the number of AI startups and cloud services had one thing in common. Having flipped from a largely academic field of research teams, into a hot bed of rapid commercialization efforts, AI was largely lacking for terraform, pulumi, and other IaC provider support across the generative AI and supporting services.
This called for a second look at the Pulumi Provider development experience. Pulumi providers come in a few forms. The most common being the TF Bridge Provider, and the Pulumi Native Provider.
Dynamic Provider
The Pulumi Dynamic Provider approach allows for writing basic CRUD provider coverage of arbitrary APIs not covered with a real Pulumi provider. This was the first approach taken to support the Runpod.io cloud service in KatWalk server prior to developing and releasing the official runpod provider itself.
Native Provider
The Pulumi Native Provider Boilerplate is a toolkit for generating Pulumi providers from scratch in golang.
This approach is how we delivered the Pulumi Pinecone Provider and the Pulumi Runpod.io Provider to the Pulumi Registry.
TF Bridge Provider
The Pulumi Terraform Bridge Provider Boilerplate is a toolkit for generating Pulumi providers from the Terraform provider schema found in terraform provider source code.
π*Click to find more Pulumi Providers content*
π οΈ Pulumi Deployments
The Pulumi Cloud Deployments features are a fairly new practice in my personal toolbelt. One of my more recent exercises, I sat down to learn and implement 3 new features at release time.
As an OSS purist at heart, I commonly lean a little too far into the purist take of “OSS or bust!”, but acknowledging the value of the right tool for the job I was surprised to find the experience of writing my entire GitOps IaC deployment pipeline inside the same Pulumi IaC I was already practicing to be the most convenient experience.
For the video coverage, we start with a quick review of the Pulumi Deployments features, then get hands on demonstrating each of the 3 new capabilities.
Deployments Feature | Description |
---|---|
TTL | Time to Live infrastructure with pre-determined self-destruct EOL |
Drift Detection | Reconcile Desired State vs Actual State to detect drift conditions |
Scheduled Deployments | Schedule any operation on a cron timer ~$ pulumi [up,down,refresh] |
βοΈ KubeVirt Baremetal PaaS - Community Platform Engineering
This platform engineering project is dedicated to building community expertise with Pulumi by taking on a longer running, larger, and more complex project scope than most DevRel “101” level exercises. The project has already been an excellent learning and teaching tool for hands on practice with dynamic and complex cloud orchestration environments.
While still in early days, we already have a community of brilliant minds contributing to, and learning together on the CCIO Discord: LINK
πClick to find more Kargo KubeVirt PaaS Platform Engineering / Homelab content*
- Kargo Kubevirt PaaS Announcement
- Kargo on Turing Pi 2 + 4x 32GB RK1s
- Lowfi & Code Kargo on OptiplexPrime
- Weekend CCIO Discord Homelab Celebration
- CCIO MVP Release Triage & Project Board Hygene
- @SideroLabs Homelab Promo Post
- Kargo Kubevirt PaaS Development Thread: Cilium + Multus part 1
- Kargo Kubevirt PaaS Development Thread: Cilium + Multus part 2
- Kargo Kubevirt PaaS Development Thread: Cilium + Multus part 3 The Solution
- kargo dev + what’s next
- pulumi + kubevirt
π AWS
SageMaker
AWS SageMaker is a powerful tool for building, training, and deploying machine learning models.
I was fresh off the Katwalk LLM API Service project going into this one and comparing the former “build it yourself” approach to the SageMaker “AI-as-a-Service” experience.
Blog:
Youtube:
- Pulumi SageMaker (132K+ Views)
Github:
Twitter:
π*Click to find more AWS content*
Workshops
- Workshop Getting started with Pulumi and AWS
Events
π΅ Azure
The past year was full of fun in many clouds, including Microsoft Azure!
First up, with a git repo and a Youtube video to show for it, what better way to get into Azure than building a new Kubernetes AI compute platform?
Starting a new project completely from scratch, lets dig in together with Kevin Evans and step through getting started, using Pulumi AI, Pulumi templates, and dive into tooling, syntax, and IaC code techniques including variable maps and arrays for elegant IaC. Draw the whole owl in this step by step demonstration.
Also, stay tuned! With plans to further develop this project enhancing the AKS cluster with Karpenter GPU worker node machine sets and Kubeflow for AI/ML workloads, there’s definitely more that you won’t want to miss!
Azure AI K8s Cluster with Pulumi IaC
Building on With serverless and AI both all the rage, what’s not to love about a serverless AI Langchain Function on Azure with Pulumi IaC?
Serverless AI Langchain Functions on Azure with Pulumi IaC
π’ GCP
Check out the action on Google Cloud Platform (GCP). Production hybrid kubernetes + serverless architecture, Cloud Run and more!
Google & Pulumi Present: Production Ready Java Serverless Apps
Google & Pulumi Present: Efficient Microservices on GCP Cloud Run
π EmpathyOps - Twitter Spaces (25 & Counting!)
In partnership with EmpathyOps , a tech consulting and fractional Developer Advocacy service provider, I’ve had the great pleasure of co-hosting dozens of industry experts bringing their wealth of knowledge, spilling the tea, and remembering the human side of tech as we journey through lessons learned and aspirations for the future.
Title | Link | Attendees |
---|---|---|
Application Observability for Peak Performance | Link | 1200+ |
Cloud Unplugged | Link | 1900+ |
So I heard you want to contribute to k8s? | Link | 1300+ |
Deep dive w/ Open Telemetry | Link | 1000+ |
πClick to find more EmpathyOps content*
Title | Link | Attendees |
---|---|---|
Understand the CNI Spec | Link | 200 |
KubeCon NA 2023 - all about community! | Link | 631 |
Navigating the Future of Hiring in the Tech Industry | Link | 973 |
Platform Engineering - w/ Carlos Santana | Link | 246 |
SimpleOps w/ Ambient Mesh | Link | 151 |
GitLab Diaries - DevSecOps Efficiency through AI & Culture | Link | 179 |
Building Elegant Platforms in the Face of Tech Debt | Link | 194 |
CHOP DOWN THOSE Enterprise Security Silos + Identity + AuthN | Link | 108 |
Do you even Authenticate? Diving into Kubernetes AuthN | Link | 347 |
The Magic of GitOps is still flowing | Link | 182 |
Letβs chat about Pipeline Security | Link | 551 |
CIVO Navigate Recap | Link | 575 |
Everyone gets a Namespace: Provision secure Namespaces | Link | 378 |
from DevRel to Solution Engineering | Link | 99 |
Maximising k8s uptime and reliability | Link | 249 |
Democratize Kubernetes to Achieve Continuous Reliability | Link | 78 |
Understanding Linkerd in 2024 | Link | 274 |
Strategies to navigate the tech job landscape | Link | 290 |
Building reliable, safe, scalable apps: C#, K8s and friends | Link | 137 |
The role of CNCF Ambassadors. Letβs chat | Link | 353 |
Impact of Developer Relations and Beyond | Link | 226 |
eBPF & Cilium for Next-Gen Cloud | Link | 240 |
π Youtube Podcasts, Interviews, and Livestreams!
π*Click to find more Podcasts, Interviews, and Livestreams content*
- Pulumi SageMaker
- Pulumi Feature Release: Schedule, TTL, and Drift Detection with Deployments
- Impromptu Livestream w/ Carlos Santana
- eCHO: e128 Deploy Cilium with Pulumi
- Civo Navigate: Service Mesh, CNI, and Modern CNI
- Orchestration: Your key to unlocking AI
- ComeCloudWithUs
- CloudNativePodcast
- Network Policy as Code #90DaysofDevOps
- EmpathyOps: Platform Engineering Real World Use Cases
- Kubevirt PaaS Live Development
- Workshop: Microservices on GCP CloudRun with Pulumi
- Smart Cherry’s Thoughts
π¦ Twitter Nonsense
Look, we had fun in the global group chat. A snapshot of the highlights below.
πClick to find more Twitter Nonsense content*
- rate my setup couch floof on lap
- Pulumi Examples Push to Start
- what is a kubernete
- hard grind robot ded
- Polly Llama LLM meme
- midjourney
- kubernetes q’s
- robots picture
- operation office relocation
- magic tricks w/ cnunciato
- should code be novel?
- Pulumi AI on the CLI
- rate my setup couch floof on lap
- robots picture
- operation office relocation
- do you even codespaces bro
π§πΏβπ€βπ§π» Meetups/Community Events
OpenAI DevDay
πClick to find more Meetups/Community Events content*
Tech Talks with Nana
πClick to find more Tech Talks with Nana content*
Civo Navigate
πClick to find more Civo Navigate content*
Open Source Summit
πClick to find more Open Source Summit content*
Workshops
πClick to find more Workshops content*
Quote from Mark Van Dore . ↩︎