Skip to content

Instantly share code, notes, and snippets.

@janeczku
Last active March 12, 2025 12:29
Show Gist options
  • Save janeczku/ab5139791f28bfba1e0e03cfc2963ecf to your computer and use it in GitHub Desktop.
Save janeczku/ab5139791f28bfba1e0e03cfc2963ecf to your computer and use it in GitHub Desktop.
Multus CNI with k3s and RKE

Using Multus CNI in K3S

By default, K3S will run with flannel as the CNI and use custom directories to store CNI plugin binaries and config files(You can inspect the kubelet args K3S uses via journalctl -u k3s|grep cni-conf-dir). So you need to configure that properly When deploying Multus CNI.

For example given the official Multus manifests in https://github.com/intel/multus-cni/blob/36f2fd64e0965e639a0f1d17ab754f0130951aba/images/multus-daemonset.yml, the following changes are needed:

volumes:
  - name: cni
    hostPath:
      path: /var/lib/rancher/k3s/agent/etc/cni/net.d
  - name: cnibin
    hostPath:
      path: /var/lib/rancher/k3s/data/<replace-with-your-hash>/bin
containers:
  - name: kube-multus
    image: nfvpe/multus:v3.4.1
    command: ["/entrypoint.sh"]
    args:
      - "--multus-conf-file=auto"
      - "--cni-version=0.3.1"
      # Add the following arg
      - "--multus-kubeconfig-file-host=/var/lib/rancher/k3s/agent/etc/cni/net.d/multus.d/multus.kubeconfig"

Once Multus CNI is deployed properly it works as normal in K3S.

@jderose-net
Copy link

jderose-net commented Dec 3, 2024

@beefcheeks, thanks for your cni-symlinker service. after struggling mightily with file creation errors, applying your service followed by the multus-cni sample deployment worked great!

@beefcheeks
Copy link

@jderose-net you are welcome! I actually now patch it as an initContainer into the multus DaemonSet which eliminates the messiness of ordered dependencies. You can view my patch here.

@gytisgreitai
Copy link

Just an FYI that for latest K3s if you are using Helm charts you don't need any of this magic:

  • Deploy via helm with whereabouts as described here
  • don't forget to add specific paths to your NetworkAttachmentDefinition as described in the same url

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment