Skip to main content

Helm Charts Reference

Complete reference for Tiaki Helm charts configuration.

Repository

helm repo add tiaki https://charts.tiaki.dev
helm repo update

tiaki-control

The control plane chart deploys the Tiaki web UI, API server, and optionally an embedded PostgreSQL database.

Installation

helm install tiaki-control tiaki/tiaki-control \
--set config.adminToken=$(openssl rand -hex 32) \
--set postgresql.auth.password=$(openssl rand -hex 16) \
--namespace tiaki \
--create-namespace

Values

ParameterDescriptionDefault
replicaCountNumber of control plane replicas1
image.repositoryControl plane image repositorytiakidev/tiaki-server
image.tagImage tag (defaults to chart appVersion)""
image.pullPolicyImage pull policyIfNotPresent
config.adminTokenRequired Admin authentication token""
config.nodeEnvNode environmentproduction
config.portServer port3001
config.scanIntervalCron expression for scan frequency"0 */6 * * *"
config.smtp.hostSMTP server hostname""
config.smtp.portSMTP server port587
config.smtp.secureUse TLS for SMTPfalse
config.smtp.userSMTP username""
config.smtp.passwordSMTP password""
config.smtp.fromEmail sender address"tiaki@example.com"
config.anthropic.apiKeyAnthropic API key for AI features""
config.github.tokenGitHub token for API rate limits""
service.typeKubernetes service typeClusterIP
service.portService port3001
ingress.enabledEnable ingressfalse
ingress.classNameIngress class name""
ingress.hosts[0].hostHostnametiaki.local
ingress.tlsTLS configuration[]
postgresql.enabledDeploy embedded PostgreSQLtrue
postgresql.auth.usernamePostgreSQL usernametiaki
postgresql.auth.passwordPostgreSQL password""
postgresql.auth.databasePostgreSQL database nametiaki
postgresql.primary.persistence.sizePostgreSQL PVC size10Gi
externalDatabase.hostExternal PostgreSQL host""
externalDatabase.portExternal PostgreSQL port5432
externalDatabase.usernameExternal PostgreSQL usernametiaki
externalDatabase.passwordExternal PostgreSQL password""
externalDatabase.databaseExternal PostgreSQL databasetiaki
externalDatabase.sslModePostgreSQL SSL modeprefer
existingSecretUse existing secret for credentials""
resources.limits.cpuCPU limit1000m
resources.limits.memoryMemory limit1Gi
resources.requests.cpuCPU request250m
resources.requests.memoryMemory request512Mi

Examples

Production with External Database

# production-values.yaml
replicaCount: 2

config:
adminToken: "your-secure-token"
scanInterval: "0 */4 * * *" # Every 4 hours

smtp:
host: "smtp.sendgrid.net"
port: 587
secure: false
user: "apikey"
password: "your-sendgrid-api-key"
from: "tiaki@your-company.com"

anthropic:
apiKey: "sk-ant-..."

github:
token: "ghp_..."

postgresql:
enabled: false

externalDatabase:
host: "postgres.production.svc.cluster.local"
port: 5432
username: "tiaki"
password: "secure-password"
database: "tiaki_production"
sslMode: "require"

ingress:
enabled: true
className: "nginx"
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/proxy-body-size: "10m"
hosts:
- host: tiaki.your-company.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: tiaki-tls
hosts:
- tiaki.your-company.com

resources:
limits:
cpu: 2000m
memory: 2Gi
requests:
cpu: 500m
memory: 1Gi

Install:

helm install tiaki-control tiaki/tiaki-control \
-f production-values.yaml \
--namespace tiaki-production \
--create-namespace

Development with Embedded Database

# dev-values.yaml
config:
adminToken: "dev-token-123"
nodeEnv: "development"

postgresql:
enabled: true
auth:
password: "dev-password"
primary:
persistence:
size: 5Gi
resources:
limits:
cpu: 500m
memory: 512Mi

resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 100m
memory: 256Mi

tiaki-agent

The agent chart deploys the Kubernetes agent that monitors pods and reports updates.

Installation

helm install tiaki-agent tiaki/tiaki-agent \
--set config.controlUrl=http://tiaki-control:3001 \
--set config.apiKey=YOUR_API_KEY \
--namespace tiaki

Values

ParameterDescriptionDefault
replicaCountNumber of agent replicas1
image.repositoryAgent image repositorytiakidev/tiaki-agent-k8s
image.tagImage tag (defaults to chart appVersion)""
image.pullPolicyImage pull policyIfNotPresent
config.controlUrlRequired Control plane URL"http://tiaki-server:3001"
config.apiKeyRequired Agent API key from UI""
config.agentNameCustom agent name""
config.excludeNamespacesNamespaces to exclude from scanning[]
config.tlsSkipVerifySkip TLS verification (dev only)false
config.caCertPathPath to custom CA certificate""
registry.usernamePrivate registry username""
registry.passwordPrivate registry password""
trivy.enabledEnable Trivy vulnerability scanningfalse
trivy.minSeverityMinimum severity to report"HIGH"
existingSecretUse existing secret for credentials""
resources.limits.cpuCPU limit500m
resources.limits.memoryMemory limit512Mi
resources.requests.cpuCPU request100m
resources.requests.memoryMemory request128Mi

Examples

Production Agent with Trivy

# agent-production.yaml
config:
controlUrl: "https://tiaki.your-company.com"
apiKey: "your-api-key-from-ui"
agentName: "production-cluster"

excludeNamespaces:
- kube-system
- kube-public
- kube-node-lease
- cert-manager

registry:
username: "your-registry-user"
password: "your-registry-password"

trivy:
enabled: true
minSeverity: "MEDIUM"

resources:
limits:
cpu: 1000m
memory: 1Gi
requests:
cpu: 200m
memory: 256Mi

nodeSelector:
node-role.kubernetes.io/worker: "true"

tolerations:
- key: "workload"
operator: "Equal"
value: "monitoring"
effect: "NoSchedule"

Multiple Agents (Different Namespaces)

Deploy separate agents for different teams/namespaces:

# Team A agent - only scans team-a namespace
helm install tiaki-agent-team-a tiaki/tiaki-agent \
--set config.controlUrl=http://tiaki-control:3001 \
--set config.apiKey=TEAM_A_API_KEY \
--set config.agentName=team-a-agent \
--set 'config.excludeNamespaces={kube-system,kube-public,team-b,team-c}' \
--namespace tiaki

# Team B agent - only scans team-b namespace
helm install tiaki-agent-team-b tiaki/tiaki-agent \
--set config.controlUrl=http://tiaki-control:3001 \
--set config.apiKey=TEAM_B_API_KEY \
--set config.agentName=team-b-agent \
--set 'config.excludeNamespaces={kube-system,kube-public,team-a,team-c}' \
--namespace tiaki

Using Existing Secrets

For better security, create secrets manually and reference them:

# Create control plane secret
kubectl create secret generic tiaki-control-secret \
--from-literal=adminToken=$(openssl rand -hex 32) \
--from-literal=databaseUrl=postgresql://user:pass@host:5432/tiaki \
--from-literal=smtpPassword=your-smtp-password \
--from-literal=anthropicApiKey=sk-ant-... \
--from-literal=githubToken=ghp_... \
--namespace tiaki

# Create agent secret
kubectl create secret generic tiaki-agent-secret \
--from-literal=apiKey=your-api-key \
--from-literal=registryUsername=your-user \
--from-literal=registryPassword=your-pass \
--namespace tiaki

# Install with existing secrets
helm install tiaki-control tiaki/tiaki-control \
--set existingSecret=tiaki-control-secret \
--namespace tiaki

helm install tiaki-agent tiaki/tiaki-agent \
--set config.controlUrl=http://tiaki-control:3001 \
--set existingSecret=tiaki-agent-secret \
--namespace tiaki

Upgrading Charts

# Update repository
helm repo update

# Check available versions
helm search repo tiaki --versions

# Upgrade to latest version
helm upgrade tiaki-control tiaki/tiaki-control \
-f values.yaml \
--namespace tiaki

# Upgrade to specific version
helm upgrade tiaki-agent tiaki/tiaki-agent \
--version 1.2.3 \
--namespace tiaki

Uninstalling

# Uninstall releases
helm uninstall tiaki-agent -n tiaki
helm uninstall tiaki-control -n tiaki

# Clean up PVCs (WARNING: deletes all data)
kubectl delete pvc -l app.kubernetes.io/instance=tiaki-control -n tiaki

# Delete namespace
kubectl delete namespace tiaki

Chart Development

To test charts locally:

# Lint charts
helm lint charts/tiaki-agent
helm lint charts/tiaki-control

# Test template rendering
helm template tiaki-agent charts/tiaki-agent \
--set config.controlUrl=http://test:3001 \
--set config.apiKey=test-key \
--debug

# Dry-run installation
helm install tiaki-control charts/tiaki-control \
--set config.adminToken=test \
--set postgresql.auth.password=test \
--dry-run --debug

Support