1.
前期评估与准备
- 硬件清单:记录型号(Supermicro 主板/CPU/内存/NIC/HBA/RAID卡)、固件版本与IPMI地址。建议先在IPMI登录(默认用户名/密码确认并修改)。
- 兼容性检查:确认CPU支持VT-x/VT-d或AMD-V/IOMMU,NIC支持SR-IOV(常见Intel、Mellanox)。查Supermicro官方BIOS兼容列表并下载最新BMC/BIOS固件。
- 备份计划:导出现有RAID配置与重要数据,准备恢复介质。制定维护窗口与回滚步骤。
2.
BIOS与固件的具体设置(操作步骤)
- 登录IPMI或本地控制台,进入BIOS -> Advanced Settings:启用VT-d/Intel Virtualization Technology或AMD IOMMU。
- 启用SR-IOV(在NIC有此选项时)。启用UEFI/CSM按需配置。保存并重启。
- 更新固件:在Supermicro IPMI固件页上传最新BMC/BIOS固件并按提示刷新,重启并再次验证BIOS设置。
3.
Linux内核与内核参数调整
- 编辑GRUB:在/etc/default/grub 中加入 intel_iommu=on iommu=pt 或 amd_iommu=on iommu=pt,保存后执行 update-grub 或 grub2-mkconfig -o /boot/grub2/grub.cfg。
- 开启HugePages:在启动脚本或sysctl中预留大页,例如在 /etc/sysctl.d/90-hugepages.conf 写入 vm.nr_hugepages=1024,sysctl -p 生效。
- 关闭不必要服务:禁用selinux/permissive、减少swap使用(vm.swappiness=10),重启服务器验证内核参数生效(dmesg | grep -E "IOMMU|SR-IOV|hugepages")。
4.
启用并配置SR-IOV与VF(示例命令)
- 找到物理NIC的PCI地址:lspci | grep -i ethernet。假设为0000:03:00.0。
- 启用VF数量:echo 8 > /sys/bus/pci/devices/0000:03:00.0/sriov_numvfs (根据NIC与业务需求调整)。
- 验证:ls /sys/bus/pci/devices/0000:03:00.0/ 查看vf报告,并使用ip link查看新生成的vf接口。设置MAC与VLAN:ip link set eth0 vf 0 mac 00:11:22:33:44:55 vlan 100。
5.
在超微上部署虚拟化层(KVM/ESXi)与网络直通
- KVM环境(推荐Linux):安装QEMU/KVM/libvirt:apt/yum install qemu-kvm libvirt-daemon-system virt-install。创建虚拟机时在libvirt XML加入PCI passthrough设备,或使用virt-manager界面。
- ESXi环境:在vSphere中配置DirectPath I/O直通,将物理PCI设备标记为直通,重启管理程序,创建VM并将设备添加为PCI设备。
- 在VM内启用驱动:确保客机操作系统能识别SR-IOV VF或PCI直通设备(安装Intel/Mellanox驱动)。
6.
在虚拟机上部署云原生平台(Kubernetes)
- 建议架构:在若干虚拟机上部署控制平面与工作节点(3-master/3-worker 或 K3s 小型部署)。
- kubeadm 示例(在每台节点执行):安装docker/containerd并配置cgroup。初始化控制平面示例:kubeadm init --pod-network-cidr=10.244.0.0/16,并将 kubeconfig 放到 ~/.kube/config。
- 网络与SR-IOV整合:部署Multus CNI + SR-IOV Device Plugin(kubectl apply -f sriov-device-plugin-daemonset.yaml),为Pod分配VF网络接口,使用NetworkAttachmentDefinition 指定第二网卡。
7.
调度、资源分配与性能优化实操
- CPU/内存亲和与固定:使用nodeSelector、pod affinity/anti-affinity,或使用kubectl patch 将特定节点标记为“nfv=true”,再给需要直通资源的Pod添加nodeSelector。设置Pod spec 中的resources.requests/limits并启用CPU pinning(在Kubelet配置中设置 reserved/eviction)。
- HugePages 与 HugeTLB:在Pod spec 中声明hugepages-2Mi资源并在节点预留。
- NUMA对齐:为高性能工作负载使用CPUSet与cpuset.cpus,确保虚拟机的vCPU与物理CPU NUMA节点对齐以减少跨NUMA访问延迟。示例:virsh vcpupin VM 0 0 0-7。
- 存储直通与CSI:对于高IO要求,使用HBA直通或配置Ceph/RBD + CSI,以减少虚拟化层IO开销。
8.
监控、故障排查与运维脚本
- 监控栈:部署Prometheus + node-exporter + cAdvisor,收集主机、虚拟机与容器指标。
- 常用排查命令:查看IOMMU/PCI绑定:dmesg | grep -i iommu;查看VF状态:ip link show;检查kubelet日志:journalctl -u kubelet -f。
- 自动化脚本建议:写脚本定期检查SR-IOV VF数量、dmesg错误、CPU/IRQ分布,并在IPMI上实现固件自动化升级流程(慎用,保证维护窗口)。
9.
问:超微服务器上启用SR-IOV后,Kubernetes中如何将VF分配给特定Pod?
问:在启用SR-IOV并在节点上创建VFs后,如何在Kubernetes中把某个VF分配给应用Pod? 答:部署SR-IOV device plugin(DaemonSet),创建 NetworkAttachmentDefinition 指向对应PF/VF,并在Pod YAML 中使用 annotations 指定该NetworkAttachment。示例Pod中使用 resources.requests: "intel.com/sriov": 1,然后网络接口会通过Multus自动注入到容器内。
10.
问:如何保证虚拟机与容器混合环境中的资源隔离和性能稳定?
问:在同一台超微主机上运行VM和容器,怎样做到隔离与稳定? 答:在Kubelet与libvirt层均设定资源保留(system-reserved/kube-reserved、libvirt cgroup limits),为关键VM/Pod做CPU pinning、预留HugePages与内存,使用NUMA亲和,限制中断绑定到固定CPU(通过irqbalance或手动写入 /proc/irq/*/smp_affinity)。同时监控并设置告警。
11.
问:在台湾部署超微服务器,有没有特殊运维建议?
问:针对台湾地区(含网络与供应链)有什么实践建议? 答:建议与当地Supermicro代理确认硬件备件与固件本地可得性,提前准备网络冗余(ISP与机房层面),以及在IPMI上启用二次认证与审计日志。定期同步固件补丁时间表,并在业务低峰窗口执行升级以减少风险。
来源:云原生与虚拟化对接超微服务器台湾公司优化资源配置方案