Each recipe adds to the command Access › Clusters gives you. <org> is your organisation id and prod-eu-1 your cluster’s name, both shown on that screen. Pass ids with --set-string (and quote them in YAML), so an id made of digits stays text.
Relay only
When your cluster may not send UDP to any address, every session goes through our TURN relay instead:
helm install ... --set relayOnly=true
A mirror registry
When your nodes cannot pull from ghcr.io, copy both images with their digests, then point the chart at your registry’s host (the paths stay infinitehaiku/poet and infinitehaiku/muse-k8s):
helm template x oci://ghcr.io/infinitehaiku/charts/infinite-haiku --version <version> --set-string organisation=x,poetClusterId=x,clusterName=x,shibuyaToken=x |
grep -o 'ghcr.io/[^" ]*@sha256:[0-9a-f]*' | sort -u | while read -r ref; do
name=${ref#ghcr.io/}; skopeo copy --all --preserve-digests "docker://$ref" "docker://registry.acme.internal/${name%@*}:<version>"; done
helm install ... --set image.registry=registry.acme.internal
A private mirror that needs credentials: create a pull Secret in the namespace and name it (a list of Secret names):
helm install ... --set image.registry=registry.acme.internal --set 'image.pullSecrets={regcred}'
A StorageClass
The Poet’s volume uses your default StorageClass; name another one:
helm install ... --set storageClass=fast-ssd
The volume is fixed at 10Gi for now.
Delete the data on uninstall
By default the Poet’s volume stays after helm uninstall (deleting the namespace removes it). To have helm uninstall delete it too (Kubernetes 1.27 or later):
helm install ... --set deleteDataOnUninstall=true
Argo CD (coming)
Argo CD renders charts with helm template, where the chart cannot read back the two values it generates at install, so they would change on every sync. A chart value for a Secret you create yourself (existingSecret) is coming and makes Argo CD work; until then, use Helm or Flux.
Flux
Flux reads the token from a Secret you create once, out of band; nothing secret goes in Git:
kubectl create namespace infinite-haiku
kubectl -n infinite-haiku create secret generic ih-shibuya-token --from-file=shibuyaToken="$HOME/ih-token-prod-eu-1"
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata: { name: infinite-haiku, namespace: infinite-haiku }
spec: { type: oci, url: oci://ghcr.io/infinitehaiku/charts, interval: 1h }
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata: { name: infinite-haiku, namespace: infinite-haiku }
spec:
interval: 1h
chart:
spec: { chart: infinite-haiku, version: <version>, sourceRef: { kind: HelmRepository, name: infinite-haiku } }
values: { organisation: "<org>", poetClusterId: "prod-eu-1", clusterName: "prod-eu-1" }
valuesFrom:
- { kind: Secret, name: ih-shibuya-token, valuesKey: shibuyaToken, targetPath: shibuyaToken }
Upgrade or change a setting
Your settings and the token stay; pass only what changes:
helm upgrade infinite-haiku oci://ghcr.io/infinitehaiku/charts/infinite-haiku --version <new version> -n infinite-haiku --reuse-values
helm upgrade infinite-haiku oci://ghcr.io/infinitehaiku/charts/infinite-haiku --version <version> -n infinite-haiku --reuse-values --set relayOnly=true # one setting
OpenTelemetry Collector to the Poet
A Collector in a labelled namespace (OpenTelemetry) forwards what your applications send it:
exporters:
otlphttp/infinite-haiku:
endpoint: http://ih-poet-intake.infinite-haiku:4318
headers:
Authorization: "Bearer ${env:IH_INTAKE_TOKEN}"
service:
pipelines:
traces: {receivers: [otlp], exporters: [otlphttp/infinite-haiku]}
metrics: {receivers: [otlp], exporters: [otlphttp/infinite-haiku]}
logs: {receivers: [otlp], exporters: [otlphttp/infinite-haiku]}
Several clusters
Connect each cluster on its own in Access › Clusters: each gets its own name, token and command, and shows up on its own on our site. One cluster’s token never serves another; revoking it removes only that cluster.
Clusters that need no datastore of their own send to an existing Poet: one Poet keeps the data of all of them.