Docker是被廣泛應用的容器化技術,而SR-IOV技術則可以在虛擬化環境下提高網絡性能,其運作方式是開啟直連通道,讓虛擬機直接使用物理設備的網絡接口卡,而非虛擬機對后端交換機的虛擬接口進行數據包處理。那么,如何讓Docker容器也能接入SR-IOV網絡呢?
在Docker中,我們需要安裝支持SR-IOV的CNI插件,并進行相應的配置。這些插件包括:sriov-cni, sriov-device-plugin 和k8s-device-plugin等。我們先安裝sriov-device-plugin插件,并進行配置,具體操作如下: sudo apt-get update && apt-get install -y libibverbs1 libmnl0 cd /usr/src git clone https://github.com/intel/sriov-cni.git cd sriov-cni ./build mkdir /etc/cni/net.d cp ./10-sriov-cni.conf /etc/cni/net.d echo '{ "name": "mynet", "type": "sriov", "mode":"vnic"}' >/etc/cni/net.d/99-mynet.conf ./install.sh
完成上述操作后,我們需要在Docker容器中安裝支持SR-IOV的驅動,以CentOS為例,可以使用以下命令進行安裝:
yum install libibverbs libmnl yum install libibverbs-devel libmnl-devel kernel-devel rpm -ivh /rs-openib-1.5-4.el7_4.x86_64.rpm (其中rs-openib-1.5-4.el7_4.x86_64.rpm為driver驅動包)
安裝完成后,我們需要開啟Docker的privileged和net-admin權限,并為容器分配SR-IOV網絡,具體操作參照以下代碼塊:
docker run --privileged --net=host -d ubuntu sh -c "while :; do sleep 1; done" docker exec -itbash ip link add name eth0 type sriov master ip link set dev eth0 vf 0 mac spoofchk off ip link set dev eth0 up
通過以上操作,我們就可以讓Docker容器接入SR-IOV網絡了,從而提高網絡性能,提升應用性能的同時降低網絡延遲和丟包率。
上一篇css動畫走馬燈