Time for hands-on practice: you will deploy OpenClaw to your Kubernetes cluster with helm, do the initial configuration, verify all components, then run a sample application that uses OpenClaw policies from the previous episodes.

Welcome to episode 3 of the Learn OpenClaw series! In episode 2 you understood the architecture: the control plane that decides, the data plane that executes, and the policy engine that evaluates. Now you'll bring that theory to life on the cluster you created in episode 0.
This episode contains installation steps that must be run in sequence. Starting with adding the helm repository, deploying OpenClaw, doing the initial configuration, verifying components, and running a sample application. If a step fails, the troubleshooting section at the end of the episode will help.
Make sure your episode 0 environment is still alive. Check the cluster status and the active context:
kubectl get nodes
kubectl config current-contextI recommend creating a separate namespace for OpenClaw, e.g. openclaw-system, so its components stay neatly grouped:
kubectl create namespace openclaw-systemOpenClaw is distributed as a Helm chart. First, add its official repository and update the index:
helm repo add openclaw https://charts.openclaw.example
helm repo updateInfo
The repository URL above is a placeholder. Make sure you use the official OpenClaw helm repository URL listed in the documentation at the time this episode was written — never copy a repo from an untrusted source.
Once the repository is ready, install the chart into the openclaw-system namespace, then check the release status and the Pods that were created:
helm install openclaw openclaw/openclaw{:bash} \
--namespace openclaw-system \
--create-namespaceHelm will create all the resources: CRDs for policies, the control plane controller, and the data plane daemonset. Wait a moment until all Pods have a Running or Completed status. If any is in CrashLoopBackOff, note the Pod name — we'll cover it in the troubleshooting section.
After installation, there are a few configuration values you'll typically adjust: data plane mode (for example CNI integration), default values for mTLS, and logging level. Configuration is stored as Helm values and can be viewed first:
helm get values openclaw --namespace openclaw-systemFor light customization, save the values in a values.yaml file and upgrade the release:
dataPlane:
mode: envoy
logging:
level: info
policyEngine:
cache:
enabled: true
size: "512Mi"helm upgrade openclaw openclaw/openclaw{:bash} \
--namespace openclaw-system \
-f values.yamlGet into the habit of using helm upgrade with a values.yaml file from the start. Configuration recorded in a file is far easier to audit than repeated --set flags.
Verification is the bridge between "installed" and "working". Check three things: CRDs are registered, the controller is running, and the data plane is ready.
kubectl get crds | grep openclawYou should see CRDs like policies.openclaw.io and gateways.openclaw.io. Then make sure the control plane controller is healthy:
kubectl get deploy -n openclaw-system
kubectl logs -n openclaw-system -l app=openclaw-control-plane --tail=50Clean logs indicate the controller has successfully connected to the Kubernetes API and is ready to watch for policy changes.
The most satisfying part: running an application protected by OpenClaw. OpenClaw typically provides an openclaw-sample chart containing two simple services, e.g. web and api, complete with default policies:
helm install openclaw-sample openclaw/openclaw-sample{:bash} \
--namespace sampleOnce the application is alive, verify the services and policies that were created:
kubectl get svc -n sample
kubectl get policies -n sampleNow test communication between services. Run a temporary Pod that can send requests to api:
kubectl run -it --rm debug --image=curlimages/curl --namespace sample -- sh
curl http://api:8080/healthzIf the default policy allows it, you'll get a successful response. If you get 403, the policy is rejecting — and that's actually proof the policy engine is working.
Some of the most common issues during setup:
kubectl describe pod <name> -n openclaw-system and look at the events at the bottom.kubectl describe policy <name> and compare the status with your expectations.Warning
Always check the step order when troubleshooting: helm installation, CRD registration, controller health, then data plane. A problem in an earlier step almost always causes symptoms in later steps.
In episode 3 you successfully deployed OpenClaw to your cluster with helm, adjusted the initial configuration through values.yaml, verified the CRDs, controller, and data plane, and ran a sample application protected by policy for the first time.
Key takeaways:
openclaw-system.helm upgrade with a values.yaml file, not repeated --set flags.In the next episode, episode 4, we'll write your first network policy and traffic rules: defining inbound and outbound policies, doing layer 7 routing and request filtering, and understanding priority, scope, and matching rules. This is the episode where OpenClaw starts truly managing traffic.