Deploy UDS Core onto a Kubernetes Cluster
Ingredients
Recipe
Step 1. Deploy a k3s cluster with UDS Core installed using the UDS CLI. The UDS CLI will invoke k3d to deploy a k3s cluster.
uds deploy k3d-core-demo:latest
When prompted, enter y to deploy the UDS Core bundle. When the command finishes, you should see output similar to below.
2026-08-22 22:42:32 INF running health checks chart=uds-portal
Connect Command | Description
zarf connect keycloak | Directly connect to the Keycloak HTTP service
zarf connect alertmanager | Directly connect to the Alertmanager HTTP service
zarf connect prometheus | Directly connect to the Prometheus HTTP service
Step 2. To verify all UDS Core pods are working, run the command below. NOTE: There should be no output.
uds zarf tools kubectl get pods -A --no-headers | grep -Ev '(Running|Completed)'
Step 3. If they are not already in your /etc/hosts file, add DNS entries for each of the UDS Core services you just deployed.
echo "127.0.0.1 sso.uds.dev" | sudo tee -a /etc/hosts
echo "127.0.0.1 portal.uds.dev" | sudo tee -a /etc/hosts
echo "127.0.0.1 grafana.uds.dev" | sudo tee -a /etc/hosts
echo "127.0.0.1 keycloak.uds.dev" | sudo tee -a /etc/hosts
If you completed this recipe using WSL, make sure to also add the DNS entries to your Windows host. NOTE: this will require opening a Terminal window as an administrator.
powershell_ise.exe C:\Windows\System32\drivers\etc\hosts
127.0.0.1 sso.uds.dev
127.0.0.1 portal.uds.dev
127.0.0.1 grafana.admin.uds.dev
127.0.0.1 keycloak.admin.uds.dev
Step 4. Connect to Keycloak so you can create an administrator account (click the link when prompted).
zarf connect keycloak
Troubleshooting
Injecting records for hostAliases
If you're doing this in WSL and it hangs at Injecting records for hostAliases (incl. host.k3d.internal) and for 2 network members into CoreDNS configmap..., try updating WSL to the latest version.
wsl --update
Performing Helm install chart=falco
If it hangs at performing Helm install chart=falco, it may be because your kernel's fs.inotify.max_user_instances limit is too low. To investigate this, first check the status of your Falco pods.
uds zarf tools kubectl get pods -n falco
If the status of any of your Falco pods are failing, check the logs.
uds zarf tools kubectl logs -n falco <pod_name>
If you see an error similar to below, check what the limit is by running cat /proc/sys/fs/inotify/max_user_instances.
Sun Aug 23 02:32:44 2026: Hostname value has been overridden via environment variable to: k3d-uds-server-0
Events detected: 0
Rule counts by severity:
Triggered rules by rule name:
Error: could not initialize inotify handler
To increase your fs.inotify.max_user_instances limit, use sysctl.
sudo sysctl -w fs.inotify.max_user_instances=8192
Cleaning Up
When you're done, use k3d to delete the k3s cluster created.
k3d cluster delete uds