← Back to Index

openshift 4 kvm+ovs install

openshift4在日常的安装场景中,有这样一个情况,就是需要在多台配置小一些的主机上,实现跨主机的集群安装,这就需要多个kvm跨主机通讯,本来使用bridge方式,搭配可直连的ip地址,是可以满足的,但是由于ip地址管理的限制,我们没有可以直连的ip地址,那么我们就需要ovs+vxlan的方式,来解决这个问题。

本文针对2台主机,讲述如何配置ovs,以及如何启动kvm。

参考资料:

mtu 调整:

vxlan

nat

基于本文的ocp4安装实践,见笔记: https://github.com/wangzheng422/docker_env/blob/master/redhat/prepare/cmri/lab.md

on redhat-01


        yum -y install openvswitch2.11 NetworkManager-ovs
        
        # install pkg for vnc and kvm
        
        systemctl enable --now openvswitch
        systemctl status openvswitch
        
        systemctl enable --now libvirtd
        
        cat << 'EOF' > /etc/sysconfig/network-scripts/ifcfg-br-int 
        DEVICE=br-int
        ONBOOT=yes
        DEVICETYPE=ovs
        TYPE=OVSBridge
        BOOTPROTO=static
        HOTPLUG=no
        IPADDR=192.168.7.1
        PREFIX=24
        MTU=1450
        EOF
        
        cat << 'EOF' > /etc/sysconfig/network-scripts/ifcfg-vxlan1
        DEVICE=vxlan1
        ONBOOT=yes
        DEVICETYPE=ovs
        TYPE=OVSTunnel
        OVS_BRIDGE=br-int
        OVS_TUNNEL_TYPE=vxlan
        OVS_TUNNEL_OPTIONS="options:remote_ip=172.29.159.100"
        BOOTPROTO=static
        HOTPLUG=no
        EOF
        
        systemctl restart network
        
        ovs-vsctl show
        
        # ovs-vsctl set int br-int mtu_request=1450
        
        # ovs-vsctl set int br-int mtu_request=[]
        
        mkdir -p /data/kvm
        cd /data/kvm
        
        # bridge mode
        
        cat << 'EOF' > ovsnet.xml
        <network>
          <name>br-int</name>
          <forward mode='bridge'/>
          <bridge name='br-int'/>
          <virtualport type='openvswitch'/>
        </network>
        EOF
        
        virsh net-define ovsnet.xml
        virsh net-start br-int
        virsh net-autostart br-int
        
        # restore
        
        virsh net-destroy br-int
        virsh net-undefine br-int
        /bin/rm -f /etc/sysconfig/network-scripts/ifcfg-br-int 
        /bin/rm -f /etc/sysconfig/network-scripts/ifcfg-vxlan1
        systemctl restart network
        

on redhat-02

 
        yum -y install openvswitch2.11 NetworkManager-ovs
        
        # install pkg for vnc and kvm
        
        systemctl enable --now openvswitch
        systemctl status openvswitch
        
        systemctl enable --now libvirtd
        
        ovs-vsctl show
        
        cat << 'EOF' > /etc/sysconfig/network-scripts/ifcfg-br-int 
        DEVICE=br-int
        ONBOOT=yes
        DEVICETYPE=ovs
        TYPE=OVSBridge
        BOOTPROTO=static
        HOTPLUG=no
        IPADDR=192.168.7.2
        PREFIX=24
        MTU=1450
        EOF
        
        cat << 'EOF' > /etc/sysconfig/network-scripts/ifcfg-vxlan1
        DEVICE=vxlan1
        ONBOOT=yes
        DEVICETYPE=ovs
        TYPE=OVSTunnel
        OVS_BRIDGE=br-int
        OVS_TUNNEL_TYPE=vxlan
        OVS_TUNNEL_OPTIONS="options:remote_ip=172.29.159.99"
        BOOTPROTO=static
        HOTPLUG=no
        EOF
        
        systemctl restart network
        
        ovs-vsctl show
        
        # ovs-vsctl set int br-int mtu_request=1450
        
        mkdir -p /data/kvm
        cd /data/kvm
        
        # bridge mode
        
        cat << 'EOF' > ovsnet.xml
        <network>
          <name>br-int</name>
          <forward mode='bridge'/>
          <bridge name='br-int'/>
          <virtualport type='openvswitch'/>
        </network>
        EOF
        
        virsh net-define ovsnet.xml
        virsh net-start br-int
        virsh net-autostart br-int
        
        # restore
        
        virsh net-destroy br-int
        virsh net-undefine br-int
        
        

创建虚拟机

虚机创建,注意调整每个虚机的mtu,关键在虚拟机里面,操作系统对网卡mtu的设置,这个其实是kernel安装的时候,启动参数的问题,请参考这里: https://www.man7.org/linux/man-pages/man7/dracut.cmdline.7.html


        mkdir -p /data/kvm
        cd /data/kvm
        
        lvremove -f datavg/helperlv
        lvcreate -y -L 230G -n helperlv datavg
        
        # 230G
        
        virt-install --name="ocp4-aHelper" --vcpus=2 --ram=4096 \
        --disk path=/dev/datavg/helperlv,device=disk,bus=virtio,format=raw \
        --os-variant centos7.0 --network network:br-int,model=virtio \
        --boot menu=on --location /data/kvm/rhel-server-7.8-x86_64-dvd.iso \
        --initrd-inject /data/kvm/helper-ks.cfg --extra-args "inst.ks=file:/helper-ks.cfg" 

弯路

ovs上的虚拟机,要开启mtu调整


        sysctl -w net.ipv4.tcp_mtu_probing=1
        
        cat << 'EOF' > /etc/sysctl.d/99-sysctl-wzh.conf
        net.ipv4.tcp_mtu_probing = 1
        EOF
        
        sysctl --system
        
        ovs-vsctl add-port br-int vxlan1 -- \
          set Interface vxlan1 type=vxlan options:remote_ip=172.29.159.99
        
        ovs-vsctl set int br-int mtu_request=1450
        
        nmcli connection add type vxlan id 100 remote 172.29.159.99 ipv4.addresses 192.168.77.2/24 ipv4.method manual ifname vxlan1 connection.id vxlan1 vxlan.parent enp2s0f0 
        nmcli conn up vxlan1
        
        nmcli conn del vxlan1
        
        ovs-vsctl add-port br-int vxlan1 -- \
          set Interface vxlan1 type=vxlan options:remote_ip=172.29.159.100
        
        ovs-vsctl set int br-int mtu_request=1450
        ovs-vsctl set int br-int mtu_request=[]
        
        systemctl restart network
        
        # restore
        
        ovs-vsctl del-port br-int vxlan1
        ovs-vsctl del-br br-int
        rm -f /etc/sysconfig/network-scripts/ifcfg-br-int 
        systemctl restart network
        
        man nm-openvswitch
        
        nmcli con add type ovs-bridge \
            con-name br-private \
            ifname br-private \
            ipv4.method 'manual' \
            ipv4.address '192.168.7.1/24' 
        
        nmcli connection modify br-private ipv4.addresses 192.168.7.1/24
        nmcli connection modify eno2 ipv4.gateway 192.168.39.254
        nmcli connection modify eno2 ipv4.dns 192.168.39.129
        nmcli connection modify br-private ipv4.method manual
        nmcli connection modify br-private connection.autoconnect yes
        nmcli connection modify br-private connection.autoconnect yes
        nmcli connection reload
        
        nmcli con del br-private
        
        nmcli connection add type vxlan id 100 remote 172.29.159.100 ipv4.addresses 192.168.77.1/24 ipv4.method manual ifname vxlan1 connection.id vxlan1 vxlan.parent enp2s0f0 
        nmcli conn up vxlan1
        
        nmcli conn del vxlan1
        
        nmcli conn add type ovs-bridge conn.interface bridge0
        nmcli conn add type ovs-port conn.interface port0 master bridge0
        nmcli conn add type ovs-interface conn.interface iface0 master port0 \
                     ipv4.method manual ipv4.address 192.168.7.1/24
        
        nmcli conn del ovs-slave-iface0
        nmcli conn del ovs-slave-port0
        nmcli conn del ovs-bridge-bridge0
        
        ovs-vsctl add-br br-private
        
        ovs-dpctl show
        ovs-ofctl show br0