components kubelet virt-handler Pod (DaemonSet) Worker node Virt handler ❶ Create VirtualMachine CR virt-launcher Pod ❸Create virt-launcher Pod virtqemud qemu-kvm KubeVirt component Other component KVM ❷ Schedule virt-launcher Pod ❹ Create VMI CR ❺ Notify VMI ❻ Order startup VM based on VMI spec ❼ Operate QEMU through libvirt and start VM
tap0 eth0 仮想マシンのネットワーク接続 (masquerade) localhost:~$ oc exec virt-launcher-fedora-0-8twvt -- ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0@if165: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UP group default link/ether 0a:58:0a:81:02:84 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.129.2.132/23 brd 10.129.3.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::858:aff:fe81:284/64 scope link valid_lft forever preferred_lft forever 3: k6t-eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UP group default qlen 1000 link/ether 02:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff inet 10.0.2.1/24 brd 10.0.2.255 scope global k6t-eth0 valid_lft forever preferred_lft forever inet6 fe80::ff:fe00:0/64 scope link valid_lft forever preferred_lft forever 4: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc fq_codel master k6t-eth0 state UP group default qlen 1000 link/ether 4e:0c:58:54:2b:f8 brd ff:ff:ff:ff:ff:ff inet6 fe80::4c0c:58ff:fe54:2bf8/64 scope link valid_lft forever preferred_lft forever veth bridge tap localhost:~$ oc exec virt-launcher-fedora-0-8twvt -- ip r default via 10.129.2.1 dev eth0 10.0.2.0/24 dev k6t-eth0 proto kernel scope link src 10.0.2.1 10.128.0.0/14 via 10.129.2.1 dev eth0 10.129.2.0/23 dev eth0 proto kernel scope link src 10.129.2.132 100.64.0.0/16 via 10.129.2.1 dev eth0 172.30.0.0/16 via 10.129.2.1 dev eth0 Podのインターフェース $ kubectl get pod -o json virt-launcher-fedora-0-8twvt | jq -r .status.podIP 10.129.2.132 PodのIPアドレス
tap eth0 DHCP server CNIが設定 libvirtによる設定 OVS bridge veth pair Linux Bridge tap virt-launcherが管理 仮想マシンのネットワーク接続 (masquerade) ▸ VMのIPアドレスはDHCPで付与 ▸ virt-launcherが自前DHCPサーバを Go routineとして起動
eth1 VM Pod br tap veth br tap eth0 仮想マシンを復数のネットワークに接続 ▸ MultusでセカンダリCNIを設定 ・ 必要に応じて各ノードにLinux Bridge等を作成 ▸ カスタムリソースNetworkAttachmentDefinitionで追加ネットワーク を定義 ▸ カスタムリソースVirtualMachineで追加NICおよび接続先を記述 OVS bridge veth pair Linux Bridge tap
eth1 VM Pod br tap veth br tap eth0 余談: 追加接続用のブリッジの設定が結構めんどくさい... ▸ MultusでセカンダリCNIを設定 ・ 必要に応じて各ノードに Linux Bridge等を作成 nmstate operator OVS bridge veth pair Linux Bridge tap これが結構めんどくさい nmstate operatorがお役に立てるかも
enp2s0 enp1s0 br-int veth br tap eth0 br-ex eth0 eth1 VM Pod br tap veth br tap eth0 veth veth veth eth0 eth1 VM Pod Node br tap veth br enp2s0 enp1s0 br-int veth br tap eth0 br-ex eth0 eth1 VM Pod br tap veth br tap eth0 veth veth veth
VM Pod br tap eth0 eth0 VM Pod Node enp1s0 br tap eth0 eth0 VM Pod br tap eth0 br-int br-ex br-int br-ex Geneve tunnel veth veth veth veth おさらい: プライマリCNIとしてのOVN-Kubernetes ノード間通信はGeneveトンネルを通る
enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 eth0 eth1 VM Pod Node br tap veth enp2s0 enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 node local logical switch ovn cluster router join switch gateway router external switch ovn cluster router join switch gateway router external switch node local logical switch transit switch おさらい: OVN-Kubernetesのオーバーレイネットワーク (プライマリCNI)
enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 eth0 eth1 VM Pod Node br tap veth enp2s0 enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 layer2モードのOVN-K追加ネットワーク (オーバーレイ)
enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 eth0 eth1 VM Pod Node br tap veth enp2s0 enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 layer2モードのOVN-K追加ネットワーク (オーバーレイ)
enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 eth0 eth1 VM Pod Node br tap veth enp2s0 enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 Geneve tunnel br-int veth br-ex veth veth veth br-int veth br-ex veth veth veth layer2モードのOVN-K追加ネットワーク (アンダーレイ)
enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 eth0 eth1 VM Pod Node br tap veth enp2s0 enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 Geneve tunnel br-int veth br-ex veth veth veth br-int veth br-ex veth veth veth layer2モードのOVN-K追加ネットワーク (アンダーレイ) ノードをまたぐ通信は Geneveトンネルを通る
enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 eth0 eth1 VM Pod Node br tap veth enp2s0 enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 localnetトポロジー(br-ex共用)のオーバーレイネットワーク
enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 eth0 eth1 VM Pod Node br tap veth enp2s0 enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 Geneve tunnel br-int veth br-ex veth veth veth br-int veth br-ex veth veth veth ノードをまたぐ通信は (Geneveトンネルではなく)アンダーレイネット ワークを通る。このとき、 NetworkAttachmentDefinitionで設定した VLANタグ(p.46の例だと 34 )が付与される localnetトポロジー(br-ex共用)のアンダーレイネットワーク
enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 eth0 eth1 VM Pod Node br tap veth enp2s0 enp1s0 br tap eth0 eth0 eth1 VM Pod br tap veth br tap eth0 Geneve tunnel br-int veth br-ex ovs-br1 veth veth veth br-int veth br-ex ovs-br1 veth veth veth localnetトポロジー(別NIC使用時)のアンダーレイネットワーク ノードをまたぐ通信は (Geneveトンネルではなく)アンダーレイネット ワークを通る。このとき、 NetworkAttachmentDefinitionで設定した VLANタグ(p.46の例だと 33 )が付与される
leading provider of enterprise open source software solutions. Award-winning support, training, and consulting services make Red Hat a trusted adviser to the Fortune 500. Thank you