Skip to content

Frequently Asked Questions

Common questions and answers about LoKO.

LoKO (Local Kubernetes Oasis) is a Python CLI tool that simplifies local Kubernetes development with Kind. It provides:

  • One-command cluster creation
  • Automatic DNS and TLS configuration
  • Pre-configured workload catalog (databases, caches, etc.)
  • Local container registry
  • Comprehensive workload management

See Overview for details.


FeatureLoKOMinikubek3d
BaseKindVM/Dockerk3s in Docker
DNSAutomatic (dnsmasq)ManualManual
TLSAutomatic (cfssl + local trust install)ManualManual
RegistryBuilt-in (Zot)AddonManual
WorkloadsCatalog systemManualManual
ConfigSingle YAMLCLI flagsCLI flags

LoKO focuses on developer experience with minimal configuration.


Yes, LoKO requires Docker. On macOS:

  • Docker Desktop (recommended)
  • OrbStack (alternative)
  • Colima (alternative)

On Linux, Docker Engine is sufficient.


No. LoKO is designed for local development only. For production:

  • Use managed Kubernetes (GKE, EKS, AKS)
  • Use production-grade distributions (k8s, k3s, RKE)
  • Follow security best practices

Terminal window
# Using pip
pip install getloko
# Using uv (recommended)
uv tool install getloko
# Using pipx
pipx install getloko

See Installation Guide for details.


Required tools:

  • Docker - Container runtime
  • Git - Required for GitOps repo seeding
  • Kind - Kubernetes in Docker
  • Helm - Package manager
  • kubectl - Kubernetes CLI
  • cfssl - Certificate generation toolkit

Optional:

  • helmfile - Declarative Helm deployments

LoKO can help install missing tools:

Terminal window
loko check prerequisites

See Prerequisites for details.


Python 3.10 or later

Check your version:

Terminal window
python --version # Should be 3.10+

LoKO configuration lives in a YAML file, usually loko.yaml.

For existing environments, many runtime commands no longer require you to be in that directory. They resolve the target environment in this order:

  1. explicit --config / -c
  2. active environment from inventory
  3. local ./loko.yaml

Generate it with:

Terminal window
loko config generate

See Configuration Guide for details.


Yes! Each environment is independent:

Terminal window
# Create dev environment
loko env create -c loko-dev.yaml
# Create staging environment
loko env create -c loko-staging.yaml
# Activate one as current
loko activate dev
loko status
# Or target a specific config directly
loko status -c loko-staging.yaml

Use loko inventory list to see known environments and which one is active.


Edit loko.yaml:

workloads:
system:
- name: postgres
enabled: true
config:
values:
primary:
extendedConfiguration: |
max_connections = 500

See Workload Management for details.


LoKO runs a dedicated dnsmasq container that serves your local domain:

  1. LoKO generates dnsmasq host records from deployed workloads and system endpoints
  2. The dnsmasq container listens on network.dns-port on your host IP
  3. The OS resolver (for example /etc/resolver/dev.me on macOS) forwards *.dev.me queries to that dnsmasq endpoint
  4. dnsmasq resolves hostnames directly to your configured local IP

Example:

Terminal window
# Resolves to cluster
ping postgres.dev.me
curl https://app.dev.me

See Network & DNS for details.


Yes! Edit loko.yaml:

network:
domain: "local.dev" # Instead of dev.me

Then recreate:

Terminal window
loko env recreate

Why can’t I access services from other devices?

Section titled “Why can’t I access services from other devices?”

By default, LoKO is localhost-only. For network access:

  1. Enable tunnel (Cloudflare Tunnel):
tunnel:
enabled: true
token: "your-token"
  1. Or use hostPort for specific services

Try:

Terminal window
# Check DNS container and resolver state
loko dns status
# Check resolver
cat /etc/resolver/dev.me
# Run DNS diagnostic checks
loko config dns-check
# Recreate DNS
loko dns recreate

Terminal window
# Add PostgreSQL
loko workloads add postgres --now
# Connection details in .loko-secrets.txt
cat .loko-secrets.txt

See Deploy Database Tutorial for details.


Automatically generated credentials are saved to:

.loko-secrets.txt

Example:

=== postgres ===
POSTGRES_PASSWORD: randomly-generated-password

Yes. Define them as user workloads in loko.yaml and reference any extra Helm repositories under workloads.helm-repositories:

workloads:
helm-repositories:
- name: my-repo
url: https://charts.example.com/
user:
- name: my-app
enabled: true
config:
repo:
ref: my-repo
chart: my-chart
version: 1.0.0
values: {}

Terminal window
# Update catalog versions
loko catalog update
# Review changes
loko catalog update --dry-run
# Re-sync workloads with the updated catalog
loko workloads deploy postgres

Symptoms: loko env create fails

Solutions:

  1. Check Docker:
Terminal window
docker ps # Should work
  1. Check ports:
Terminal window
loko check ports
  1. Check existing clusters:
Terminal window
kind get clusters
kind delete cluster --name loko-dev-me
  1. Check logs:
Terminal window
loko --debug env create

Symptoms: loko workloads deploy fails

Solutions:

  1. Check cluster status:
Terminal window
loko status
  1. Check Helm:
Terminal window
helm list -A
  1. Check pod logs:
Terminal window
kubectl logs -n loko-workloads <pod-name>
  1. Re-deploy:
Terminal window
loko workloads deploy postgres

Symptoms: Ports 80/443/5453 conflict

Solutions:

  1. Find what’s using the port:
Terminal window
lsof -i :80
lsof -i :443
  1. Stop conflicting service:
Terminal window
# Example: Stop Apache
sudo apachectl stop

DNS runs in-cluster via an auto-selected DNS port — no host port conflict possible for DNS.


Symptoms: Cannot push to cr.dev.me

Solutions:

  1. Check registry is running:
Terminal window
loko status
kubectl get pods -n loko-components | grep registry
  1. Check Docker daemon.json:
{
"insecure-registries": ["cr.dev.me:5000"]
}
  1. Restart Docker after changing daemon.json

  2. Test registry:

Terminal window
docker pull alpine
docker tag alpine cr.dev.me:5000/alpine
docker push cr.dev.me:5000/alpine

See Registry Guide for details.


Terminal window
# Destroy cluster and remove loko.yaml
loko env clean --yes
# Start fresh
loko config generate

If you only want to remove the cluster but keep loko.yaml, use:

Terminal window
loko env destroy --force

Causes: Resource constraints, too many workloads

Solutions:

  1. Check resource usage:
Terminal window
loko status --verbose
  1. Reduce worker nodes:
cluster:
workers: 1 # Instead of 2-3
  1. Disable unused workloads:
Terminal window
loko workloads disable mysql
loko workloads disable postgres
loko workloads disable mongodb
  1. Increase Docker resources (Docker Desktop → Settings → Resources)

Causes: Image pulls, resource limits

Solutions:

  1. Enable registry mirror:
registry-mirror:
enabled: true
registries:
- docker.io
  1. Pre-pull images:
Terminal window
# Pulls images before deployment
loko workloads deploy --all

Limited support. LoKO is designed for local development, but you can:

Terminal window
# In CI pipeline
loko env create
loko workloads deploy --all
# Run tests
loko env destroy

Note: Requires Docker-in-Docker or similar setup.


Yes! LoKO has a plugin system:

# Create plugin package
from loko.plugins import CatalogProvider
class MyPlugin:
def get_catalog_extension(self):
return LokoCatalog(...)

Terminal window
# Backup configuration
cp loko.yaml loko.yaml.backup
cp -r ~/.loko ~/.loko.backup
# Backup secrets
cp .loko-secrets.txt .loko-secrets.txt.backup
# Backup persistent data (optional)
# Use Velero or similar tools

Limited support. Requirements:

  • WSL2 (Windows Subsystem for Linux)
  • Docker Desktop for Windows
  • Install LoKO inside WSL2

Not supported: Native Windows (PowerShell/CMD)



  1. Check existing issues
  2. Run with --debug:
Terminal window
loko --debug env create
  1. Create issue with:
    • LoKO version (loko version)
    • OS and Docker version
    • Full error message
    • Steps to reproduce

Contributions are welcome! You can help by:

See the Contributing Guide for details.


For issues specific to LoKO:

When reporting bugs, include:

  • LoKO version (loko --version)
  • Operating system and Docker version
  • Full error message or debug output (loko --debug <command>)
  • Steps to reproduce

We focus on LoKO-specific issues. For general Kubernetes questions, these resources may help:

For Helm chart and Helmfile configuration questions:

If you’re having trouble installing prerequisites (Docker, kubectl, etc.), refer to the official documentation: