Manage your K3s homelab Kubernetes resources with Pulumi, TypeScript, and Bun.
- Pulumi CLI
- Bun (latest)
- Access to your K3s cluster
kubectlconfigured with cluster access
pulumi-k3s-homelab/
├── Pulumi.yaml # Pulumi project config
├── package.json # Bun dependencies
├── bun.lock # Bun lockfile (committed)
├── tsconfig.json # TypeScript config
├── README.md
├── src/ # TypeScript source files
│ ├── index.ts # Main entry point
│ ├── config.ts # Pulumi configuration
│ ├── namespaces.ts # Namespace resources + types
│ ├── storage.ts # PVC resources + types
│ ├── postgres.ts # Postgres resources + types
│ ├── valkey.ts # Valkey resources + types
│ └── dashboard.ts # Dashboard resources + types
└── dist/ # Bundled JavaScript (generated)
cd pulumi-k3s-homelab
bun installCreate a new stack and configure it:
pulumi stack init dev
pulumi config set kubeconfig --path ~/.kube/configpulumi config set --secret postgresPassword your-password
pulumi config set --secret postgresDevPassword your-dev-password
pulumi config set --secret valkeyPassword your-valkey-password
pulumi config set --secret valkeyDevPassword your-valkey-dev-passwordIf not set, default passwords will be used (matching your current deployment).
bun run build
pulumi uppulumi destroybun install # Install dependencies
bun run build # Bundle TypeScript for Pulumi
bun run watch # Watch mode for development
pulumi up # Deploy to cluster
pulumi destroy # Remove all resources