Skip to content

Instantly share code, notes, and snippets.

@trozet
Created May 18, 2026 23:21
Show Gist options
  • Select an option

  • Save trozet/1726df4136e65cf3269174990e7c76a5 to your computer and use it in GitHub Desktop.

Select an option

Save trozet/1726df4136e65cf3269174990e7c76a5 to your computer and use it in GitHub Desktop.
Testing DPU Sim with no overlay
# 1. Prereqs
# need libvirt and libvirt-devel to build dpu-sim
# . `make build` in dpu-sim
# checkout https://github.com/trozet/ovn-kubernetes/tree/dpu-sim-no-overlay
# export dir vars
export OVN_KUBERNETES_PATH=~/go/src/github.com/ovn-org/ovn-kubernetes
export DPU_SIM_PATH=~/go/src/github.com/ovn-kubernetes/dpu-simulator
export KIND_EXPERIMENTAL_PROVIDER=docker
# 2. Deploy KIND with DPU Sim
pushd $DPU_SIM_PATH
./bin/dpu-sim --config config-kind-ovnk-offload.yaml --ovn-kubernetes-path "$OVN_KUBERNETES_PATH" --ovnk-mode values-only
# output:
#✓ Kind deployment complete!
#Your DPU simulation environment is ready:
# • Kind clusters are running
# • CNI is deployed and ready
#Useful commands:
# kind get clusters # List all clusters
# kubectl --kubeconfig kubeconfig/dpu-sim-host.kubeconfig get nodes
# kubectl --kubeconfig kubeconfig/dpu-sim-dpu.kubeconfig get nodes
#Kubeconfig directory: kubeconfig
#For more information, see README.md
#dpu-sim total time: 10m12.911s
# 3. Install OVNK on host cluster
### DPU sim assumes podman provider it looks like
### must use umanaged bgp (managed builds peering with k8s node ips and not dpu ips)
### use nosnat for now until snat is fixed upstream
pushd $OVN_KUBERNETES_PATH
./contrib/kind-helm.sh \
--deploy \
--cluster-name dpu-sim-host \
--kubeconfig "$DPU_SIM_PATH/kubeconfig/dpu-sim-host.kubeconfig" \
--dpu-mode host \
--network-segmentation-enable \
--multi-network-enable \
--route-advertisements-enable \
--no-overlay-enable \
--advertise-default-network \
--extra-values "$DPU_SIM_PATH/kubeconfig/helm-values/dpu-sim-host-ovn-kubernetes-dpu-host-values.yaml"
popd
#regenerate host values if needed (optional)
./bin/dpu-sim ovnk values --config config-kind-ovnk-offload.yaml --cluster dpu-sim-host
#4. Generate DPU host access artifacts
./bin/dpu-sim ovnk host-access --config config-kind-ovnk-offload.yaml
./bin/dpu-sim ovnk values --config config-kind-ovnk-offload.yaml --cluster dpu-sim-dpu --require-host-credentials
#5. Install OVN-Kubernetes and FRR-K8S on DPU cluster
source "$DPU_SIM_PATH/kubeconfig/helm-values/dpu-sim-dpu-frr-k8s.env"
pushd $OVN_KUBERNETES_PATH
./contrib/kind-helm.sh \
--deploy \
--cluster-name dpu-sim-dpu \
--kubeconfig "$DPU_SIM_PATH/kubeconfig/dpu-sim-dpu.kubeconfig" \
--dpu-mode dpu \
--multi-network-enable \
--network-segmentation-enable \
--route-advertisements-enable \
--no-overlay-enable \
--advertise-default-network \
--extra-values "$DPU_SIM_PATH/kubeconfig/helm-values/dpu-sim-dpu-ovn-kubernetes-dpu-values.yaml" \
--frr-k8s-host-kubeconfig "$FRR_K8S_HOST_KUBECONFIG" \
--frr-k8s-remote-kubeconfig "$FRR_K8S_REMOTE_KUBECONFIG" \
--frr-k8s-remote-node-map "$FRR_K8S_REMOTE_NODE_MAP" \
popd
popd
# Example files
trozet@fedora:~$ cat ~/udn_namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: udn-test
labels:
k8s.ovn.org/primary-user-defined-network: ""
k8s.ovn.org/user-defined-primary-network: ""
trozet@fedora:~$ cat ~/cudn.yaml
apiVersion: k8s.ovn.org/v1
kind: ClusterUserDefinedNetwork
metadata:
name: l3-primary
labels:
bgp: enabled
annotations:
k8s.v1.cni.cncf.io/resourceName: dpusim.io/vf
spec:
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: In
values:
- udn-test
- udn-test2
#matchLabels:
#kubernetes.io/metadata.name: udn-test
network:
topology: Layer3
layer3:
role: Primary
subnets:
- cidr: 10.20.0.0/16
transport: NoOverlay
noOverlay:
outboundSNAT: "Disabled"
routing: "Unmanaged"
trozet@fedora:~$ cat ~/ra.yaml
apiVersion: k8s.ovn.org/v1
kind: RouteAdvertisements
metadata:
name: trozet-cudn
spec:
nodeSelector: {}
frrConfigurationSelector: {}
networkSelectors:
- networkSelectionType: ClusterUserDefinedNetworks
clusterUserDefinedNetworkSelector:
networkSelector:
matchLabels:
bgp: "enabled"
advertisements:
- "PodNetwork"
trozet@fedora:~$ cat ~/basic_udn-dpu-sim.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: client
namespace: udn-test
labels:
pod-name: client
#role: webserver
#app: spk-coredns
#annotations:
#k8s.v1.cni.cncf.io/networks: l3-secondary
spec:
#hostNetwork: true
containers:
- name: client
image: arunvelsriram/utils
#command:
# - /sbin/init
command: [ "/bin/bash", "-c", "--" ]
args: [ "while true; do sleep 3000000; done;" ]
imagePullPolicy: IfNotPresent
ports:
- name: dns-tcp
containerPort: 53
protocol: TCP
- name: dns-udp
containerPort: 9999
protocol: UDP
# securityContext:
#sysctls:
#- name: net.ipv6.route.max_size
#value: 2048
# securityContext:
# sysctls:
# - name: net.ipv4.tcp_sack
resources:
requests:
dpusim.io/vf: "2"
limits:
dpusim.io/vf: "2"
trozet@fedora:~$ cat ~/basic2_udn-dpu-sim.yaml
---
apiVersion: v1
kind: Pod
metadata:
namespace: udn-test
name: server
labels:
# testid: svc-proxy-terminating-7ef38e00-7f11-45ed-b410-8a8d88f430a3
pod-name: server2
spec:
#hostNetwork: true
containers:
- name: server
image: python
#command:
# - /sbin/init
command: [ "/bin/bash", "-c", "--" ]
args: [ "while true; do sleep 3000000; done;" ]
resources:
requests:
dpusim.io/vf: "2"
limits:
dpusim.io/vf: "2"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment