Skip to content
Tiki

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

IAAS-K8S Deep Dive: Building Scalable Multi-Cloud Kubernetes Infrastructure with Pulumi and TypeScript

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:

ModeDescriptionCommand
Modern DeploymentUses automation and defaults for full environments.npm run deploy:modern
Custom OverridesUse custom config files.npm run deploy:custom
Shared DeploymentDeploy multiple tenants on shared clusters.npm run deploy:shared
Dedicated DeploymentCreate isolated environments per company.npm run deploy:dedicated

Project Structure

Screenshot 2025-10-13 at 11.31.22.png


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) or Hacktoberfest (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.ts modeled after AWS/GCP files.
  • Add azure/ folder with chart-config templates.
  • Update automation.ts and index.ts to 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!

Ready to send?

Download Tiki and make your first transfer in under 3 minutes. No hidden fees.

Get it on Google PlayDownload on the App Store
The Tiki app running on an iPhone