Quick Start
This quick start (15-30min) walks you through kubara's local test setup for evaluation purposes.
It is intended for local testing only, not for production use.
This guide supports Linux, macOS and WSL on Windows.
Prerequisites
Install kubara first via the installation guide, then make sure these tools are available on your host:
sudoprivileges for cloud-provider-kind- Docker
- helm
- kind
- cloud-provider-kind installed as a binary on your host, not as a container image
1. Create a GitOps repository
Create a new GitHub or GitLab repository with your own account. This repository will act as your GitOps repo and stores the desired state of your platform. If you want more background, see What is GitOps?.
We recommend making the repository public for the local evaluation flow. Otherwise you also need to create a Personal Access Token (PAT) for Argo CD:
- GitHub: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
- GitLab: https://docs.gitlab.com/user/profile/personal_access_tokens/
Run the remaining steps from inside that repository.
2. Generate the .env file
kubara init --prep --local
This creates the local evaluation .env template.
2026-06-11 12:37:42 INF ✓ copied prep file file=/Users/<user>/kubara-local/.gitignore
2026-06-11 12:37:42 INF Generated local-evaluation dotenv in path: /Users/<user>/kubara-local/.env
3. Update the Argo CD settings
Open the generated .env file and change:
ARGOCD_WIZARD_ACCOUNT_PASSWORDtomagic- the Argo CD repository URL to your GitOps repository URL
- if your repository is private, also add your PAT
4. Generate config.yaml
kubara init --local
This creates config.yaml. For this local flow you do not need to change it yet, but it is worth looking through once: it defines your cluster profile and the services Argo CD will manage for that cluster.
2026-06-11 12:39:00 INF ✓ copied prep file file=/Users/<user>/kubara-local/.gitignore
2026-06-11 12:39:00 INF Skipping dotenv creation. File exist: /Users/<user>/kubara-local/.env
2026-06-11 12:39:00 INF Generated local-evaluation config in path: /Users/<user>/kubara-local/config.yaml
5. Bootstrap the local cluster
Run the bootstrap command. It will do the following:
- creates a local
kindcluster namedtest-cluster - installs the required CRDs and namespaces
- installs and configures Argo CD
- installs OpenBao as the local secret engine (we highly recommend to use a managed service for this in a production environment)
- applies less strict defaults for local testing and generates local deployment values
- creates the placeholder Traefik
LoadBalancerservice - waits for you to start
cloud-provider-kindmanually so the local LoadBalancer IP can be assigned
After that, Argo CD takes over the ongoing deployments. kubara is a bootstrap and generation tool, not a runtime controller.
Run the bootstrapping:
kubara bootstrap --local test-cluster
Wait until you see this on the screen:
...
2026-06-11 12:39:53 INF Creating kind cluster cluster=test-cluster
2026-06-11 12:40:01 INF Connecting to the local Kubernetes cluster
2026-06-11 12:40:01 INF Creating local Traefik bootstrap namespace and placeholder LoadBalancer service
2026-06-11 12:40:01 INF Waiting for the local Traefik LoadBalancer IP
2026-06-11 12:40:01 INF
Now start cloud-provider-kind in another terminal with: sudo cloud-provider-kind
And then start cloud-provider-kind in another terminal:
sudo cloud-provider-kind
Cloud-Provider-Kind works by automatically allocating a local IP address in the range of your Docker network for each Service of type LoadBalancer. For example in the next steps you will see 172.18.0.3. It will most likely be different for your local environment.
kubara should then continue with the bootstrapping after just a couple seconds (If not look into the Troubleshooting section at the bottom of this page):
...
2026-06-11 12:41:17 INF Bootstrapping ArgoCD
2026-06-11 12:41:18 INF ArgoCD manifest applied successfully
2026-06-11 12:41:18 INF Waiting for ArgoCD components to be ready
2026-06-11 12:42:02 INF ArgoCD components are ready
2026-06-11 12:42:02 INF
🎉 Local kubara bootstrap complete!
📝 Next steps:
1. Commit and push all repository contents generated by kubara.
2. Ensure the Git repository is reachable by Argo CD.
If you did not provide both ARGOCD_GIT_USERNAME and ARGOCD_GIT_PAT_OR_PASSWORD, ensure the Git repository is public so Argo CD can pull it.
Argo CD should be reachable in a couple of minutes via:
https://172.18.0.3.traefik.me/argocd
You can otherwise immediately access the Argo CD UI via:
kubectl --kubeconfig .local/kind.kubeconfig port-forward svc/argocd-server -n argocd 8080:443
then open http://localhost:8080/argocd in your browser
Log in with:
wizard / magic
Other useful links:
- Portal: https://172.18.0.3.traefik.me
- OpenBao: https://openbao.172.18.0.3.traefik.me/ui login with root
2026-06-11 12:42:02 INF ArgoCD bootstrap completed successfully
6. What's next?
One more step and you should have a running platform in the next couple of minutes. Read the instructions in your terminal, they will look similar to the example in the section above but most likely with a different ip range.
They essentially give instructions to do the following:
- IMPORTANT: Commit and push all repository contents generated by kubara.
- Once more ensure the Git repository is reachable by Argo CD. If you did not provide both ARGOCD_GIT_USERNAME and ARGOCD_GIT_PAT_OR_PASSWORD, ensure the Git repository is public so Argo CD can pull it.
- Wait a few minutes until Argo CD syncs the applications from your repository or force a refresh via the UI.
- Connect to ArgoCD via port-forwarding and open http://localhost:8080/argocd
- Open Argo CD and check whether all apps become
HealthyandSynced. (Maybe force a refresh) - Open Argo CD Settings -> Repositories and check whether Argo can access your repository (is it public? is your pat correct?)
- Once the platform components are ready, open the exposed UIs through the local ingress host.
- You should be able to reach the kubara Developer Portal via
https://<your-ip>.traefik.me
If Argo CD cannot fetch your repository, double-check the repository URL and credentials in your .env. If you did not provide Git credentials, the repository must be public for this local evaluation flow.
7. Understanding the generated files
After the bootstrap finished, you will usually see three important areas in your repository:
managed-service-catalog/: the generated Helm charts and shared templates Argo CD uses for deploymentscustomer-service-catalog/: the cluster-specific values that describe what should run ontest-cluster.local/: local runtime artifacts used only for the evaluation environment
The .local/ directory is not part of your GitOps state. It only contains helper files for your local machine, for example:
kind.kubeconfig: kubeconfig for the localkindclusterkind-config.yaml: thekindcluster definition used during bootstrapgenerate.env: the environment snapshot kubara used for local generationopenbao/: temporary local Helm values for the OpenBao bootstrap stepexternal-secrets/: the generated localClusterSecretStoremanifest
You can inspect the local cluster with the dedicated kubeconfig:
kubectl --kubeconfig .local/kind.kubeconfig get pods -A
kubectl --kubeconfig .local/kind.kubeconfig get ingress -A
kubectl --kubeconfig .local/kind.kubeconfig get applications -n argocd
For more details about the directory and file structure have a look at the concept pages: - Overview of Core Concepts - What is a Catalog - How the local kind preset works - How to create your own Catalog - How to add an Application - How to add an AppSet
Troubleshooting
macOS + Colima
On macOS using Colima the bootstrapping might get stuck due to a combination of bugs in cloud-provider-kind and lima-guest-agent.
- If your bootstrap command doesn't proceed beyond this point:
2026-06-11 10:45:35 INF Creating local Traefik bootstrap namespace and placeholder LoadBalancer service 2026-06-11 10:45:35 INF Waiting for the local Traefik LoadBalancer IP - Restart
cloud-provider-kind - If the process still gets stuck, watch the
cloud-provider-kindterminal output. Repeat this step if needed. You should no longer see failing readiness checks like:I0611 10:51:09.391260 94008 proxy.go:342] unexpected error trying to get load balancer kindccm-6c8d6f6b98d6 readiness :Get "http://127.0.0.1:32810/ready": EOF I0611 10:51:10.390284 94008 proxy.go:342] unexpected error trying to get load balancer kindccm-6c8d6f6b98d6 readiness :Get "http://127.0.0.1:32810/ready": EOF I0611 10:51:11.393015 94008 proxy.go:342] unexpected error trying to get load balancer kindccm-6c8d6f6b98d6 readiness :Get "http://127.0.0.1:32810/ready": EOF I0611 10:51:12.393818 94008 proxy.go:342] unexpected error trying to get load balancer kindccm-6c8d6f6b98d6 readiness :Get "http://127.0.0.1:32810/ready": EOF - Otherwise restart
cloud-provider-kindagain
OpenBao only runs with in-memory
OpenBao runs with its dev mode for lax evaluation purposes. This causes the following:
- It only runs with an in-memory database and with a restart its pod, runtime or host system its database will be lost and you will have to rerun:
kubara bootstrap --local test-cluster - The instance is not secure and always unsealed
- The instances root token is not a random string but instead always
root
How to clean up your local environment
When you are done with the evaluation, remove the local cluster and stop cloud-provider-kind.
-
Removes the Kubernetes cluster itself:
kind delete cluster --name test-cluster -
Stop
cloud-provider-kindIf you started it in a separate terminal withsudo cloud-provider-kind, stop it there withCtrl+C.# in the terminal where cloud-provider-kind is running Ctrl+C
Optional: check whether the local LoadBalancer IP is still attached. Sometimes the LoadBalancer IP added by cloud-provider-kind
may still be present on the loopback device after cleanup. This is optional to fix and usually disappears after a reboot anyway.
Check whether the IP is still present:
ip addr show lo
If needed, remove it manually:
sudo ip addr del <your-ip>/32 dev lo
Check the loopback aliases:
ifconfig lo0
If needed, remove the alias manually:
sudo ifconfig lo0 -alias <your-ip>
Replace <your-ip> with the address you saw during bootstrap, for example 172.18.0.3.