fast packet processing with kubevirt · 2020. 8. 31. · multus cni linux bridge 1. cni (2. cni)...

111
Fast Packet Processing with KubeVirt Petr Horáček Senior Software Engineer Red Hat David Vossel Principal Software Engineer Red Hat

Upload: others

Post on 05-Mar-2021

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing with KubeVirt

Petr HoráčekSenior Software EngineerRed Hat

David VosselPrincipal Software EngineerRed Hat

Page 2: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

What is KubeVirt?

Page 3: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

What is KubeVirt?

“KubeVirt is a Kubernetes extension that allows running traditional VM workloads natively side by side with Container workloads.”

Page 4: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

KubeVirt Basics

Kubernetes + KubeVirt

KubeVirt VM is a KVM+qemu process running inside a pod

Application POD

App Container

KubeVirt PODKVM + Qemu

Container

Standard CRI Runtime(Docker, CRI-O, Containerd, etc...)

Page 5: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Scope of KubeVirt Project?

● Limited in scope to managing virtual machine lifecycle○ Starting VMs○ Stopping VMs○ Pausing/suspending VMs○ Live Migrating VMs○ Monitoring VMs○ Replicating VMs.○ Etc…

● Utilizes existing cluster resources for everything else○ PVCs for persistent virtual machine disks○ CNI for network devices○ CPU Manager for cpu affinity○ Device Plugins for access to host devices (GPU, SR-IOV)

Page 6: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

VM workloadsVM workloads

Addon Functionality

● Enable common workflows and functionality with addons○ CDI: For building VM Image repositories using PVCs○ Multus + CNI Plugins: For tieing VMs into multiple networks. ○ SR-IOV CNI/Device Plugin: for passing making SR-IOV devices available to VMs○ Nvidia GPU Device Plugin: For passing GPU devices to VMs.

Kubernetes

KubeVirt CDI multus SR-IOVCNI+Device Plugin

GPUDevice Plugin

VM workloads

KubernetesControl Plane

KubeVirt + Addons

High Performance VMs

Page 7: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

What is an Opinionated Install?

Opinionated Install: KubeVirt + optional addon components + configuration data

VM workloadsVM workloads

Kubernetes

KubeVirt CDI multus SR-IOVCNI+Device Plugin

GPUDevice Plugin

VM workloads

KubernetesControl Plane

KubeVirt + Addons

High Performance VMs

Page 8: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Opinionated Install for Traditional VMs

● Opinionated Install Addons for… ○ Importing VMs from legacy VM management Platforms (Like VMWare and oVirt)

○ Providing feature parity with legacy VM management platforms

● Problem…○ Complex collection of [Kubevirt + Addons + Config data] is difficult to manage.

● Solution?

Page 9: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Hyper Converged Operator (HCO)

● HCO is an operator of operators or meta operator○ Coordinates installing KubeVirt + addons

○ Allows installing/updating entire opinionated install as a single cohesive unit.

Page 10: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

HCO Architecture

HCO Manifest

HCO Manifest Deploys HCO operator + Subcomponent operators

Page 11: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

HCO Architecture

HCO Manifest HCO Operator

Virt Operator

CDI Operator

CNA Operator

HCO Manifest Deploys HCO operator + Subcomponent operators

Page 12: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

HCO Architecture

Virt CR CDI CR CNA CRHCO

Manifest HCO Operator

Virt Operator

CDI Operator

CNA Operator

HCO deploys subcomponents using subcomponent operator CRs

Page 13: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

HCO Architecture

Virt CR CDI CR CNA CRHCO

Manifest HCO Operator

Virt Operator

CDI Operator

CNA Operator

Subcomponent Operators deploy the subcomponent using the HCO’s supplied configuration

KubeVirt

CDI

Multus

Page 14: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Current HCO Subcomponents

● Virt-operator - KubeVirt Core● Cluster Network Addons (CNA) - multus, mac pool, CNI plugins.● SSP operator - node feature labeller, common vm templates● CDI operator - VM image importing and cloning● Node maintenance operator - server side node maintenance (similar to

kubectl drain but server side)● Hostpath Provisioner Operator - local storage storage class provisioner● VM Import Operator - workflows for importing rhv/ovirt vm to kubevirt

Page 15: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Installing HCO from OLM Marketplace

Virt CR CDI CR CNA CR

HCO Manifest HCO Operator

Virt Operator

CDI Operator

CNA Operator

KubeVirt

CDI

Multus

Operator Lifecycle Manager (OLM)

Marketplace User Subscribes to HCOvia OLM marketplace

Page 16: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Updating from OLM Marketplace

Virt CR CDI CR CNA CR

HCO Manifest HCO Operator

Virt Operator

CDI Operator

CNA Operator

KubeVirt

CDI

Multus

Operator Lifecycle Manager (OLM)

Marketplace

New HCO Manifests are posted on updates

Page 17: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Network Addons

Page 18: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Network Addons

Virt CR CDI CR CNA CRHCO

Manifest HCO Operator

Virt Operator

CDI Operator

CNA Operator

KubeVirt

CDI

Multus

Page 19: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Network Addons

CNA CRHCO

Manifest HCO Operator

CNA OperatorMultus

Page 20: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Network Addons

CNA CRHCO

Manifest HCO Operator

CNA OperatorMultus

Bridge CNI

Page 21: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Network Addons

CNA CRHCO

Manifest HCO Operator

CNA OperatorMultus

OVS CNI

Bridge CNI

Page 22: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Network Addons

CNA CRHCO

Manifest HCO Operator

CNA OperatorMultus

MacPool

OVS CNI

Bridge CNI

Page 23: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Network Addons

CNA CRHCO

Manifest HCO Operator

CNA OperatorMultus

MacPool

OVS CNI

Bridge CNI

nmstate

Page 24: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Network Addons

CNA CRHCO

Manifest HCO Operator

CNA OperatorMultus

MacPool

OVS CNI

Bridge CNI

nmstate

SR-IOV Operator

SR-IOVDP

SR-IOVCNI

Page 25: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing

Page 26: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

● The default CNI plugin of the cluster,● often based on an overlay network,● connected to the VM container,● forwarded to the VM process through NAT or Linux bridge.

Regular Packet Processing

Page 27: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

● The default CNI plugin of the cluster,● often based on an overlay network,● connected to the VM container,● forwarded to the VM process through NAT or Linux bridge.

● Offers all the benefits of Kubernetes infrastructure,● is not as fast as other solutions.

Regular Packet Processing

Page 28: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Cluster Network)

Page 29: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Cluster Network)

Node

eth0

Node Node

eth0 eth0

Page 30: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Cluster Network)

Node

eth0

Node Node

eth0 eth0

Page 31: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Cluster Network)

Node

eth0

Node Node

eth0 eth0

VMeth0

Page 32: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Cluster Network)

Node

eth0

Node Node

eth0 eth0

VMeth0

VMeth0

Page 33: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

Page 34: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

pod

Page 35: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

pod

eth010.10.0.1

Page 36: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

pod

eth010.10.0.1

container

Page 37: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

pod

eth010.10.0.1

container

a process

Page 38: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

pod

eth010.10.0.1

container

virtual machine

Page 39: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

pod

eth010.10.0.1

container

virtual machine

eth0

Page 40: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

pod

eth010.10.0.1

container

virtual machine

eth0?

Page 41: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

pod

eth010.10.0.1

container

virtual machine

eth0br1

Page 42: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

pod

eth010.10.0.1

container

virtual machine

eth0

DHCP server

offering 192.168.0.1

onbr1

br1

Page 43: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

pod

eth010.10.0.1

container

virtual machine

eth0192.168.0.1

DHCP server

offering 192.168.0.1

onbr1

br1

Page 44: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Binding)

pod

eth010.10.0.1

container

virtual machine

iptables

ifdst.port == 80

forward tobr1 192.168.0.1

DHCP server

offering 192.168.0.1

onbr1

eth0192.168.0.1 br1

Page 45: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Regular Packet Processing (Example)

apiVersion: kubevirt.io/v1alpha3kind: VirtualMachineInstancemetadata: name: vmi-test ...

spec: networks: - name: default pod: {} domain: devices: ... interfaces: - name: default masquerade: {} ......

Page 46: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing

Page 47: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing

● Bridge configured on the host,● with host NIC as its port,● extending L2 access to the network to containers,● as an additional network,● forwarded to the VM through another bridge.

Page 48: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing

● Bridge configured on the host,● with host NIC as its port,● extending L2 access to the network to containers,● as an additional network,● forwarded to the VM through another bridge.

● May be faster thanks to direct L2 access,● is not 100% integrated to Kubernetes networking components.

Page 49: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Cluster Network)

Page 50: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Cluster Network)

Node

eth0

Node Node

eth0 eth0

Page 51: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Cluster Network)

Node

eth0

Node Node

eth0 eth1 eth0 eth1

Switch

Page 52: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Cluster Network)

Node

eth0

Node Node

eth0 eth1 eth0 eth1

br1 br1

Switch

Page 53: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Cluster Network)

Node

eth0

Node Node

eth0 eth1 eth0 eth1

br1 br1

Switch

VMeth0 eth1

Page 54: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Multus)

Page 55: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Multus)

kubelet

calico

CNI

Page 56: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Multus)

kubelet

multus

CNI

Page 57: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Multus)

kubelet

calico

multus

CNI

1. CNI

Page 58: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Multus)

kubelet

calico

multus

CNI

linux bridge

1. CNI

(2. CNI)

Page 59: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Multus)

kubelet

calico

multus

CNI

linux bridge …

1. CNI (3. CNI)

(2. CNI)

Page 60: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Binding)

Page 61: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Binding)

pod

eth0

container

virtual machine

eth0

Page 62: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Binding)

pod

eth0

container

virtual machine

eth0

enp3

Page 63: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Binding)

pod

eth0

container

virtual machine

eth0

br0 enp3

Page 64: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Binding)

pod

eth0

container

virtual machine

eth0

eth1

br0 enp3

Page 65: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Binding)

pod

eth0

container

virtual machine

eth1

eth0

eth1

br0 enp3

Page 66: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Binding)

pod

eth0

container

virtual machine

eth1 br1

eth0

eth1

br0 enp3

Page 67: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Binding)

pod

eth0

container

virtual machine

eth1 br1

eth0

eth1

br0 enp3

Page 68: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Example)

apiVersion: nmstate.io/v1alpha1kind: NodeNetworkConfigurationPolicymetadata: name: br1-eth0

spec: desiredState:

interfaces:- name: br1

type: linux-bridge state: up ipv4: dhcp: true enabled: true bridge: port: - name: eth0

Page 69: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Example)

apiVersion: k8s.cni.cncf.io/v1kind: NetworkAttachmentDefinitionmetadata: name: blue-network annotations: k8s.v1.cni.cncf.io/resourceName: ovs-cni.network.kubevirt.io/br1spec: config: '{ "cniVersion": "0.3.1", "type": "bridge", "bridge": "br1", "vlan": 100 }'

Page 70: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Faster Packet Processing (Example)

apiVersion: kubevirt.io/v1alpha3kind: VirtualMachineInstancemetadata: name: vmi-test ...

spec: networks: - name: default pod: {} - name: blue multus: networkName: blue-network domain: devices: ... interfaces: - name: default masquerade: {} - name: blue bridge: {} ......

Page 71: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Really Fast Packet Processing

Page 72: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing

● SR-IOV NIC configured on the host,● exposed as a node resource,● plugged as a device into a container,● mounted into the virtual machine through as a passthrough.

Page 73: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing

● SR-IOV NIC configured on the host,● exposed as a node resource,● plugged as a device into a container,● mounted into the virtual machine through as a passthrough.

● As fast as it can get,● requires special hardware and can service only so many containers.

Page 74: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (SR-IOV)

● Dedicated NICs for each VM would be a clunky solution.

● SR-IOV exposes a single NIC as many,● isolation of PCIe resources,● Physical Functions (PFs) and Virtual Functions (VFs),● multiple containers and VMs can utilize the hardware NIC at the same time.

Page 75: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (not SR-IOV)

host

NIC

Page 76: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (not SR-IOV)

host

NIC

VMVM

Page 77: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (not SR-IOV)

host

NIC

VMVM

Page 78: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (not SR-IOV)

host

NIC

VMVM

Page 79: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (not SR-IOV)

host

NIC

VMVM

The slow part

Page 80: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (SR-IOV)

host

NIC

PF

VMVM

Page 81: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (SR-IOV)

host

NIC

PF

VMVM

VFVF

Page 82: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (SR-IOV)

host

NIC

PF

VMVM

VFVF

Page 83: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (SR-IOV)

host

NIC

PF

VMVM

VFVF

Page 84: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (SR-IOV Operator)

● Optional, but so useful,● reports available NICs,● configures them,● deploys other needed components,● and all of that through Kubernetes API.

Page 85: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Device Plugin)

● Allocates countable resources and plugs them into containers,● gRPC service cooperating with kubelet,● discovery,● advertising,● allocation,● health checking.

Page 86: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (CNI)

● SR-IOV CNI complements the device plugin,● it configures allocated VF,● both VF parameters and configuration of container's netlink interface.

Page 87: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Configuration)

Node

eth0

Node Node

eth0 eth1 eth0

Switch"fast net"

eth1

Page 88: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Configuration)

Node

eth0

Node Node

eth0 eth1 eth0

Switch"fast net"

eth1

conf-daemon

Page 89: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Configuration)

Node

eth0

Node Node

eth0 eth1 eth0

Switch"fast net"

eth1

conf-daemon

Page 90: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Configuration)

Node

eth0

Node Node

eth0 eth1 eth0

Switch"fast net"

eth1

conf-daemon

Page 91: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Advertisement)

Node

eth0

Node Node

eth0 eth1 eth0

Switch"fast net"

eth1

conf-daemon

device-plugin

Page 92: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Advertisement)

Node

eth0

Node Node

eth0 eth1 eth0

Switch"fast net"

eth1

conf-daemon

device-plugin

capacity: cpu: 2 memory: 2049008Ki mlx/sriov_net: 3

Page 93: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Advertisement)

Node

eth0

Node Node

eth0 eth1 eth0

Switch"fast net"

eth1

conf-daemon

device-plugin

capacity: cpu: 2 memory: 2049008Ki mlx/sriov_net: 3

capacity: cpu: 2 memory: 2049008Ki mlx/sriov_net: 3

Page 94: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Scheduling)

Node

eth0

Node Node

eth0 eth1 eth0

Switch"fast net"

eth1

Page 95: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Scheduling)

Node

eth0

Node Node

eth0 eth1 eth0

Switch"fast net"

eth1

Page 96: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Scheduling)

Node

eth0

Node Node

eth0 eth1 eth0

nets: fast-netVM

Switch"fast net"

eth1

Page 97: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Scheduling)

Node

eth0

Node Node

eth0 eth1 eth0

nets: fast-netVM

Switch"fast net"

eth1

Page 98: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Scheduling)

Node

eth0

Node Node

eth0 eth1 eth0

nets: fast-netVM

Switch"fast net"

eth1

Page 99: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Scheduling)

Node

eth0

Node Node

eth0 eth1 eth0

nets: fast-netVM

Switch"fast net"

eth1

Page 100: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Attachment)

● After a Pod requesting SR-IOV gets scheduled● device plugin would tell kubelet how to pass VF into a container,● kubelet plugs in the VF,● Multus fetches ID of the VF and passes it to SR-IOV CNI,● SR-IOV CNI then configures the VF.

● Difference between netlink and vfio-pci method.

Page 101: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Binding)

pod

eth0

container

virtual machine

eth0

enp3VF

Page 102: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Binding)

pod

eth0

container

virtual machine

eth0

enp3

VFeth1

Page 103: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Binding)

pod

eth0

container

virtual machine

eth0

enp3

VFeth1

Page 104: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Binding)

pod

eth0

container

virtual machine

eth0

enp3

VFeth1

Page 105: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Tweaking)

● SR-IOV can be made even faster with NUMA awareness and CPU management enabled on the cluster,

● the goal is to align all resources of a VM as close together as possible,● KubeVirt leverages CPU manager when dedicated CPU placement is enabled.

Page 106: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (DPDK)

● Very fast user-space networking,● requires hugepages,● hugepages can be propagated through Kubernetes and KubeVirt to the guest.

Page 107: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Example)

apiVersion: sriovnetwork.openshift.io/v1kind: SriovNetworkNodePolicymetadata: name: policy-mlx namespace: sriov-network-operatorspec: deviceType: vfio-pci mtu: 9000 nicSelector:

deviceID: "1017"vendor: "15b3"pfNames:- ens801f0

nodeSelector:feature.node.kubernetes.io/network-sriov.capable: "true"

numVfs: 6 resourceName: fast-network

Page 108: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Example)

apiVersion: sriovnetwork.openshift.io/v1kind: SriovNetworkmetadata: name: fast-network-10 namespace: sriov-network-operatorspec: ipam: |

{} vlan: 10 spoofChk: "off" resourceName: fast-network networkNamespace: default

Page 109: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Fast Packet Processing (Example)

apiVersion: kubevirt.io/v1alpha3kind: VirtualMachineInstancemetadata: name: vmi-test ...spec: domain: cpu: sockets: 3 cores: 1 threads: 1 model: host-model dedicatedCpuPlacement: true isolateEmulatorThread: true memory: hugepages: pageSize: "1Gi"

resources: limits: cpu: 3 memory: 4Gi devices: interfaces: - name: fast sriov: {} networkInterfaceMultiqueue: true networks: - name: fast multus: networkName: fast-network-10 ...

Page 110: Fast Packet Processing with KubeVirt · 2020. 8. 31. · multus CNI linux bridge 1. CNI (2. CNI) Faster Packet Processing (Multus) kubelet calico multus CNI linux bridge … 1. CNI

Questions?