用于准备 Kubernetes 节点的大部分步骤都由两个容器 nsx-ovs 和 nsx-ncp-bootstrap(分别在 nsx-node-agent 和 nsx-ncp-bootstrap DaemonSet 中运行)自动执行。

安装 NCP 之前,请确保 Kubernetes 节点已安装 Python 并可通过命令行界面进行访问。您可以使用 Linux 软件包管理器来安装 Python。例如,在 Ubuntu 上,您可以运行命令 apt install python

对于 Ubuntu,安装 NSX-T CNI 插件会将 AppArmor 配置文件 ncp-apparmor 复制到 /etc/apparmor.d,并加载它。安装之前,AppArmor 服务必须运行且目录 /etc/apparmor.d 必须存在。否则,安装将失败。可以使用以下命令检查 AppArmor 模块是否已启用:
    sudo cat /sys/module/apparmor/parameters/enabled
可以使用以下命令检查 AppArmor 服务是否已启动:
    sudo /etc/init.d/apparmor status

ncp-apparmor 配置文件为 NSX 节点代理(称为 node-agent-apparmor)提供 AppArmor 配置文件,这与 docker-default 配置文件在以下方面有所不同:

  • 移除了 deny mount 规则。
  • 添加了 mount 规则。
  • 添加了一些 networkcapabilityfileumount 选项。

您可以使用不同的配置文件替换 node-agent-apparmor 配置文件。如果执行此操作,则必须在 NCP YAML 文件中更改配置文件名称 node-agent-apparmor

NSX NCP 引导容器可自动安装和更新主机上的 NSX CNI。在以前的版本中,NSX CNI 是通过 deb/rpm 软件包安装的。在该版本中,只是将文件复制到主机。引导容器将从软件包管理器的数据库中移除之前安装的 NSX CNI 组件。将删除以下目录和文件:
  • /etc/cni/net.d
  • /etc/apparmor.d/ncp-apparmor
  • /opt/cni/bin/nsx
引导容器会检查文件 10-nsx.conf,并在标记 nsxBuildVersion 中查找 CNI 版本号。如果此版本早于引导容器中的版本,则会将以下文件复制到主机:
  • /opt/cni/bin/nsx
  • /etc/cni/net.d/99-loopback.conf
  • /etc/cni/net.d/10-nsx.conf
  • /etc/apparmor.d/ncp-apparmor

如果文件 /opt/cni/bin/loopback/etc/cni/net.d/99-loopback.conf 存在,它们不会被覆盖。如果操作系统类型为 Ubuntu,则文件 ncp-apparmor 也会复制到主机。

引导容器会将 IP 地址和路由从 br-int 移动到 node-if。如果 OVS 在主机上运行,则引导容器还会停止 OVS,因为 OVS 将在 nsx-ovs 容器内运行。nsx-ovs 容器将创建 br-int 实例(如果不存在该实例),添加网络接口 (node-if)(该接口用于将节点逻辑交换机连接至 br-int),并确保 br-intnode-if 链路状态为“已启动”。它会将 IP 地址和路由从 node-if 移动到 br-int

注: 如果移除 nsx-node-agent DaemonSet,则主机上不会再运行 OVS(位于容器或主机 PID 中)。
更新网络配置,以使 IP 地址和路由永久有效。例如,对于 Ubuntu,编辑 /etc/network/interfaces(使用环境中的实际值,如果适用),使 IP 地址和路由永久有效:
auto eth1
iface eth1 inet static
address 172.16.1.4/24
#persistent static routes
up route add -net 172.16.1.3/24 gw 172.16.1.1 dev eth1

然后运行命令 ifdown eth1; ifup eth1

对于 RHEL,创建并编辑 /etc/sysconfig/network-scripts/ifcfg-<node-if> (使用环境中的实际值,如果适用)以使 IP 地址永久有效:
HWADDR=00:0C:29:B7:DC:6F
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=172.10.0.2
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV4_DNS_PRIORITY=100
IPV6INIT=no
NAME=eth1
UUID=39317e23-909b-45fc-9951-849ece53cb83
DEVICE=eth1
ONBOOT=yes

然后运行命令 systemctl restart network.service

有关为 RHEL 配置永久路由的信息,请参见https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/sec-configuring_static_routes_in_ifcfg_files

注: IP 和静态路由必须保留在上行链路接口(由 ovs_uplink_port 指定)中,以保证在虚拟机重新启动后不会丢失与 Kubernetes API 服务器的连接。

如有必要,您可以撤消由引导容器所做的更改。有关详细信息,请参见 清理 Kubernetes 节点