在去年上海的vForum大会上,VMware隆重介绍了NSX DC家族中的NSX-T产品;身边不少朋友都开始关注这个可能会带来变革的新事物。其实NSX-T在国外已经有不少的案例,也算不上是爆炸性的新东西了,只是大家对这个产品的了解还比较模糊。
前不久VMware发布了全新的NSX-T2.4版本,在我看来,这次发布不亚于VCSA6.5带来的震撼;借此机会,我也在实验室搭建了一套用于演示NSX-T常用功能的环境;从本篇起,我将通过若干实验,从技术上向各位展示这个划时代的VMware网络与安全产品。
本系列的标题是“变形金刚”,这是什么鬼?
其实NSX DC产品主要就是NSX-V与NSX-T,其中N代表Network网络,S代表Security安全;这一点熟悉NSX-V的朋友一定不陌生。在NSX Manager(后文简称NSXMGR)与vCenter Server(后文简称VC)注册集成后,管理员通过Web Client访问VC,就可以看到Network and Security网络与安全选项。NSX-V的V代表NSX for vSphere,它只适用于VMware的Hypervisor,也就是我们常说的vSphere Server,或者说ESXi;由于NSX-V与VC之间的紧密结合,在没有VC的环境或者其他异构环境(如KVM、容器等)使用场景中,显得无能为力(这个产品可能在2021年EOS,突然有点心疼)。NSX-T的T,其实就是Transformer的缩写,也就是变形金刚的意思;这不是望文生义,实际上,NSX的研发人员,都是用某一个汽车人的名字来命名,如NSX-T2.0版本据说就是“大黄蜂”。不过既然叫变形金刚,那我就揣测一下研发人员想要表达的含义,或许就是说NSX-T或者NSX DC产品,能适应任意应用、任意平台和任意云吧。
本系列将延续一步步实现SDDC系列的风格,我会和大家一起一步步部署基于NSX-T2.4产品的演示环境,其中也会涉及到2个异构的Hypervisor:ESXi与KVM。
由于NSX-T2.4的版本比较新,在部署的时候我遇到了不少问题;因此在本系列的开篇,我想先向各位展示,如何准备兼容NSX-T2.4的ESXi和KVM主机。
在此,我要特别感谢VMware高级讲师-寇雪旭老师,在我学习和工作过程中,给予我的帮助。在与寇老师交流技术的过程中,成长并学到了许多;寇老师的技术能力非常强,而且有非常丰富的实践经验,如果各位有机会参加VMware的培训,一定要好好向大拿取经。
0x01-01:VMware ESXi6.7环境准备
- ▪建议使用部署一台Linux操作系统(如CentOS7),作为iSCSI目标服务器,提供所有ESXi6.7主机的共享存储使用
我的环境中,一共部署了4台ESXi6.7虚拟机模拟4台ESXi服务器;每台服务器分配2x2vCPU、16GB内存(至少8GB以上)、通过iSCSI协议挂载2个共享数据存储、4块vmnic;其中标准交换机vSwitch0上联由vmnic0和vmnic1承载,用于承载ESXi管理流量、vMotion流量、iSCSI流量和管理网络VLAN流量;4台服务器分别两两组成计算集群和管理与边界集群。
- 截止笔者部署演示环境,VMware最新的vSphere6.7安装镜像默认无法兼容NSX-T2.4的部署,需要安装ESXi6.7.0-201901001.zip这个Patch Release;建议各位通过VC自带的Update Manager(后文简称VUM),为所有的ESXi主机进行修补程序升级操作。
- 具体的操作流程并不复杂,各位可以参考我的演示:
- 上传修补程序到VUM
- 创建一个Baseline基准,要求关联的ESXi必须安装ESXi6.7.0-201901001.zip Patch Release
- 将集群内的ESXi主机进入到维护模式后,通过VUM进行修复程序安装
- 可以看到,修复前最新的ESXi6.7版本为6.7.0.10302608
- 修复后的版本为6.7.0.11675023,这是NSX-T2.4兼容的最小版本
- 与NSX-V部署相类似,NSX-T也会有类似主机准备的阶段;在安装修复补丁后,应该可以在目标ESXi主机安装NSX-T的VIB;此处,请各位暂时忽略如何去实现,我会在后续的分享中详细说明
- 在实际的生产环境中,ESXi肯定不会有内存不足的情况出现;在实验环境中,我是通过虚拟机版本的ESXi模拟实际的服务器,可能会出现内存不足,导致NSX VIB安装失败的情况;因此我建议同样采用虚拟机版本ESXi的朋友,在ESXi的系统交换设置后,勾选“可以使用数据存储”,添加本地存储作为系统交换分区,以支持在内存不足的情况下,完成NSX VIB的安装
- 除此以外,如果有朋友发现虚拟机版本ESXi启动紫屏,请编辑该虚拟机设置,将固件引导从默认的EFI修改成BIOS,并取消勾选“安全引导”选项
如果各位朋友跟着我的节奏,完成了上述几处特殊配置,相信ESXi服务器的安装与网络基本设置不会成为阻挡学习NSX-T2.4部署的绊脚石。详细的安装步骤,也可以参考“一步步实现SDDC--学习平台环境的搭建(1)”。
0x01-02:基于Ubuntu16.04的KVM环境准备
较之ESXi6.7的环境准备,对于没接触过KVM的朋友可能会在这里遇到一些困难;VMware官方网站上列有NSX-T在KVM环境部署的安装配置手册,大家可以查阅参考,VMware的官方手册写得非常详细;在这里,我强调几点容易忽略的地方:
- 创建Ubuntu虚拟机的时候,需要开启硬件虚拟化,支持CPU VT-X
注:如果是物理机,需要在BIOS开启CPU VT-X
- 为Ubuntu分配至少2个网卡,其中Eth0将用于Ubuntu管理地址;Eth1用于业务网络(Geneve封装)
- 为了便于统一管理,选择将三块网络适配器,ens160、ens192和ens224分别改名为Eth0、Eth1和Eth2
- 编辑/etc/default/grub配置文件,修改如下字段:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
- 更新启动项
# grub-mkconfig -o /boot/grub/grub.cfg
# reboot
- 验证主机是否支持虚拟化,即CPU是否支持vt-x
运行以下命令,结果不为1,说明已经开启了vt-x
# egrep -c '(vmx|svm)' /proc/cpuinfo
- 初始化网络后,安装cpu-checker,用以验证KVM安装环境是否已经就绪
运行命令,检查KVM安装环境是否已经就绪
# kvm-ok
- 根据VMware官方文档,需要在Ubuntu KVM主机上安装如下软件包
#apt-get install -y qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils virtinst virt-manager virt-viewer libguestfs-tools - 在我实际的部署过程中,参考了国外大拿的推荐,建议各位可以跟着我一把梭
# apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils virtinst virt-manager virt-viewer libguestfs-toolslibunwind8 libgflags2v5 libgoogle-perftools4 traceroute python-mako python-simplejson python-unittest2 python-yaml python-netaddr libprotobuf9v5 libboost-chrono1.58.0 libgoogle-glog0v5 dkms libboost-date-time1.58.0 libleveldb1v5 libsnappy1v5 python-gevent python-protobuf ieee-data libyaml-0-2 python-linecache2 python-traceback2 libtcmalloc-minimal4 python-greenlet python-markupsafe libboost-program-options1.58.0
- 检查服务器的KVM服务是否正常运行
# /etc/init.d/qemu-kvm status
- 更新/etc/network/interfaces设置,以下给出一个参考示例:
注:对于KVM只安装NSXMGR-T等场景,不需要添加eth1或者eth2,作为Geneve网络承载网卡
- 创建桥接配置文件
# vim /var/lib/libvirt/images/bridge.xml
- 设置并启动桥接
# virsh net-define /var/lib/libvirt/images/bridge.xml
# virsh net-start bridge
- 设置桥接自动启动
# virsh net-autostart bridge
- 在KVM主机完成NSX主机准备后,可以看到多了vtep0.0接口
上述步骤是NSX-T2.4部署前的准备工作,在完成若干ESXi6.7和Ubuntu KVM安装与基本设置后,我们将开启NSX-T的学习之旅,最终各位可以看到的主机传输节点包括:
- VC管理的2台ESXi6.7服务器:
注意:管理与边界集群的ESXi6.7主机不属于“主机传输节点”
- 独立部署的2台KVM服务器:
那么,如何来安装部署NSXMGR,并实现主机节点的准备工作呢?我会在后一篇分享中向大家演示。