Kubernetes Integration Flow#
This document explains how a pod specification with network attachment annotations triggers the CNI plugin through the Kubernetes networking stack.
Pod Configuration#
apiVersion: v1
kind: Pod
metadata:
name: network-workload
annotations:
# Refers to the same NetworkAttachmentDefinition (NAD) twice to attach two interfaces from the same resource (amd.com/nic: 2)
k8s.v1.cni.cncf.io/networks: amd-host-device-nad-nic, amd-host-device-nad-nic
spec:
containers:
- name: app
image: ubuntu:22.04
resources:
requests:
amd.com/nic: 2 # Requests AMD NIC resource
limits:
amd.com/nic: 2
Integration Flow#
The process involves four main phases:
1. Resource Allocation#
Pod Request → Scheduler → Device Plugin → NIC Assignment
Scheduler: Finds nodes with available
amd.com/nic
resourcesDevice Plugin: Allocates specific NIC device (e.g.,
0000:01:00.0
)Environment: Device ID passed to pod via
PCIDEVICE_AMD_COM_NIC_0
2. Network Setup Initiation#
Kubelet → Multus CNI (from /etc/cni/net.d) → Primary/Cluster Network + Secondary Networks
Kubelet creates container and network namespace
Multus is invoked first (highest priority config in
/etc/cni/net.d/
)Multus configures primary network through its delegate configuration
Multus then processes secondary network attachments from pod annotations
3. Multus Orchestration#
# NetworkAttachmentDefinition
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
name: amd-host-device-nad
annotations:
k8s.v1.cni.cncf.io/resourceName: amd.com/nic # Links to device resource
spec:
config: '{
"name": "amd-host-device-nad",
"cniVersion": "0.3.1",
"type": "amd-host-device" # Specifies CNI plugin to invoke
}'
Multus Process:
Reads
k8s.v1.cni.cncf.io/networks
annotation from podFetches corresponding NetworkAttachmentDefinition
Maps device allocation to CNI configuration using resource annotation
Invokes the CNI with device-specific parameters
4. AMD Host Device CNI Execution#
CNI Configuration:
{
"name": "amd-host-device-nad",
"cniVersion": "0.3.1",
"type": "amd-host-device",
"deviceID": "0000:01:00.0" # Injected by Multus from device allocation
}
Execution Steps:
IP Capture: Extract existing IP addresses from host interface
Interface Movement: Delegate to
host-device
plugin to move interface to pod with the extracted IP addressesState Persistence: Store interface-to-IP mapping for lifecycle management
Key Integration Points#
Device Plugin ↔ CNI Communication#
Device Plugin allocates PCI device ID
Multus extracts device ID from environment variables
Device ID passed to CNI for interface identification
Resource Annotation Mapping#
k8s.v1.cni.cncf.io/resourceName
links NetworkAttachmentDefinition to Device Plugin resourceEnables automatic device allocation to CNI parameter mapping
Provides resource-aware network attachment
Result#
Upon successful completion:
Pod has direct access to physical/virtual NIC hardware