saurabh3460/kwok-local-setup

★ 0Forks 0ShellGitHub ↗Compare

README

k3s + Argo CD + Karpenter (KWOK) Demo

Local GitOps demo environment with:

  • k3s
  • Argo CD
  • Karpenter (KWOK provider simulation mode)
  • guestbook demo workload

Argo CD apps in this setup:

  • kwok (KWOK controller + stages)
  • karpenter-kwok (Karpenter controller + CRDs)
  • karpenter-config (Karpenter NodePool + KWOKNodeClass)
  • guestbook (demo application)

What this setup proves

  • Argo CD manages kwok, karpenter-kwok, and guestbook applications
  • Argo CD explicitly manages NodePool and KWOKNodeClass via karpenter-config
  • Karpenter creates NodeClaim objects for pending pods
  • Simulated nodes appear (providerID starts with kwok://)
  • Workload pods schedule onto simulated capacity

Prerequisites

  • Linux host with Docker, kubectl, helm, curl, go
  • k3s and Argo CD already installed and healthy
  • Local KWOK controller image loaded into k3s containerd as:
    • docker.io/library/kwok-controller-local:v1.8.0

File layout

  • argocd/applications/kwok.yaml
  • argocd/applications/karpenter-kwok.yaml
  • argocd/applications/karpenter-config.yaml
  • argocd/applications/guestbook.yaml
  • argocd/applications/app-of-apps.yaml
  • manifests/karpenter/kwok-nodeclass.yaml
  • manifests/karpenter/nodepool.yaml
  • manifests/karpenter/kustomization.yaml
  • manifests/validation/inflate.yaml
  • scripts/bootstrap.sh
  • scripts/build-kwok-image.sh
  • scripts/verify.sh
  • scripts/cleanup.sh

Run

chmod +x scripts/*.sh
./scripts/build-kwok-image.sh
./scripts/bootstrap.sh
./scripts/verify.sh

Run via app-of-apps

Push this repo to Git first, then run:

Note: argocd/applications/app-of-apps.yaml is a template with REPLACE_WITH_YOUR_GIT_REPO_URL. Use the helper script below so the URL/revision are rendered correctly.

./scripts/bootstrap-app-of-apps.sh <your_git_repo_url> [git_revision]
./scripts/verify.sh

Example:

./scripts/bootstrap-app-of-apps.sh https://github.com/<org>/<repo>.git HEAD

Optional: Access Argo CD UI

kubectl -n argocd port-forward svc/argocd-server 8080:443
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d && echo

Open: https://localhost:8080 (user: admin)

Troubleshooting

kubectl -n argocd get applications
kubectl -n argocd describe application karpenter-kwok
kubectl -n kube-system get pods
kubectl -n kube-system logs deploy/karpenter --tail=200
kubectl get nodeclaims.karpenter.sh -o wide
kubectl get nodes -o wide
kubectl -n karpenter-demo get pods -o wide

Cleanup

./scripts/cleanup.sh

Contributors

saurabh3460

Issues