Skip to main content

Kubernetes Deployment

How UIS deploys and manages services on your Kubernetes cluster.

How it Works

When you run ./uis deploy <service>, the provision host:

  1. Looks up the service's Ansible playbook
  2. Checks dependencies (e.g., PostgreSQL must be running before pgAdmin)
  3. Runs the playbook, which uses Helm and/or kubectl to deploy
  4. Verifies the deployment is healthy

All playbooks, Helm charts, and manifests are baked into the provision host container image.

Deploying Services

# Deploy a single service
./uis deploy postgresql

# Deploy a full package (deploys all services in order)
./uis stack install observability

# List all services and their status
./uis list

# Remove a service
./uis undeploy postgresql

Autostart Configuration

You can configure services to deploy automatically when the cluster is built:

# Enable a service for autostart
./uis enable prometheus

# Disable autostart
./uis disable prometheus

# See which services are enabled
./uis list-enabled

Service Categories

Services are organized into packages by function:

CategoryServices
ObservabilityPrometheus, Grafana, Loki, Tempo, OTel Collector
AIOpenWebUI, LiteLLM, Ollama, Tika, Qdrant
AnalyticsSpark, JupyterHub, Unity Catalog
IdentityAuthentik
DatabasesPostgreSQL, MySQL, MongoDB, Redis, Elasticsearch
ManagementArgoCD, pgAdmin, RedisInsight, Nginx, Whoami
NetworkingTailscale, Cloudflare Tunnels
IntegrationRabbitMQ, Gravitee

See the full services list for cloud equivalents and deploy commands.

Service Dependencies

Some services require others to be running first. UIS warns you if dependencies are missing:

ServiceRequires
AuthentikPostgreSQL, Redis
OpenWebUIPostgreSQL
LiteLLMPostgreSQL
Unity CatalogPostgreSQL
pgAdminPostgreSQL
RedisInsightRedis
GrafanaPrometheus, Loki, Tempo (for full functionality)

Accessing Services

After deployment, services are available at *.localhost URLs:

# Check what's deployed
./uis list

# Access in your browser
http://grafana.localhost
http://authentik.localhost
http://openwebui.localhost

For external access, see Tailscale and Cloudflare Tunnels.

Debugging Deployments

# Open a shell in the provision host
./uis shell

# Check pod status
kubectl get pods -A

# View logs for a service
kubectl logs -n default -l app=grafana --tail=50

# Describe a failing pod
kubectl describe pod -n default <pod-name>

# Interactive cluster dashboard
k9s