Skip to content

Helm Chart

ArtifactHub
Terminal window
helm repo add nora https://getnora-io.github.io/helm-charts
helm repo update
helm install nora nora/nora -n nora-system --create-namespace

This deploys NORA with local storage (10 Gi PVC), GC enabled, and ClusterIP service on port 4000.

KeyDefaultDescription
image.repositoryghcr.io/getnora-io/noraContainer image
image.tag"" (Chart appVersion)Image tag override
image.pullPolicyIfNotPresentPull policy
imagePullSecrets[]Registry pull secrets
KeyDefaultDescription
service.typeClusterIPService type
service.port4000Service port
ingress.enabledfalseEnable Ingress
ingress.className""Ingress class
ingress.annotations{}Ingress annotations
ingress.hostssee values.yamlHost rules
ingress.tls[]TLS configuration
KeyDefaultDescription
persistence.enabledtrueEnable PVC
persistence.size10GiVolume size
persistence.storageClass""StorageClass (empty = default)
persistence.accessModes[ReadWriteOnce]PVC access modes
KeyDefaultDescription
config.server.host0.0.0.0Bind address
config.server.port4000Listen port
config.storage.modelocalStorage backend: local or s3
config.storage.path/data/storageData path
config.docker.proxy_timeout60Docker upstream timeout (s)
config.docker.upstreams[]Docker upstream registries
config.gc.enabledtrueEnable garbage collection
config.gc.interval86400GC interval (s)
config.retention.enabledfalseEnable retention policies
config.retention.interval86400Retention interval (s)
KeyDefaultDescription
existingSecret""Existing Secret with secrets.toml key (for private registry credentials)
extraEnv[]Extra env vars — native Kubernetes env spec
extraEnvFrom[]Extra envFrom entries (secretRef / configMapRef)
KeyDefaultDescription
resources.requests.cpu100mCPU request
resources.requests.memory128MiMemory request
resources.limits.memory512MiMemory limit
nodeSelector{}Node selector
tolerations[]Tolerations
affinity{}Affinity rules
KeyDefaultDescription
podSecurityContext.fsGroup1000Pod filesystem group
securityContext.runAsNonRoottrueNon-root enforcement
securityContext.runAsUser1000Container UID
securityContext.readOnlyRootFilesystemtrueRead-only root FS

extraEnv:
- name: NORA_AUTH_ENABLED
value: "true"
- name: NORA_RATE_LIMIT_ENABLED
value: "false"
extraEnv:
- name: NORA_STORAGE_S3_ACCESS_KEY
valueFrom:
secretKeyRef:
name: s3-credentials
key: access-key
- name: NORA_STORAGE_S3_SECRET_KEY
valueFrom:
secretKeyRef:
name: s3-credentials
key: secret-key

Inject all keys from a Secret as env vars:

extraEnvFrom:
- secretRef:
name: nora-all-secrets

4. existingSecret for private registry credentials

Section titled “4. existingSecret for private registry credentials”

Keep Docker upstream credentials out of values.yaml. Create a Secret with a secrets.toml key:

apiVersion: v1
kind: Secret
metadata:
name: nora-registry-creds
stringData:
secrets.toml: |
[[docker.upstreams]]
url = "https://private.registry.io"
auth = "user:token"

Then reference it:

existingSecret: nora-registry-creds

These upstreams merge with config.docker.upstreams. The Secret wins for duplicate URLs.

extraEnvFrom:
- configMapRef:
name: nora-feature-flags

ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
hosts:
- host: registry.example.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: nora-tls
hosts:
- registry.example.com

Use raw manifests — see Kubernetes examples.


config:
storage:
mode: s3
path: /data/storage # local cache path
extraEnv:
- name: NORA_STORAGE_S3_URL
value: "https://s3.amazonaws.com"
- name: NORA_STORAGE_BUCKET
value: "nora-registry"
- name: NORA_STORAGE_S3_REGION
value: "us-east-1"
- name: NORA_STORAGE_S3_ACCESS_KEY
valueFrom:
secretKeyRef:
name: s3-credentials
key: access-key
- name: NORA_STORAGE_S3_SECRET_KEY
valueFrom:
secretKeyRef:
name: s3-credentials
key: secret-key

Chart v0.1.9 replaces env and secrets with extraEnv and extraEnvFrom.

Before (v0.1.8):

env:
NORA_AUTH_ENABLED: "true"
secrets:
NORA_STORAGE_S3_SECRET_KEY: "my-key"

After (v0.1.9):

extraEnv:
- name: NORA_AUTH_ENABLED
value: "true"
- name: NORA_STORAGE_S3_SECRET_KEY
valueFrom:
secretKeyRef:
name: my-s3-secret
key: secret-key

Why: The old secrets map stored sensitive values in values.yaml — an anti-pattern for GitOps. extraEnv with secretKeyRef keeps secrets in Kubernetes Secrets where they belong.


Terminal window
helm uninstall nora -n nora-system