Overview¶
These guides assume a basic understanding of Kubernetes resources such as Pods, Deployments and Services. Use them to get familiar with our production clusters:
- Set up cluster access: install the tools, store your kubeconfig and switch contexts.
- Work with a cluster: browse with k9s, find the manifests and make controlled changes with kubectl.
To connect to private services such as PostgreSQL or Grafana, see private services via Tailscale.
Clusters and repositories¶
| Context | Repository | What it contains |
|---|---|---|
trackpac |
trackpac-ltd/k8s | Trackpac applications, ChirpStack, gateway management, monitoring and shared infrastructure. Includes practical oncall/ training sessions. |
connectiot |
connect-iot-bv/k3s-hetzner | Shared services such as Authentik, Harbor, Chatwoot and Zammad, plus monitoring and storage. |
bovisen-us |
trackpac-ltd/bovisen-chirpcloud | ChirpCloud infrastructure: ChirpStack, PostgreSQL, NATS, monitoring and storage. Includes MQTT integration and operations docs. |
These are separate clusters. A namespace named monitoring in one cluster is independent of monitoring in another. The downloadable kubeconfig uses the context names above; permissions come from your Authentik groups.
Repository layout¶
The general layout is:
cluster/ # Cluster configuration and node maintenance
ansible/ # Host provisioning and configuration
deployments/
<namespace>/
<application>/
README.md # Deployment instructions, where available
values.yaml # Helm configuration, where used
*.yaml # Kubernetes resources
For example, the platform configuration in trackpac lives in deployments/trackpac/trackpac-platform/, and Authentik configuration in connectiot lives in deployments/connectiot/authentik/.
Some namespaces keep the main application's Helm configuration directly in the namespace folder. For example, in bovisen-us, deployments/chirpstack/ contains the ChirpCloud chart configuration deployed into the chirpstack namespace; deployments/chirpstack/billing-sync/ contains an additional workload in that same namespace.
Check the manifest's metadata.namespace or the Helm instructions to confirm the namespace. A values.yaml is input to Helm; it is not a resource to apply with kubectl.