运行生产就绪的自动化

本节讨论如何在您企业自己的系统上 unmodified 运行 Cumulus 生产就绪的自动化。您可以测试、学习和体验由最佳实践 Ansible 自动化驱动的 Cumulus Linux,并试用官方支持的黄金标准配置和架构。

有关如何为自己的目的自定义、重用和改编这些模拟、自动化或 CI/CD 示例的更多详细信息,请参阅自定义生产就绪的自动化

系统要求

为了获得强大的模拟环境以及与 GitLab 的 CI/CD,NVIDIA 建议使用专用的、始终在线的企业级服务器。

通常,您不会在单独的开发环境中使用 NetQ 服务器;您只需要在 CI 测试中使用它,在 CI 测试中,您安装了 GitLab Runner 并将其注册到启用了 CI/CD 的项目中。

硬件要求

  • 至少 16GB 内存(不含 NetQ)- 建议 32GB 内存
  • 至少 256GB 磁盘 - 建议 1TB 以上磁盘
  • 建议使用 SSD (NetQ 要求)
  • 互联网连接,用于在模拟启动期间安装软件包
  • 至少八个 CPU 核心
  • 15104MB 内存(不含 NetQ)或 23296MB 内存(含 NetQ)

软件要求

  • 操作系统
    • Cumulus Linux 3.7.11 或更高版本
    • Cumulus NetQ 2.4 或更高版本(可选)
    • Ubuntu 16.04 或 18.04 (NVIDIA 尚未测试其他 Linux 发行版)
  • 软件包
    • Vagrant 2.2.4 或更高版本
    • Libvirt
    • Qemu
    • Git
  • Vagrant 插件
    • Vagrant-libvirt
    • Vagrant-scp

请参阅示例安装脚本,了解安装这些软件包依赖项以支持使用 Vagrant 和 libvirt 进行 Cumulus VX 模拟的示例 bash 脚本。

手动启动黄金标准拓扑

快速入门部分提供了使用 bash 脚本启动生产就绪的自动化演示的最简单方法。但是,如果您想更好地控制启动哪些节点以及启动顺序,则可以手动启动模拟。此方法可以节省 CPU 和内存资源。

要手动启动黄金标准演示拓扑,例如 EVPN 对称模式,请确保您还获取并拉取包含的 Cumulus Linux 基础参考拓扑。您可以通过以下两种方式之一执行此操作

  • --recurse-submodule 选项与初始 git clone 命令结合使用,以在与克隆相同的步骤中获取子模块文件。您将在下面的步骤中使用此选项。
  • 执行正常的 git clone 命令,然后使用 git submodule initgit submodule update 选项分别获取子模块文件。有关 Git 子模块的更多信息,请参阅本指南

当子模块文件正确下载后,cldemo2 文件夹将包含一个名为 simulation 的子文件夹。此 simulation 文件夹包含 Vagrantfile。仅当您从与模拟的 Vagrantfile 相同的目录中运行 vagrant 命令(如 vagrant ssh oob-mgmt-server)时,这些命令才有效。

要手动启动黄金标准拓扑

  1. 下载黄金标准自动化演示,例如 EVPN 对称模式。使用 --recurse-submodule 选项以确保 Git 也获取基础 NVIDIA 参考拓扑模拟文件。

    user@host:~# git clone --recurse-submodules https://gitlab.com/cumulus-consulting/goldenturtle/dc_configs_vxlan_evpnsym.git
    Cloning into 'dc_configs_vxlan_evpnsym'...
    remote: Enumerating objects: 535, done.
    remote: Counting objects: 100% (535/535), done.
    remote: Compressing objects: 100% (300/300), done.
    remote: Total 535 (delta 198), reused 465 (delta 133), pack-reused 0
    Receiving objects: 100% (535/535), 66.78 KiB | 1.45 MiB/s, done.
    Resolving deltas: 100% (198/198), done.
    Submodule 'cldemo2' (https://gitlab.com/cumulus-consulting/goldenturtle/cldemo2.git) registered for path 'cldemo2'
    Cloning into '/root/dc_configs_vxlan_evpnsym/cldemo2'...
    remote: Enumerating objects: 215, done.
    remote: Counting objects: 100% (215/215), done.
    remote: Compressing objects: 100% (119/119), done.
    remote: Total 852 (delta 139), reused 156 (delta 96), pack-reused 637
    Receiving objects: 100% (852/852), 7.64 MiB | 8.21 MiB/s, done.
    Resolving deltas: 100% (549/549), done.
    Submodule path 'cldemo2': checked out '214c8a66e3fef8f6d5d2b1e13ca3942e4cfd120f'
    
  2. 切换到上一步创建的文件夹,然后进入 cldemo2/simulation 子文件夹。这是 Vagrantfile 所在的目录,也是 vagrant 命令对本次模拟有效的目录。

    user@host:~# cd dc_configs_vxlan_evpnsym/cldemo2/simulation/
    user@host:~/dc_configs_vxlan_evpnsym/cldemo2/simulation#
    
  3. 运行 vagrant up 命令以启动带外管理设备。

    如果您不打算使用 NetQ,请省略 netq-ts 以节省 CPU 和内存资源消耗。

    您必须首先启动 oob-mgmt-server 和 oob-mgmt-switch。oob-mgmt-server 充当管理网络 DHCP 服务器。如果 oob-mgmt-server 和交换机未首先联机,则其他网络设备的管理接口将暂时无法访问。

    user@host:~/dc_configs_vxlan_evpnsym/cldemo2/simulation# vagrant up oob-mgmt-server oob-mgmt-switch netq-ts
    Bringing machine 'oob-mgmt-server' up with 'libvirt' provider...
    Bringing machine 'oob-mgmt-switch' up with 'libvirt' provider...
    Bringing machine 'netq-ts' up with 'libvirt' provider...
    ==> oob-mgmt-server: Checking if box 'generic/ubuntu1804' version '2.0.6' is up to date...
    ==> oob-mgmt-switch: Checking if box 'CumulusCommunity/cumulus-vx' version '3.7.11' is up to date...
    ==> netq-ts: Checking if box 'generic/ubuntu1804' version '2.0.6' is up to date...
    <output omitted for brevity>
    
  4. 运行 vagrant up 命令以启动其他网络设备。您可以使用 vagrant up 命令(不指定特定设备)启动模拟中的所有剩余节点。

    用于 libvirt 的 Vagrant 尝试并行启动设备。并行启动整个参考拓扑模拟有时可能会导致错误,从而导致部分或不完整的启动过程。NVIDIA 建议您以更小、更易于管理的组启动模拟。以下示例分四个单独的阶段启动模拟。每个阶段由 && 分隔,单独执行。该示例在一行中组合了这些串行化的阶段。

    Linux 中的 && 运算符仅在前一个命令成功时才执行下一个命令。如果发生错误,模拟启动过程将停止。

    user@host:~/dc_configs_vxlan_evpnsym/cldemo2/simulation# vagrant up /leaf/ /spine/ && vagrant up server01 server02 server03 server04 && vagrant up server05 server06 server07 server08 && vagrant up border01 border02 fw1 fw2
    
  5. 使用 vagrant ssh oob-mgmt-server 命令从 oob-mgmt-server 进入模拟

    user@host:~/dc_configs_vxlan_evpnsym/cldemo2/simulation# vagrant ssh oob-mgmt-server
                                                     _
          _______   x x x                           | |
     ._  <_______~ x X x   ___ _   _ _ __ ___  _   _| |_   _ ___
     (' \  ,' || `,        / __| | | | '_ ` _ \| | | | | | | / __|
     `   ._:^   ||   :>     | (__| |_| | | | | | | |_| | | |_| \__ \
         ^T~~~~~~T'       \___|\__,_|_| |_| |_|\__,_|_|\__,_|___/
         ~"     ~"
    
    ############################################################################
    #
    #  Out Of Band Management Server (oob-mgmt-server)
    #
    ############################################################################
    vagrant@oob-mgmt-server:~$
    
  6. 从模拟内部运行另一个 git clone 命令,从您的目标黄金标准演示项目(请参阅步骤 1)中获取自动化文件。或者,您可以运行 vagrant scp 命令将自动化文件复制到模拟中。

    vagrant@oob-mgmt-server:~$ git clone https://gitlab.com/cumulus-consulting/goldenturtle/dc_configs_vxlan_evpnsym
    Cloning into 'dc_configs_vxlan_evpnsym'...
    warning: redirecting to https://gitlab.com/cumulus-consulting/goldenturtle/dc_configs_vxlan_evpnsym.git/
    remote: Enumerating objects: 560, done.
    remote: Counting objects: 100% (560/560), done.
    remote: Compressing objects: 100% (310/310), done.
    remote: Total 560 (delta 214), reused 490 (delta 148), pack-reused 0
    Receiving objects: 100% (560/560), 70.27 KiB | 3.90 MiB/s, done.
    Resolving deltas: 100% (214/214), done.
    vagrant@oob-mgmt-server:~$
    
  7. 切换到项目文件夹,然后切换到 automation 子文件夹

    vagrant@oob-mgmt-server:~$ cd dc_configs_vxlan_evpnsym/automation/
    vagrant@oob-mgmt-server:~/dc_configs_vxlan_evpnsym/automation$
    
  8. 运行 deploy.yml playbook,并使用 -i 选项指定清单路径

    vagrant@oob-mgmt-server:~/dc_configs_vxlan_evpnsym/automation$ ansible-playbook playbooks/deploy.yml -i inventories/pod1 --diff
    
    PLAY [spine leaf border] ****************************************************************
    
    TASK [Gathering Facts] ****************************************************************
    Sunday 12 April 2020  23:35:25 +0000 (0:00:00.073)       0:00:00.073 **********
    ok: [spine03]
    ok: [spine04]
    ok: [spine02]
    ok: [spine01]
    ok: [leaf01]
    ok: [leaf02]
    ok: [leaf03]
    ok: [leaf04]
    ok: [border02]
    ok: [border01]
    <output omitted for brevity>
    

现在您拥有已部署且可运行的黄金标准 Cumulus Linux 架构。有关特定网络拓扑、IP 地址以及如何与演示中的功能进行交互的更多详细信息,请参阅演示项目页面上的 README.md 文件。

在云中的 Cumulus 中自动运行生产就绪的自动化

此方法是体验 Cumulus 黄金标准 EVPN VXLAN 演示配置的最终产品的最简单方法。此方法最适合快速跟踪所有模拟设置和配置,并开始测试任何官方黄金标准 EVPN-VXLAN 演示配置。

如果您想仔细查看自动化和部署过程,并查看基础设施即代码的实际示例,则需要克隆演示项目并手动运行自动化 playbook,以将配置作为代码呈现到网络设备中。此自动化过程会克隆您选择的演示存储库,并通过 NVIDIA Air UI 上的一些简单便捷的点击为您运行 Ansible 部署 playbook。

  1. 转到 NVIDIA Air 演示市场
  2. 通过单击卡片请求受支持的 NVIDIA 生产就绪的自动化演示之一

进入模拟控制台后,从左侧面板上的下拉菜单中选择一个演示。


  1. 单击启动
  2. 按照“引导式导览”面板上的说明测试和体验您选择的演示的独特方面。

从云中的 Cumulus 手动运行自动化演示

云中的 Cumulus 提供了最快的方式来享受使用最佳实践 Ansible 自动化配置完整数据中心并查看基础设施即代码工作示例的体验。通过消除模拟硬件和软件依赖项的复杂性,您可以坐在完全配置的数据中心的驾驶座上,在几分钟内测试自动化体验和任何演示解决方案架构。云中的 Cumulus 还包括一个免费的临时 NetQ 云帐户,以使用来自模拟的实时数据展示 NetQ 功能。

  1. 从云中的 Cumulus 模拟中的 oob-mgmt-server 开始。为了获得最佳体验,请使用 SSH 客户端连接。从 UI 中的服务窗口查找 SSH 客户端连接信息。

  2. 从您的目标黄金标准演示项目,运行 git clone 命令

    vagrant@oob-mgmt-server:~$ git clone https://gitlab.com/cumulus-consulting/goldenturtle/dc_configs_vxlan_evpnsym
    Cloning into 'dc_configs_vxlan_evpnsym'...
    warning: redirecting to https://gitlab.com/cumulus-consulting/goldenturtle/dc_configs_vxlan_evpnsym.git/
    remote: Enumerating objects: 560, done.
    remote: Counting objects: 100% (560/560), done.
    remote: Compressing objects: 100% (310/310), done.
    remote: Total 560 (delta 214), reused 490 (delta 148), pack-reused 0
    Receiving objects: 100% (560/560), 70.27 KiB | 3.90 MiB/s, done.
    Resolving deltas: 100% (214/214), done.
    vagrant@oob-mgmt-server:~$
    
  3. 切换到项目文件夹,然后进入 automation 子文件夹

    vagrant@oob-mgmt-server:~$ cd dc_configs_vxlan_evpnsym/automation/
    
  4. 运行带有 -i 选项的 deploy.yml playbook

    vagrant@oob-mgmt-server:~/dc_configs_vxlan_evpnsym/automation$ ansible-playbook playbooks/deploy.yml -i inventories/pod1 --diff
    
    PLAY [spine leaf border] ****************************************************************
    
    TASK [Gathering Facts] ****************************************************************
    Sunday 12 April 2020  23:35:25 +0000 (0:00:00.073)       0:00:00.073 **********
    ok: [spine03]
    ok: [spine04]
    ok: [spine02]
    ok: [spine01]
    ok: [leaf01]
    ok: [leaf02]
    ok: [leaf03]
    ok: [leaf04]
    ok: [border02]
    ok: [border01]
    ...
    

现在您拥有已部署且可运行的黄金标准 Cumulus Linux 架构。有关特定网络拓扑、IP 地址以及如何与演示中的功能进行交互的更多详细信息,请参阅演示项目页面上的 README.md 文件。

安装和配置 NetQ 云服务器

NVIDIA 参考拓扑包括一个 Ubuntu 18.04 服务器,该服务器具有额外的 CPU、内存和磁盘资源,以支持 NetQ 云服务器安装。Vagrant 为该系统配置了所有必需的软件包依赖项,因此您可以立即引导启动并安装 NetQ 服务器。在NetQ 文档中阅读有关此设置的更多信息。

要使用包含的 NetQ 云服务器,您必须具有以下各项

  • 具有 netq.cumulusnetworks.com 的有效 NetQ 云帐户。
  • 为虚拟化使用设置、配置和专用的附加站点(用于您的模拟环境的唯一 NetQ 配置密钥)。请勿将模拟拓扑与现有站点混合,也不要使用现有且正在使用的 NetQ 场所配置密钥。
  • NVIDIA 下载的 NetQ 引导启动 tarball。
  • NVIDIA 下载的 NetQ OPTA 安装 tarball。

NetQ 引导启动 tarball 和 NetQ OPTA 安装 tarball 是两个唯一的文件。

暂存 NetQ 安装 Tarball

用于在提供的 Ubuntu 服务器上安装 NetQ 应用程序的引导启动文件和安装文件的版本决定了要安装的 NetQ 应用程序和版本。安装过程使用 Cumulus NetQ Cloud 虚拟设备 (netq-ts) 上预安装的 NetQ 代理。您必须暂存从 NVIDIA 下载的 NetQ 引导启动 tarball 和安装 tarball 文件,以用于 NetQ 安装过程。

您可以将安装 tarball 暂存在以下两个位置之一

  • 在 netq-ts 的本地文件系统上。

    在您使用 vagrant up 启动模拟后,将引导启动 tarball 和安装 tarball 复制到 netq-ts 上(使用 scpvagrant scp)。

  • 在 netq-ts 可访问的远程 HTTP 服务器上。

    将引导启动 tarball 和安装 tarball 放置到 HTTP 服务器上。您将在引导启动和安装过程中获得 HTTP URL。

    您必须决定是将安装 tarball 文件直接暂存到服务器上以进行安装,还是将它们托管在 netq-ts 可以访问的远程 HTTP 服务器上。

    从 NVIDIA 下载时,安装 tarball 文件的名称如下

    • netq-bootstrap-X.Y.Z.tgz (引导启动 tarball)
    • NetQ-X.Y.Z-opta.tgz (安装 tarball)

    netq-bootstrapnetq-opta 映像版本号必须匹配。

从本地文件系统暂存

有关如何登录 NVIDIA 支持站点并下载 NetQ 文件的具体步骤,请参阅NetQ 文档。使用 SCP 将文件安全地复制到基于 Linux 的模拟主机上。

以下步骤向您展示如何将安装 tarball 文件复制到 /mnt/installables 目录(任何具有足够读取权限的目录都适合暂存这些文件)。对每个文件重复以下步骤

  1. 从 NVIDIA 下载这两个必需的安装文件

    • 引导启动
    • 设备(云)
  2. 将文件移动或复制到模拟主机上。SCP 是最常用的将文件推送到基于 Linux 的模拟主机的方法。

  3. 要将文件从模拟主机复制到 netq-ts 上的模拟,请运行 vagrant scp 命令。vagrant scp 插件使用 vagrant ssh,并受 vagrant 用户帐户权限的约束。将文件复制到 vagrant 用户具有权限的路径,例如 /home/cumulus/

    确保您从 simulation 文件夹(模拟的 Vagrantfile 所在的位置)内部运行 vagrant scp 命令。

    user@simulation-host:~/dc_configs_vxlan_evpnsym/cldemo2/simulation# vagrant scp /path/to/local/file/netq-boostrap-X.Y.Z.tgz netq-ts:/home/cumulus
    
    user@simulation-host:~/dc_configs_vxlan_evpnsym/cldemo2/simulation# vagrant scp /path/to/local/file/NetQ-X.Y.Z-opta.tgz netq-ts:/home/cumulus
    
  4. 运行 vagrant ssh 进入 netq-ts,然后将文件移动到 /mnt/installables 目录

    user@host:~/dc_configs_vxlan_evpnsym/cldemo2/simulation# vagrant ssh netq-ts
    vagrant@netq-ts:~$
    vagrant@netq-ts:~$ sudo mv /home/cumulus/netq-boostrap-X.Y.Z.tgz /mnt/installables/
    vagrant@netq-ts:~$ sudo mv /home/cumulus/NetQ-X.Y.Z.tgz /mnt/installables/
    

从远程 HTTP 服务器暂存

有关如何登录 NVIDIA 支持站点并下载 NetQ 文件的具体步骤,请参阅NetQ 文档。有关如何将 tarball 复制到远程 HTTP 服务器的具体步骤因具体的 HTTP 服务器软件而异。以下示例向您展示如何在基于 Debian 或 Ubuntu 的 Linux 系统上使用 Apache 设置 HTTP 服务器。

  1. 从 NVIDIA 下载这两个必需的安装文件
    • 引导启动
    • 设备(云)
  2. 安装 Apache2。
  3. 确认服务正在运行。
  4. 将 tarball 文件复制到 /var/www/html 目录(具有权限)。
  5. 为后续步骤派生 HTTP 暂存 URL。

安装 NetQ 应用程序

此过程安装 NetQ 云服务器应用程序,以便能够接收和聚合代理数据,并将数据安全地传输到与您的帐户关联的云。

  • 您必须将引导启动 tarball 和安装 tarball 文件暂存在 netq-ts 的本地文件系统上或从 netq-ts 可访问的远程 HTTP 服务器上。有关说明,请参阅上一节
  • 您需要与此模拟要驻留的 NetQ 站点/场所关联的 NetQ 配置密钥。您将通过电子邮件从 NVIDIA 收到密钥,作为 NetQ Cloud 入门的一部分。

有关安装 NetQ 的更完整信息,请参阅NetQ 文档。要完成 Cumulus 演示拓扑中的 NetQ 云服务器安装,请按照以下步骤操作

  1. 使用引导启动 tarball 执行 NetQ 服务器引导启动。

    • 使用 eth0 作为接口标识符。
    • <URL-path> 是本地文件系统绝对路径或以 http:// 开头的 HTTP 服务器 URL。
    vagrant@netq-ts:~$  netq bootstrap master interface eth0 tarball <URL-path>/netq-bootstrap-X.Y.Z.tgz
    2020-12-20 01:13:27.207201: master-node-installer: Extracting tarball <URL-path>/netq-bootstrap-X.Y.Z.tgz
    2019-12-20 01:14:44.157670: master-node-installer: Checking package requirements
    2019-12-20 01:15:10.402228: master-node-installer: Using eth0 IP X.X.X.X
    2019-12-20 01:15:10.812041: master-node-installer: Initializing kubernetes cluster
    -----------------------------------------
    Successfully bootstrapped the master node
    

    此步骤需要几分钟。

  2. 引导启动步骤完成后,使用 -opta.tgz 捆绑包执行 NetQ 应用程序安装。

    • 使用您的 NetQ 云场所的配置密钥。
    • <URL-path> 是本地文件系统绝对路径或以 http:// 开头的 HTTP 服务器 URL。
    vagrant@netq-ts:~$ netq install opta standalone full interface eth0 bundle <URL-path>/NetQ-X.Y.Z-opta.tgz config-key <your-config-key>
    2019-12-20  06:28:35.368116: master-node-installer: Installing in standalone mode
    2019-12-20  06:32:57.106586: master-node-installer: Installing infra components
    2019-12-20  06:34:06.365374: master-node-installer: Installing NetQ apps
    2019-12-20  06:40:31.810887: master-node-installer: Activating
    --------------------------------------
    Successfully installed the master node
    

(可选)配置 NetQ CLI 代理

NetQ CLI 是一个单独的守护程序,您可以独立于 NetQ 代理数据收集和遥测流守护程序对其进行配置。要完全完成演示环境中的 NetQ 安装,您还必须在要运行 netq CLI 命令的所有设备上配置和安装 CLI。在大多数部署中,这也与每个代理一起配置,以便您可以从网络中的任何设备获取所有 NetQ 数据。

您必须拥有一组为 NetQ 用户生成的授权密钥(访问密钥和密钥)。请参阅NetQ 文档以创建密钥。

要安装 CLI

  1. 从模拟中不使用管理 VRF 的设备(Ubuntu 主机和 NetQ 服务器本身)运行以下命令

    vagrant@netq-ts:~$ netq config add cli server api.netq.cumulusnetworks.com access-key <access-key> secret-key <secret-key> premise <netq-premise-name> port 443
    

    从模拟中使用管理 VRF 的设备(Cumulus Linux 节点,例如 leaf、spine、border 和 fw)运行以下命令

    cumulus@netq-ts:~$ netq config add cli server api.netq.cumulusnetworks.com access-key <access-key> secret-key <secret-key> premise <netq-premise-name> vrf mgmt port 443
    
  2. 重新启动 NetQ CLI 守护程序

     vagrant@netq-ts:~$ netq config restart cli
    
  3. 测试 NetQ CLI 命令

     vagrant@netq-ts:~$ netq show agents
    

要同时将 NetQ CLI 配置命令部署到多个设备,请使用来自 oob-mgmt-server 的 Ansible 临时命令。

以下示例向您展示如何在所有使用管理 VRF 的 Cumulus Linux 节点上配置 NetQ CLI

vagrant@oob-mgmt-server:~$ ansible spine:leaf:exit -a 'netq config add cli server api.netq.cumulusnetworks.com access-key <access-key> secret-key <secret-key> premise <netq-premise-name> vrf mgmt port 443'
vagrant@oob-mgmt-server:~$ ansible spine:leaf:exit -a 'netq config restart cli'

以下示例向您展示如何在 Ubuntu 主机上配置 NetQ CLI

vagrant@oob-mgmt-server:~$ ansible host -a 'netq config add cli server api.netq.cumulusnetworks.com access-key <access-key> secret-key <secret-key> premise <netq-premise-name> vrf mgmt port 443'
vagrant@oob-mgmt-server:~$ ansible host -a 'netq config restart cli'

清理孤立的模拟

当您使用 Vagrant 或从正在使用的项目中删除文件时,有时会发生错误。

要清理卡住或孤立的 libvirt 模拟

  1. 使用 virsh list --all 命令检查系统并查看所有正在运行的 libvirt 模拟。找到您要清理的 libvirt 域。模拟通常具有来自同一模拟的公共前缀,该模拟通常是父文件夹。

  2. 在您要清理的每个虚拟机(libvirt 域)上运行以下命令

    • virsh destroy <名称>
    • virsh undefine <名称>
    • virsh vol-delete --pool default <名称>.img

要清理与常见模式匹配的所有模拟,请运行此脚本

#for vm in $(virsh list --all | grep <match-pattern> | awk -F ' ' '{print$2}'); do virsh destroy $vm; virsh undefine $vm; virsh vol-delete --pool default $vm.img; done

在具有其他模拟的服务器和共享环境中使用此脚本时要小心,因为它不会提示确认,并且可能会意外删除您匹配的系统。