This episode guides you through installing Flannel in a Kubernetes cluster via two official paths: the kube-flannel.yml manifest and the flannel/flannel Helm chart. Once installed, you verify the kube-flannel DaemonSet, the flannel.1 interface, and Pod connectivity between nodes.

In episode 2 you understood Flannel's architecture. Now it's time to practice: install Flannel on a real cluster. Flannel installation is famously easy, and this episode will prove it.
Episode 3 guides you through the two official installation paths: the kube-flannel.yml manifest for the direct kubectl approach, and the flannel/flannel Helm chart for a more structured approach. After that we verify the results from three sides: the DaemonSet, the network interface, and connectivity between nodes.
The official kube-flannel.yml manifest contains the ServiceAccount, ConfigMap, and DaemonSet that deploy flanneld to every node. This manifest is a single file and can be applied directly without additional configuration.
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.ymlThe kubectl apply -f kube-flannel.yml command above pulls the latest version directly from the official Flannel release. Make sure your cluster is ready as prepared in episode 0, especially the --pod-network-cidr=10.244.0.0/16 requirement.
Installation order matters with kubeadm: Flannel must be installed after kubeadm init but before nodes fully join, or as soon as possible after the control plane is up. On a single-node cluster, remove the control plane taint first so Pods can be scheduled:
kubectl taint nodes --all node-role.kubernetes.io/control-plane-After that, wait for all kube-flannel Pods to reach the Running state before deploying any workload.
For teams that already use Helm to manage their entire stack, Flannel provides an official chart in the flannel repository:
helm repo add flannel https://flannel-io.github.io/flannel/
helm repo update
helm install flannel flannel/flannel --namespace kube-flannel --create-namespaceThe helm install flannel flannel/flannel command deploys the same components as the manifest, but with values that can be overridden. This is more convenient for configuration that needs to be adjusted per cluster.
The most commonly overridden values are the pod CIDR, the image tag, and the backend. For example, to use the host-gw backend:
helm install flannel flannel/flannel \
--namespace kube-flannel --create-namespace \
--set net-conf.json.backend.type=host-gwHmm, the chart's values structure can differ between versions. The safest way is to inspect the chart values before overriding. What's certain is that the net-conf value will be passed to the same ConfigMap as in the manifest installation.
After installation, verification starts with the DaemonSet:
kubectl get ds -n kube-flannel
kubectl get pods -n kube-flannel -o wideThe kubectl get ds -n kube-flannel command should show kube-flannel-ds with a ready count equal to the number of nodes. Each kube-flannel Pod in the Running state means flanneld is active on that node.
The next step is verification at the host level. Go into one of the nodes and make sure the VXLAN interface is created:
ip -d link show flannel.1If the flannel.1 interface appears with the type vxlan, the default backend is active. You can also check the MTU that was computed automatically from here.
The last and most important verification: make sure Pods on different nodes can reach each other. Deploy a workload with several replicas, then test from one of the Pods:
kubectl create deployment nginx --image=nginx --replicas=2
kubectl get pods -o wide
kubectl exec -it <pod-1> -- curl <ip-pod-2>If the nginx response is received, the Flannel overlay network works. We will dissect the details of the packet flow inside this overlay in episode 4.
A cluster that already stands with a different CIDR, for example 192.168.0.0/16, needs its net-conf.json adjusted. Here's how: edit the ConfigMap then restart the DaemonSet:
kubectl -n kube-flannel edit cm kube-flannel-cfg
kubectl rollout restart ds/kube-flannel-ds -n kube-flannelChange the Network field to the Pod CIDR your cluster uses. The kubectl rollout restart ds/kube-flannel-ds command makes each node take a new lease from the adjusted pool.
Warning
Changing Network after the cluster is running does not fully change the IP addresses of existing Pods. Make this adjustment before large workloads are deployed, or be prepared to re-apply all Pods.
Episode 3 took you from zero to a cluster with live networking: installing Flannel via the manifest or Helm, verifying the DaemonSet and interface, then proving cross-node connectivity.
Key takeaways:
kube-flannel.yml manifest is the most direct installation path.flannel/flannel Helm chart gives you value control for a structured setup.In the next episode, episode 4, we will dissect the default VXLAN backend — how UDP encapsulation works on port 4789, the flannel.1 interface and FDB learning, VNI and port configuration, and the limitations of the 50-byte MTU overhead. This is the heart of the Flannel overlay network.