Apstra ZTP(设备)
Apstra ZTP 概述
本文档适用于 Apstra ZTP 4.1 版本。使用与您使用的 Juniper Apstra 版本对应的 Apstra ZTP 版本。(Apstra 版本早于 4.0 使用 Apstra ZTP 版本 1.0.0 或 2.0.0。有关更多信息,请参阅 Juniper Apstra 3.3.0 用户指南。)
Apstra ZTP 是一款全自动部署服务器,适用于数据中心基础架构系统。(Apstra ZTP 取代了社区支持的 Aeon-ZTPS 软件,该软件以前用于在 Apstra 环境中实施 ZTP。)Apstra ZTP 使您能够引导 Apstra 数据中心设备,而无需考虑底层 NOS 机制的差异。从 Apstra 的角度来看,ZTP 是一个过程,它将设备从初始启动迁移到 Apstra 通过设备系统代理进行管理的过程。
根据 ZTP 的配置方式,该过程可能包括(但不总是)以下功能:
- DHCP 服务
- 设置设备管理员/root 密码
- 为设备系统代理创建设备用户
- 升级/降级 NOS
- 上机或异机设备系统代理安装
另请参阅特定于供应商的信息:
为了防止在 ZTP 过程中出现问题时被锁定在设备外,ZTP 使用默认的硬编码凭据。这些凭据包括:
- root/admin
- 奥萨明/奥萨明
您可以使用 Apstra 提供的虚拟机映像 (.ova
, .qcow2.gz
, .vhdx.gz
) 或构建自己的 ZTP 服务器,并将 Apstra 提供的设备调配脚本用作现有 ZTP/DHCP 过程的一部分,在启动过程中自动在设备上安装代理。Apstra ZTP 参考实施包含以下三个阶段:
- 通用 DHCP 阶段
- 设备通过 DHCP 请求 IP 地址。
- 设备将收到分配的 IP 地址和要执行的脚本指针(或使用 Apstra 提供的虚拟机映像,则接收要安装的操作系统映像)。
- 初始化阶段
- 设备使用 TFTP 下载 ZTP 脚本。
- 设备执行下载的脚本,准备进行管理。这包括验证设备是否运行受支持的操作系统。
- 代理安装阶段
- ZTP 脚本会进行 API 调用,在设备上安装设备系统代理。
Apstra ZTP 虚拟机服务器资源要求
Apstra ZTP 作为 Ubuntu 18.04 LTS 服务器运行,运行 DHCP、HTTP 和 TFTP 服务器,并且 Apstra 提供的 ZTP 脚本必须针对您的环境进行自定义。下表显示了生产环境的最低服务器规格:
资源 | 设置 |
---|---|
访客操作系统类型 | Ubuntu 18.04 LTS 64 位 |
记忆 | 2 GB |
Cpu | 1 个 vCPU |
磁盘存储 | 64 GB |
网络 | 至少 1 个网卡。首次为 DHCP 配置 |
Apstra ZTP 网络要求
源 | 目标 | 端口 | 角色 |
---|---|---|---|
设备代理 | DHCP 服务器(续订)和广播(请求) | udp/67 -> udp/68 | DHCP 客户端 |
设备代理 | Apstra ZTP | any -> tcp/80 | Bootstrap 和 API 脚本 |
Arista 和 Cisco 设备代理 | Apstra ZTP | any -> udp/69 | 用于 POAP 和 ZTP 的 TFTP |
Apstra ZTP | 控制器 | any -> tcp/443 | 设备系统代理安装程序 API |
除了 ZTP 特定的网络要求外,Apstra ZTP 服务器和设备代理还需要与控制器的连接。有关更多信息,请参阅 Juniper Apstra 安装和升级指南 中的所需通信端口。
您可以从 Apstra GUI 监控设备 ZTP 状态。在左侧导航菜单中,导航至 “设备> ZTP 状态>设备”。
每个与 DHCP 和 ZTP 交互的设备都会随其系统 ID(序列号)(如果已知、ZTP 状态、ZTP 最新事件和上次更新设备状态)一起列出。
要查看设备的完整 DHCP 和 ZTP 日志,请单击“Show Log”图标。
系统列出了与 DHCP 或 ZTP 交互的任何设备。如果不再需要设备的日志,请单击 Delete 按钮。
所有进程的日志文件都在目录中 /containers_data/logs
。
root@apstra-ztp:/containers_data/logs# ls -l total 7132 -rw-r--r-- 1 root root 6351759 Oct 28 17:47 debug.log drwxr-xr-x 2 root root 4096 Oct 27 19:20 devices -rw------- 1 root root 0 Oct 23 20:02 dhcpd.leases -rw-r--r-- 1 root root 926980 Oct 28 17:39 info.log -rw------- 1 root root 58 Oct 23 20:02 README -rw------- 1 root root 469 Oct 27 02:13 rsyslog.log root@apstra-ztp:/containers_data/logs# tail info.log 2020-10-28 17:16:38,786 root.status INFO Incoming: dhcpd dhcpd[18]: DHCPACK on 192.168.59.9 to 04:f8:f8:6b:36:91 via eth0 2020-10-28 17:18:04,299 root.status INFO Incoming: dhcpd dhcpd[18]: DHCPREQUEST for 192.168.59.9 from 04:f8:f8:6b:36:91 via eth0 2020-10-28 17:18:04,300 root.status INFO Incoming: dhcpd dhcpd[18]: DHCPACK on 192.168.59.9 to 04:f8:f8:6b:36:91 via eth0 2020-10-28 17:19:29,250 root.status INFO Incoming: dhcpd : -- MARK -- 2020-10-28 17:19:29,442 root.status ERROR Failed to update status of all containers: /api/ztp/service 404 b'{"errors":"Resource not found"}' 2020-10-28 17:33:29,353 root.status INFO Incoming: tftp : -- MARK -- 2020-10-28 17:33:29,538 root.status ERROR Failed to update status of all containers: /api/ztp/service 404 b'{"errors":"Resource not found"}' 2020-10-28 17:33:34,768 root.status INFO Incoming: status : -- MARK -- 2020-10-28 17:39:29,349 root.status INFO Incoming: dhcpd : -- MARK -- 2020-10-28 17:39:29,539 root.status ERROR Failed to update status of all containers: /api/ztp/service 404 b'{"errors":"Resource not found"}' root@apstra-ztp:/containers_data/logs#
您可以通过 Apstra GUI 监控 Apstra ZTP 服务器上的 ZTP 服务。从左侧导航菜单中,导航至 “> ZTP 状态>服务的设备”。
每个服务名称都包含其 Docker IP 地址、服务状态以及上次更新服务状态的时刻。
下载和部署 Apstra ZTP 虚拟机
配置静态管理 IP 地址 (Apstra ZTP)
默认情况下,Apstra ZTP 服务器会尝试通过 DHCP 为其 eth0 接口分配 IP 地址。如果您使用 Apstra ZTP 服务器作为 DHCP 服务器,则必须设置静态管理 IP 地址。
配置 ZTP 用户
您可以使用任何具有 API 写访问权限(例如管理员)的已配置 Apstra GUI 用户,但我们建议您创建一个指定用户(例如“ztp”),该用户分配了预定义的角色 device_ztp。device_ztp 角色允许用户对控制器进行 API 调用,以请求设备系统代理安装。有关更多信息,请参阅 用户/角色管理。
配置 DHCP 服务器
Apstra 软件随 ISC DHCP 服务器一起提供,用于设备管理网络。如果您使用不同的 DHCP 服务器,则负责为 Apstra 提供的 DHCP 服务器配置本指南中介绍的相同选项。
例如,如果您使用 Juniper Junos OS 或 Junos OS 演化型设备,则必须确保服务器包含以下内容,以便设备加载正确的配置文件。
option space JUNIPER option JUNIPER.config-file-name code 1 = text option JUNIPER-encapsulation code 43 = encapsulate JUNIPER option user-class-information code 77 = text; class "juniper" { match if (substring(option vendor-class-identifier, 0, 7) = "Juniper") and not (suffix(option user-class-information, 4) = "-EVO"); option JUNIPER.config-file-name "junos_apstra_ztp_bootstrap.sh"; } class "juniper-evo" { match if (substring(option vendor-class-identifier, 0, 7) = "Juniper") and (suffix(option user-class-information, 4) = "-EVO"); option JUNIPER.config-file-name "ztp.py"; }
DHCP 配置文件位于目录中的 Apstra ZTP 虚拟机上 /containers_data/dhcp
。
admin@apstra-ztp:~$ sudo ls -l /containers_data/dhcp total 16 -rw------- 1 root root 2533 Oct 21 00:35 dhcpd.conf -rw------- 1 root root 146 Oct 21 00:35 Dockerfile -rw------- 1 root root 932 Oct 21 00:35 init.sh -rw------- 1 root root 1896 Oct 21 00:35 rsyslog.conf admin@apstra-ztp:~$
所有配置文件均由 root
。您必须使用 sudo 来运行命令,就像使用命令一sudo
样root
,或者在使用root
sudo -s
命令后运行命令。
配置 ZTP 的控制器 IP 地址
在 Apstra ZTP 服务器上的文件中配置控制器 IP 和 Apstra ZTP 用户名 /containers_data/status/app/aos.conf
。
admin@apstra-ztp:~$ sudo nano /containers_data/status/app/aos.conf admin@apstra-ztp:~$ sudo nano /containers_data/status/app/aos.conf
{ "ip": "192.168.59.3", "user": "ztp", "password": "ztp-user-password" }
ip |
控制器的 IP 地址 |
user |
ZTP 或管理员用户的用户名 |
password |
用户密码 |
编辑 Apstra ZTP 配置文件
Apstra ZTP VM 包括一个 TFTP 和 nginx HTTP 服务器。这些服务器不需要配置。这两个服务器都从目录中提供 /containers_data/tftp
文件。(从 Apstra 4.1.0 版开始,Cumulus 不再受支持。)
admin@apstra-ztp:~$ sudo ls -l /containers_data/tftp/ total 232 -rwxr-xr-x 1 root root 2448 Apr 24 00:47 config_verifier.py -rwxr-xr-x 1 root root 393 Apr 24 00:47 container_init.sh -rwxr-xr-x 1 root root 170 Apr 24 00:47 cumulus_custom.sh -rwxr-xr-x 1 root root 55 Apr 24 00:47 cumulus_license_file -rwxr-xr-x 1 root root 192 Apr 24 00:47 Dockerfile -rwxr-xr-x 1 root root 107 Apr 24 00:47 eos_custom.sh -rwxr-xr-x 1 root root 5393 Apr 24 00:47 junos_apstra_ztp_bootstrap.sh -rwxr-xr-x 1 root root 1799 Apr 24 00:47 junos_custom.sh -rwxr-xr-x 1 root root 86 Apr 24 00:47 nxos_custom.sh -rwxr-xr-x 1 root root 205 Apr 24 00:47 poap-md5sum -rwxr-xr-x 1 root root 1843 Apr 24 00:47 rsyslog.conf -rwxr-xr-x 1 root root 170 Apr 24 00:47 sonic_custom.sh -rwxr-xr-x 1 root root 1910 Apr 24 00:47 ztp.json -rwxr-xr-x 1 root root 86599 Apr 24 00:48 ztp.py -rw------- 1 root root 86556 Apr 24 00:48 ztp.py.md5 admin@apstra-ztp:~$
该文件 ztp.json
包含 Apstra ZTP 脚本 ztp.py
的所有配置。
ztp.json
使用 vi 或纳米文本编辑器编辑文件。admin@apstra-ztp:~$ sudo nano /containers_data/tftp/ztp.json
- 该文件
ztp.json
的组织方式如下:默认值 - 所有设备均使用值,除非定义了更具体的密钥。 "defaults": { "device-root-password": "root-password-123", "device-user": "admin", "device-user-password": "admin-password-123", "system-agent-params": { "agent_type": "onbox", "install_requirements": false } }
平台 - 除非定义了更具体的密钥,否则将用于网络平台的所有设备(“nxos”、“eos”、“junos”、“sonic”)。 "sonic": { "sonic-versions": ["SONiC-OS-3.4.0-Enterprise_Advanced"], "sonic-image": "http://10.85.24.52/sonic/3.4.0/sonic-3.4.0-GA-adv-bcm.bin", "device-root-password": "admin", "device-user": "admin", "device-user-password": "admin", "custom-config": "sonic_custom.sh", "system-agent-params": { "agent_type": "onbox", "job_on_create": "install" } }
模型 - 值用于特定设备型号(例如“QFX10002-36Q”)的所有设备。 "QFX10002-36Q": { "junos-versions": ["21.2R1-S2.2"], "junos-image": "http://10.85.24.52/juniper/21.2R1-S2.2/jinstall-host-qfx-10-f-x86-64-21.2R1-S2.2-secure-signed.tgz" }
序列号 - 值用于与特定设备序列号匹配的设备(例如“TH0TFD6TCET0015G0015”)。 "TH0TFD6TCET0015G0015": { "sonic-versions": ["SONiC-OS-4.0.5-Enterprise_Advanced"], "sonic-image": "http://10.85.24.52/sonic/4.0.5/sonic-broadcom-enterprise-advanced-4.0.5-GA.bin" }
更具体的数据优先于其他数据。例如,特定序列号的数据优先于任何其他数据,然后是模型,然后是平台,最后是默认数据。
ztp.json
文件使用以下密钥:junos-versions
- 瞻博网络 Junos 设备的有效版本。如果设备未运行此列表中的版本,ZTP 会使用junos-image
映像升级设备。"junos-versions": [ "20.2R2-S3.5" ]
junos-image
- 如果正在运行的版本与列表中某个版本不匹配,则要加载的瞻博网络 Junos TGZ 映像的junos-versions
文件名。- 默认情况下,映像名称通过 TFTP 从 ZTP 服务器目录中加载从 ZTP 服务器
/container_data/tftp/
。例如:"junos-image": "jinstall-host-qfx-5-20.2R2-S3.5-signed.tgz"
-
要使用任何 HTTP 服务器进行图像传输,请输入带 IP 地址的有效 HTTP URL。例如:
"junos-image": "http://192.168.59.4/jinstall-host-qfx-5-20.2R2-S3.5-signed.tgz"
此示例使用控制器中的 HTTP 传输瞻博网络 Junos 映像。
sonic-versions
- SONiC 设备的有效版本。如果设备未运行此列表中的版本,ZTP 会使用sonic-image
映像升级设备。"sonic-versions": [ "SONiC-OS-3.1.0a-Enterprise_Base" ]
sonic-image
- 如果正在运行的版本与列表中的版本不匹配,则要加载的 SONiC ONIE BIN 映像的sonic-versions
文件名。- 默认情况下,映像名称通过 TFTP 从 ZTP 服务器目录中加载从 ZTP 服务器
/container_data/tftp/
。例如:"sonic-image": "sonic-3.1.0a-bcm.bin"
- 要使用任何 HTTP 服务器进行图像传输,请输入带 IP 地址的有效 HTTP URL。例如:
"sonic-image": "http://192.168.59.3/sonic-3.1.0a-bcm.bin"
此示例使用控制器中的 HTTP 传输 SONiC 映像。
nxos-versions
- NX-OS 设备的有效版本。如果设备未运行此列表中的版本,ZTP 会使用nxos-image
映像升级设备。"nxos-versions": [ "9.2(2)", "9.3(6)" ]
nxos-image
- 如果正在运行的版本与列表中的版本不匹配,则要加载的 NX-OS 映像的nxos-versions
文件名。- 默认情况下,映像名称通过 TFTP 从 ZTP 服务器目录中加载从 ZTP 服务器
/container_data/tftp/
。例如:"nxos-image": "nxos.9.3.6.bin"
- 要使用任何 HTTP 服务器进行图像传输,请输入带 IP 地址的有效 HTTP URL。例如:
"nxos-image": "http://192.168.59.4/nxos.9.3.6.bin"
此示例使用 ZTP 服务器的 HTTP 传输 Cisco NX-OS 映像。
eos-versions
- Arista EOS 设备的有效版本。如果设备未运行此列表中的版本,ZTP 会使用eos-image
映像升级设备。"eos-versions": [ "4.22.3M", "4.24.5M" ]
eos-image
- 如果正在运行的版本与列表中的版本不匹配,要加载的 Arista EOS SWI 映像的eos-versions
文件名。-
默认情况下,映像名称通过 TFTP 从 ZTP 服务器目录中加载从 ZTP 服务器
/container_data/tftp/
。例如:"eos-image": "EOS-4.24.5M.swi"
-
要使用任何 HTTP 服务器进行图像传输,请输入带 IP 地址的有效 HTTP URL。例如:
"eos-image": "http://192.168.59.3/dos_images/EOS-4.24.5M.swi"
此示例使用控制器中的 HTTP 传输 Arista EOS 图像。
device-root-password
- ZTP 进程将设备 root 密码设置为此值。对于 Arista EOS 和 Cisco NX-OS 设备,device-root-password
它用于为系统admin
密码设置密码。"device-root-password": "root-admin-password"
device-user
/device-user-password
- 用于设备系统代理的用户名和密码。此外,如有必要,ZTP 进程会使用此用户名和密码在设备上创建一个用户。"device-user": "aosadmin", "device-user-password": "aosadmin-password"
custom-config
- TFTP 目录中自定义配置 shell 脚本的文件名或指向 HTTP 服务器上文件的 URL。此 shell 脚本在 ZTP 期间运行,允许您向设备添加自定义配置。有关更多信息,请参阅下方的平台特定信息部分。"custom-config": "sonic_custom.sh"
system-agent-params
用于在设备上创建新用户和设备系统代理的信息,如下所述。。 agent_type
- 代理类型、收件箱或异箱代理"agent_type": "onbox"
install_requirements
- 始终设置为 false。目前不需要任何受支持的网络操作系统。"install_requirements": false
job_on_create
- 设置为install
在设备上安装机上代理"job_on_create": "install"
Junos 示例
{ "junos": { "junos-versions": ["21.2R1-S2.2"], "junos-image": "http://10.85.24.52/juniper/21.2R1-S2.2/jinstall-host-qfx-5e-x86-64-21.2R1-S2.2-secure-signed.tgz", "device-root-password": "root123", "device-user": "admin", "device-user-password": "admin", "system-agent-params": { "platform": "junos", "agent_type": "offbox", "job_on_create": "install" } }, "QFX10002-36Q": { "junos-versions": ["21.2R1-S2.2"], "junos-image": "http://10.85.24.52/juniper/21.2R1-S2.2/jinstall-host-qfx-10-f-x86-64-21.2R1-S2.2-secure-signed.tgz" }, "JNP10002-60C [QFX10002-60C]": { "junos-versions": ["21.2R1-S1.3"], "junos-image": "http://10.85.24.52/juniper/21.2R1-S1.3/junos-vmhost-install-qfx-x86-64-21.2R1-S1.3.tgz" } }
platform
-(仅适用于异机代理)设置为设备平台(“eos”、“nxos”、“junos”)。仅小写。"platform": "junos"
open_options
-(仅限异机代理)设置为在非设备代理到设备 API 接口之间启用 HTTPS。如果未定义open_options,则连接默认为 HTTP。"open_options": { "proto": "https", "port": "443" }
packages
- 设置以配置要上传到系统代理的其他 SDK 或扩展遥测包。"packages": [ "aos-deployment-helper-nxos", "aosstdcollectors-builtin-nxos", "aosstdcollectors-custom-nxos" ]
- 默认情况下,映像名称通过 TFTP 从 ZTP 服务器目录中加载从 ZTP 服务器
有关中所有可用 system-agent-params
选项的 /api/system-agents
REST API 文档,请参阅 Swagger。