A declarative infrastructure repository that defines the entire Kasia platform and applications (Kaspa nodes, indexers, and supporting services) using GitOps principles. Every change to the cluster is described as code and managed through Argo CD.
- Single source of truth — Kubernetes objects, Helm values, and secrets (encrypted with SOPS) live in Git, giving a full audit trail.
- Declarative & repeatable — Desired state is captured in manifests; apply the same state to any cluster.
- Automated reconciliation — Argo CD continuously compares the cluster to Git and converges them.
- Safe collaboration — Pull requests, review, and history help avoid configuration drift and mistakes.
infrastructure/
├── app/ # Application layer (Kaspa node & indexer)
│ ├── indexer/ # Base + overlays for mainnet, next, testnet
│ └── node/ # Base + overlays for mainnet and testnet
└── plateform/ # Cluster-wide services
├── argocd/ # Argo CD installation & configuration
├── cert-manager/ # Certificate management with Cloudflare DNS
├── longhorn/ # Persistent storage (dashboard, auth)
├── system/ # Misc. system addons (e.g., reflector)
└── traefik/ # Ingress controller & TLS store
| Area | Tooling / Notes |
|---|---|
| GitOps controller | Argo CD using the “app-of-apps” pattern |
| Configuration | Native Kubernetes manifests + Kustomize overlays |
| Secret management | KSOPS with SOPS & AGE |
| Ingress & routing | Traefik with custom dashboards and middleware |
| Certificates | cert-manager issuing wildcard certs via Cloudflare DNS |
| Storage | Longhorn distributed block storage |
| Workloads | Kaspa kaspad nodes and Kasia indexers for mainnet/testnet |
- App-of-apps —
plateform/plateform.yamlandapp/app.yamlare Argo CDApplicationobjects that bootstrap the rest of the tree. - Kustomize overlays —
base/contains common manifests; environment overlays (mainnet,testnet,next) apply patches. - Secrets via KSOPS —
*.enc.yamlfiles are encrypted with SOPS/AGE and rendered through KSOPS at deploy time.
- Kubernetes cluster (v1.24+) with cluster-admin access
kubectl,kustomize(orkubectl kustomize), and the Argo CD CLI- SOPS and an AGE key with access to the encrypted secrets
- Optional:
helm,ksops, andargocdCLI installed locally
git clone https://github.com/K-Kluster/infrastructure.git
cd infrastructure
# Point SOPS to your AGE private key
export SOPS_AGE_KEY_FILE=~/.config/sops/age/keys.txtEncrypted files are under plateform/**/**/*.enc.yaml and plateform/argocd/github-repository.enc.yaml (paths may vary by overlay).
Ensure your AGE key can decrypt them, or replace with your own.
Apply the Argo CD installation and its config (including KSOPS):
kubectl apply -k plateform/argocdAfter the pods are ready, log in (either expose the service or port-forward):
argocd login <server>
# or, for a quick local session:
# kubectl -n argocd port-forward svc/argocd-server 8080:443
# argocd login localhost:8080 --insecureCreate the root Application that manages cluster services:
kubectl apply -f plateform/plateform.yamlThen sync the plateform application in the Argo CD UI/CLI. This deploys Traefik, cert-manager, Longhorn, and system components.
Apply the application-level root:
kubectl apply -f app/app.yamlArgo CD will create:
- node — Kaspa nodes with mainnet and testnet overlays
- indexer — Kasia indexer StatefulSets, each pointed at the corresponding Kaspa node
Use:
app/node/{mainnet,testnet}andapp/indexer/{mainnet,next,testnet}
for overlay-specific patches (service names, URLs, resources, etc.).
Update images or configuration by editing the respective manifest and committing to main.
- Argo CD continually reconciles the cluster to this repository.
- Secrets: update
*.enc.yamlwithsopsand commit. - Add new services under
plateform/orapp/and reference them from the appropriatekustomization.yaml.
- Fork the repo and create a feature branch.
- Modify manifests or overlays. Use
sopsfor any secret changes. - Validate locally with
kustomize build <path>. - Open a pull request describing the change.
- After merge, Argo CD syncs the cluster automatically.
Distributed under the ISC License. See LICENSE for details.
Happy GitOps! 🚀