IAAS-K8S Deep Dive: Building Scalable Multi-Cloud Kubernetes Infrastructure with Pulumi and TypeScript
Join us this Hacktoberfest 2025 to contribute to Chimoney’s open-source IaaS-K8S project, a TypeScript-based framework for automating Kubernetes deployments across multiple cloud providers using Pulumi, Helm, and modern Infrastructure-as-Code practices.
· 5 min read

Introduction
Chimoney’s IaaS-K8S (Infrastructure as a Service for Kubernetes) is a multi-cloud infrastructure automation framework that provisions Kubernetes clusters and deploys complete application stacks on AWS EKS and GCP GKE with future support for Azure, DigitalOcean, and others.
Instead of manually creating clusters, configuring networking, or deploying Helm charts through dashboards, IaaS-K8S lets you automate it all with a single command.
npm run dev -- up my-stack --cloudProvider=gcp --companyName=mycompany
Behind the scenes, it provisions the cluster, deploys workloads, manages secrets, and outputs credentials all through clean, auditable TypeScript code.
Architecture Deep Dive
1. Infrastructure as Code (Pulumi)
At the heart of IaaS-K8S is Pulumi, an Infrastructure-as-Code (IaC) tool that allows you to define and manage infrastructure using real programming languages like TypeScript instead of YAML or HCL.
Example:
const cluster = new aws.eks.Cluster("my-cluster", {
instanceType: "t3.medium",
desiredCapacity: 2,
});
Pulumi interprets this code and provisions real resources in your cloud provider from VPCs to Kubernetes clusters while tracking all changes in version control for full reproducibility.
2. Multi-Cloud Deployment
IaaS-K8S abstracts cloud-specific logic into modular components:
- aws-infra.ts → AWS EKS provisioning
- gcp-infra.ts → GCP GKE provisioning
This architecture makes deployments portable and consistent across multiple providers, the same command and workflow can deploy to any supported cloud.
3. Dynamic Configuration
One of IaaS-K8S’s most powerful features is auto-generated Helm values. You don’t need to handcraft YAML files, the CLI intelligently merges:
- Default chart values
- Cloud-specific overrides
- Deployment type (shared or dedicated)
- User-supplied overrides (if any)
Example:
npm run dev -- up client-stack \
--cloudProvider=aws \
--companyName=mycompany \
--autoSetupConfig
The system automatically handles everything, from default node sizes to domain setup, for predictable, repeatable results.
4. CLI for Automation
Deployments are orchestrated through a clean, developer-friendly CLI built on top of Pulumi’s Automation API.
Key flags include:
--companyName— for resource naming--cloudProvider— aws / gcp--deploymentType— shared / dedicated--autoSetupConfig— auto-generates Helm and Pulumi configs
This CLI enables seamless automation across local environments, CI/CD pipelines, and multi-tenant deployments.
5. Monitoring and Rollback
IaaS-K8S prioritizes safe infrastructure management. Every deployment runs with Pulumi previews (dry runs) before applying changes, ensuring transparency and preventing unexpected costs.
Features include:
- Automatic rollback on failure
- Real-time status updates
- Outputs for DNS endpoints, service URLs, and kubeconfig credentials
You always know what’s changing and can revert safely if something goes wrong.
How It Works
At a high level, IaaS-K8S automates three layers of the infrastructure lifecycle:
- Provisioning → Pulumi creates infrastructure resources such as VPCs, clusters, and IPs across AWS or GCP.
- Deployment → Helm installs and manages applications like the Rafiki stack (auth, backend, nginx, redis) on top of the cluster.
- Configuration & State Management → The system auto-generates sensible defaults and tracks state for easy rollbacks and updates.
Deployment Modes
IAAS-K8S supports multiple deployment types to fit different operational models:
| Mode | Description | Command |
|---|---|---|
| Modern Deployment | Uses automation and defaults for full environments. | npm run deploy:modern |
| Custom Overrides | Use custom config files. | npm run deploy:custom |
| Shared Deployment | Deploy multiple tenants on shared clusters. | npm run deploy:shared |
| Dedicated Deployment | Create isolated environments per company. | npm run deploy:dedicated |
Project Structure

Quick Start Guide
Getting started with IAAS-K8S is simple.
Clone the Repository
git clone https://github.com/Chimoney/Iaas.git
cd Iaas/Iaas-k8s/pulumi
Install Dependencies
Ensure you have Node.js (v18+), Pulumi, kubectl, and Helm installed.
npm install && npm run build
Configure Your Cloud Provider
For AWS:
aws configure
For GCP:
gcloud auth application-default login
Run a Deployment
npm run dev -- up test-stack \
--companyName=test \
--cloudProvider=gcp \
--cloudConfigFile=./config/gcp.json \
--secretsFile=./config/secrets.json \
--autoSetupConfig
Optional: Local Preview
To preview your stack without deploying:
npm run dev -- preview test-stack
This helps verify that your configuration files (like config/secrets.json and config/aws.json) are set up correctly before provisioning resources.
Development Workflow
For contributors looking to build or modify the project locally:
# Build the project
npm run build
# Run Pulumi preview
pulumi preview
# Deploy changes
pulumi up
This workflow ensures that every infrastructure change is previewed, validated, and traceable before deployment.
Contributing to IAAS-K8S
We’re building this as a community-driven open source project, and contributions are always welcome! Here’s how to get involved:
Find something to work on:
- Head to our GitHub Issues and look for labels like
Good first issue(great for beginners) orHacktoberfest(for this month’s challenge)
Make Your Contribution:
- If you’ve already set up the project locally (see Quick Start section above), create a new branch
git checkout -b feature/update-cli
- Implement your changes.
- Test locally using Pulumi preview and deploy commands (You already learned how to do this in Quick Start.)
Submit your work:
- Push your branch and open a Pull Request. Be sure to follow the Pull Request template guide
Extending Support to New Cloud Providers
If you’re comfortable with TypeScript and YAML, there’s a lot you can help with here. You can extend the system to support new cloud providers (like Azure, DigitalOcean, etc.) using Pulumi’s provider packages.
To add support for a new provider like Azure:
- Create
core/azure-infra.tsmodeled after AWS/GCP files. - Add
azure/folder with chart-config templates. - Update
automation.tsandindex.tsto support the new provider. - Add tests and update documentation.
You’ll find a complete implementation guide in Contributing Cloud Providers Guide
Conclusion
That wraps up our overview! We're excited for you to get started.
To jump in, you can find the repository and start contributing at Chimoney/Iaas. Before you contribute, please be sure to check out our Code of Conduct and Contribution Guide. For support, discussion, and connecting with other contributors, join us on Discord!






