knext

Deploy on Azure Kubernetes Service (AKS)

Run knext on AKS with Azure Blob Storage (or MinIO) for assets, Azure Cache for Redis, and ACR.

knext runs on any Kubernetes cluster with Knative Serving, including AKS. The general control-plane install is on Operator & the NextApp CRD; the prerequisites and config walkthrough are in Getting started. This page covers only the Azure-specific pieces.

Not yet validated on a live AKS cluster. This guide is a documented procedure, not a verified run — verify it in your own environment. Treat the commands below as a starting point and confirm against your cluster.

1 · Create the cluster

az aks create \
  --resource-group <rg> \
  --name <cluster-name> \
  --node-count 2 \
  --generate-ssh-keys

az aks get-credentials --resource-group <rg> --name <cluster-name>

knext itself needs no persistent volume — its compile cache is baked into the image. Stateful components you run alongside it (Postgres, Redis) need a StorageClass that provisions writable volumes. AKS ships the Azure Disk CSI driver as the managed-csi StorageClass:

kubectl get storageclass managed-csi

2 · Install Knative, Kourier, cert-manager, and the operator

Follow Operator & the NextApp CRD for the one-command bundle install. The prerequisites — Knative Serving + Kourier, cert-manager, and a StorageClass — are listed in Getting started. The bundle ships a config-network ConfigMap that pins the Kourier ingress-class; apply it with kubectl apply --server-side so it merges into Knative Serving's own ConfigMap.

3 · Storage — Azure Blob or MinIO

knext storage accepts gcs, s3, minio, and azure. See Multi-cloud deploy for the supported providers. On AKS, use one of:

  • Azure Blob Storage: provider: 'azure', with bucket set to the blob container name. knext uploads through the az CLI, so az must be installed and authenticated in your build environment (for example az login and AZURE_STORAGE_ACCOUNT). publicUrl is the public URL the container is served from.
  • Self-hosted MinIO (S3-API, runs in-cluster): provider: 'minio' with endpoint pointing at the in-cluster MinIO Service.
  • An S3-compatible gateway in front of object storage: provider: 's3' with endpoint set to that gateway.

The example below uses self-hosted MinIO.

4 · Cache — Azure Cache for Redis

ISR / data cache uses Redis (cache.provider: 'redis'). Point cache.url at an Azure Cache for Redis instance (or a self-hosted Redis Service). cache.url is required when the provider is redis.

5 · Registry — ACR

Push the app image to Azure Container Registry, e.g. <registry>.azurecr.io/acme. Attach ACR to the cluster (az aks update --attach-acr) so nodes can pull. The operator rejects any image that is not digest-pinned (@sha256:…); knext deploy resolves the digest automatically.

6 · Complete knext.config.ts

knext.config.ts
import type { KnativeNextConfig } from '@getknext/core';

const config: KnativeNextConfig = {
  name: 'acme',
  registry: '<registry>.azurecr.io/acme',

  storage: {
    provider: 'minio', // self-hosted MinIO (S3-API). Use 'azure' for Azure Blob.
    bucket: 'acme-assets',
    endpoint: 'http://minio.minio.svc.cluster.local:9000',
    publicUrl: 'https://assets.example.com/acme-assets',
    accessKey: process.env.MINIO_ACCESS_KEY,
    secretKey: process.env.MINIO_SECRET_KEY,
  },

  cache: {
    provider: 'redis',
    url: process.env.REDIS_URL || 'rediss://<name>.redis.cache.windows.net:6380',
    keyPrefix: 'acme',
  },

  scaling: { minScale: 0, maxScale: 20 }, // minScale 0 = scale to zero
};

export default config;

If your Redis endpoint requires TLS (Azure Cache for Redis does, on port 6380), set cache.tls: true alongside the rediss:// URL.

7 · Deploy

knext deploy --registry <registry>.azurecr.io/acme

knext deploy builds the standalone image, pushes it (resolving the digest), and applies the NextApp CR; the operator reconciles it into a scale-to-zero Knative Service. Verify the resolved URL with kubectl get ksvc acme -o jsonpath='{.status.url}'.

On this page