Install with Helm

skywalking-swck is the Helm chart for SWCK. One chart installs the operator and, behind a values flag, the custom metrics adapter. It is released from this repository at the same version as the operator it deploys, and the CRDs, the operator’s ClusterRole and the admission webhook configurations it ships are generated from the operator sources — they cannot drift from the operator binary.

The chart’s own reference — every value, with the reasoning behind each default — is chart/skywalking-swck/README.md.

Supported SkyWalking versions

Component Supported Recommended
OAP 10.4.0 and later 11.0.0
UI Horizon 1.0.0 and later Horizon 1.0.0
BanyanDB matched to the OAP – 0.11.x for OAP 11.0.0 0.11.0

These move together. OAP 11.0.0 accepts BanyanDB server API 0.11 only, and the Horizon UI reaches OAP over an admin host that arrived in 11.x, so an older OAP is not a combination the Horizon UI supports. An OAPServer below 10.4.0 is admitted with a warning rather than rejected – a cluster already running one keeps working.

The legacy Booster UI is not supported: apache/skywalking removed it in 11.0.0 and no longer builds an image for it.

Prerequisites

  • Kubernetes 1.21+

  • Helm 3.8+ (OCI registry support went GA in 3.8)

  • cert-manager, unless you turn the webhooks off. The operator’s admission webhooks and the Java agent injector are served over TLS, and the chart asks cert-manager for the certificate:

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.5/cert-manager.yaml
    kubectl wait --for=condition=Available -n cert-manager deployment --all --timeout=5m
    

Install

helm install skywalking-swck oci://docker.io/apache/skywalking-swck \
  --version 0.11.0-helm \
  --namespace skywalking-swck-system --create-namespace

The -helm suffix is not a typo — see Where the chart is published.

Then create an OAP cluster:

kubectl apply -f https://raw.githubusercontent.com/apache/skywalking-swck/master/operator/config/samples/default.yaml

and follow Deploy OAP server and UI from there.

Where the chart is published

One release publishes the same chart to two registries, and the operator as two different kinds of image.

Registry Artifact Coordinate at 0.11.0
Docker Hub combined image, both /manager and /adapter apache/skywalking-swck:0.11.0
Docker Hub chart apache/skywalking-swck:0.11.0-helm
GHCR operator image, /manager only ghcr.io/apache/skywalking-swck/operator:0.11.0
GHCR metrics adapter image, /adapter only ghcr.io/apache/skywalking-swck/metrics-adapter:0.11.0
GHCR chart ghcr.io/apache/skywalking-swck/helm/skywalking-swck:0.11.0
dist.apache.org chart tarball, signed and voted skywalking-swck-0.11.0.tgz

On Docker Hub the image and the chart share one repository, so they are told apart by tag — hence -helm. It is a SemVer pre-release, which means it sorts below 0.11.0 and is skipped by version ranges: always request it with an exact --version 0.11.0-helm.

Installing from GHCR needs two extra --sets, because the GHCR images carry one binary each and neither can serve both components:

helm install skywalking-swck oci://ghcr.io/apache/skywalking-swck/helm/skywalking-swck \
  --version 0.11.0 \
  --namespace skywalking-swck-system --create-namespace \
  --set operator.image.repository=ghcr.io/apache/skywalking-swck/operator \
  --set operator.image.tag=0.11.0

GHCR also carries a snapshot of every commit to master, tagged with the commit SHA and latest, with the chart at 0.0.0-<sha>.

The metrics adapter

Off by default, and it needs the address of a running OAP cluster — the chart refuses to render without one:

helm install skywalking-swck oci://docker.io/apache/skywalking-swck \
  --version 0.11.0-helm \
  --namespace skywalking-swck-system --create-namespace \
  --set adapter.enabled=true \
  --set adapter.oap.service.name=my-oap-oap \
  --set adapter.oap.service.namespace=observability

The operator names the Service it creates <OAPServer name>-oap, in the namespace of the CR. There is no default because a wrong address fails silently: the APIService reports Available whether or not the OAP it points at exists, so every HPA query just returns nothing.

The adapter also claims v1beta1.external.metrics.k8s.io, a cluster-wide singleton that only one external metrics provider can own — enabling it in a cluster that already runs prometheus-adapter or KEDA takes that API group away from them. See Custom metrics adapter.

Upgrade

helm upgrade skywalking-swck oci://docker.io/apache/skywalking-swck \
  --version <new version>-helm --namespace skywalking-swck-system

Helm does not upgrade CRDs. They live in the chart’s crds/ directory, which Helm installs on first install and then never touches — so an upgrade that adds a field to a custom resource leaves the cluster on the old schema. Apply them yourself:

helm show crds oci://docker.io/apache/skywalking-swck --version <new version>-helm \
  | kubectl apply --server-side --force-conflicts -f -

They are in crds/ rather than templates/ on purpose: resources in templates/ are deleted by helm uninstall, and deleting a CRD deletes every custom resource of that kind in the cluster with it.

Uninstall

helm uninstall skywalking-swck --namespace skywalking-swck-system

Your OAPServer, UI and other custom resources survive, because the CRDs do.

Or install with kustomize

The chart is not the only way in. operator/config is a kustomize bundle, it is what make -C operator install && make -C operator deploy applies, and the binary release ships it as config/operator-bundle.yaml and config/adapter-bundle.yaml. See Operator.