简介:《Arista Networks:Arista EOS 操作系统深入解析》是一份面向网络工程师、网络运维及自动化开发者的专题文档,系统讲解 Arista EOS 的架构特性、自动化接口与基础配置方法。文档首先概述 EOS 的定位与核心特性,然后分别讲解分布式架构的原理、模块化设计的优势,以及网络自动化的实现方式;在自动化部分重点介绍 eAPI、Configlet、Ansible 集成三类工具,并详细给出基于 pyeapi 的 Python 脚本和 Ansible YAML playbook 实例,覆盖接口描述、端口开启、状态验证等典型配置场景;最后整理 CLI 常用命令与接口配置详解,例如进入配置模式、设置主机名、查看运行配置、保存配置、重启设备等,便于读者对照练习。资源共1个docx文件,压缩包仅28KB,内容精炼、结构清晰。目前已有93人学习,适合希望理解现代数据中心网络操作系统,并从架构层面掌握 EOS 自动化配置与排障思路的工程师。
1. EOS 操作系统在谈什么:先搞清定位,再学它
刚拿到这个标题时,我的第一个想法是:EOS 大概又是一套长得像传统交换机命令行的那种系统。真正开始用之后才发现,它的底层是一套完整的 Linux 系统,配置会同步到一个集中式状态数据库里,控制平面进程可以独立重启,不需要因为一次小改动就整台设备重启。理解 EOS,不能只背命令,要先搞清它的进程模型和启动链路。下面从系统架构、命令行、网络功能到常见踩坑,把 EOS 操作系统拆开讲。适合两类人:正在做网络设备选型或准备从传统命令行迁移的从业者,以及手里有设备但只会抄配置、想真正看懂背后逻辑的工程师。
2. EOS 的系统骨架:从 Linux 进程到启动链路
2.1 为什么要按进程拆:稳定性和可恢复性
传统网络设备往往把控制面做成一整块“铁板”,所有协议和转发逻辑堆在一个大进程里。这样做的好处是实现简单,但代价也很大:一个模块出错常常波及全局,最坏的情况只能整台设备重启。EOS 的做法不同,它把控制面拆成一个个独立进程,跑在 Linux 内核的用户空间里。路由协议、接口管理、状态库、日志系统各司其职,彼此通过共享状态协作,而不是互相调用全部内部接口。
这种进程级拆分带来的第一个收益是恢复粒度变细了。比如某个 BGP 实例报错,系统可以单独重启对应的协议进程,其他路由进程和接口进程不受影响。在企业级业务里,这直接关系到可用性:同样是一次故障,传统设备可能需要 reload,业务中断几分钟;EOS 场景下可能只是协议进程短暂重启,数据面继续运行,恢复时间被压到很窄。
拆分的第二个价值在升级和功能演进。控制面模块可以独立启用,配置管理、策略引擎这些能力不需要和转发硬件强绑定。你在 CLI 里看到的很多功能,本质上都是在调用一组用户态服务。这也是为什么 EOS 在自动化接口、可观测性这些方面比传统命令行更开放。它不是一个封闭的嵌入式系统,而是一个带有网络能力的 Linux 平台。
但拆分也有代价。EOS 排障不再只是“show running-config”一条路走到底,你需要面对进程状态、系统日志、甚至 Linux 文件系统这些概念。很多传统工程师刚到 EOS 时最不习惯的,是命令行里居然能直接进 bash。这个入口恰恰是解决疑难问题的钥匙,别绕开它。
2.2 登录后台的观察路径:bash 与进程视图
EOS 的 CLI 里输入bash会进入 Linux shell。第一件值得做的事情,是看进程视图:
bash ps -ef | grep -E "Bgp|Rib|Sysdb|Lag" | grep -v grep top -b -n 1 | head -20 exitps -ef输出所有进程,grep过滤出与路由、状态库相关的名字;top -b -n 1以批处理模式取一次 CPU 快照,head -20限制行数,防止终端被刷屏。第一次执行时你大概率会看到不止一个与协议相关的进程名,这是多进程架构的正常表现。如果某个进程名反复出现或长时间处于关闭状态,就要去查对应日志。
进程视图之外,启动配置也在文件系统里落盘。常见位置是/mnt/flash/startup-config。用 bash 可以确认配置是否真的写入:
bash ls -l /mnt/flash/startup-config head -50 /mnt/flash/startup-config exitls -l看文件大小和生成时间,head -50看前 50 行,确认内容是否与当前生效配置一致。有一点要强调:只查看,不要直接编辑这个文件。配置变更必须走 CLI 的 configure 模式,再显式保存,否则文本格式一旦出错,启动阶段会解析失败。这个问题会在后面的避坑章节单独展开。
再看启动链路。EOS 设备上电后,先由 bootloader 加载镜像,Linux 内核启动,然后初始化各种硬件抽象层,最后拉起控制面进程。这个过程和服务器启动很像。如果设备在 bootloader 阶段就卡住,多半是镜像损坏或存储介质问题;如果系统服务起来但配置没加载,说明 startup-config 解析出错。分清这两个阶段,排障时能省掉大量无意义的配置检查。
2.3 状态库与配置生成:从文本到运行态
EOS 的配置管理不是“把 startup-config 文件原样读入内存”。CLI 中输入的配置先被规范化,写进一个集中式状态库,再由状态库通知各进程更新自己的运行态。这样带来的结果是:show running-config输出的是标准化视图,可能包含协议自动生成的默认行;你删掉一条显式配置,进程仍可能按默认值继续运行。
这个设计让排障思路发生变化。当配置看起来正确、行为却不对时,先不要怀疑“文本被谁改了”,而是去看进程实际订阅了哪些状态。典型例子是:你在配置中删除了一个 VRF,但某些接口或路由条目仍引用旧 VRF,可能导致配置回滚或无法提交。这时候单纯看命令片段不够,要看整体状态是否一致。
要把这套架构理解扎实,建议你在实验设备上做一次小验证:
- 配置一个 VLAN 和对应 SVI。
- 进入 bash,观察相关状态文件和配置落盘文件的变化。
- 回到 CLI 删除这条配置。
- 再次进入 bash,查看状态和文件差异。
不在这里给出具体文件列表,因为不同版本落地路径不完全一样。但只要你按这个顺序操作一遍,就会直观感觉到 EOS 的配置不是简单文本 diff,而是经过语义化流程。这种体感比任何架构图都更有用。
还有一个值得说的点:状态库让设备的可观测性从“看配置文本”升级成“查运行状态”。比如你要确认某条路由是否真正被接受,可以看 BGP 进程维护的 RIB 状态,而不是只看配置里有没有network命令。调试复杂协议故障时,这种视角是 EOS 相比传统命令行最加分的地方。
2.4 第一现场:日志与进程状态
设备行为异常时,第一件事不是改配置,而是看日志。EOS 的 CLI 里有show logging,可以查看本地日志缓存;需要看最后一段时,可以配合last参数。
show logging show logging last 100show logging输出系统日志,默认可能包含接口、协议、安全等多个模块的条目;show logging last 100只看最后 100 条,适合快速定位最近的异常。日志里的时间戳要和 NTP 对得上,否则分析故障顺序时会很难受。
如果日志里反复出现某个进程被拉起或关闭的记录,多半是控制面模块不稳定。这时候再配合bash ps看进程实际状态,基本能判断是资源不足、配置触发,还是硬件告警。别在没看日志的情况下盲目 reload,那样会把最有价值的第一现场丢光。
3. 用命令行跑通第一台设备:关键模式与最小配置
3.1 三种模式:exec、configure、interface
EOS 的 CLI 看起来眼熟,但层级感比传统设备更明确。第一次登录时在 exec 模式,提示符是主机名;输入enable后进入更高权限的 exec,可以执行调试和 reload 类命令;输入configure terminal进入全局配置模式;在全局配置下再进入某个接口,就是接口配置模式。三种模式层层递进,命令补全和?帮助非常直观,不怕敲错。
以管理口开局为例,最小配置如下:
enable configure terminal hostname leaf01 interface Management1 ip address 192.0.2.10/24 no shutdown exit ip route vrf MGMT 0.0.0.0/0 192.0.2.1 exit copy running-config startup-confighostname leaf01设置主机名,提示符会跟着变;interface Management1进入管理口,EOS 的管理口并不是一个隐藏接口,而是和其他口一样可配置;ip address 192.0.2.10/24使用前缀长度写法,EOS 也支持点分十进制掩码;no shutdown是打开接口的通用动作;ip route vrf MGMT 0.0.0.0/0 192.0.2.1给管理 VRF 补一条默认静态路由,因为管理口默认在 MGMT VRF 里。
如果不写这条 VRF 静态路由,管理地址只能和同网段互通,跨网段必然不通。这是新手在 EOS 上遇到的第一个典型坑。设备是否真的可达,建议在当地用ping和ssh各验证一次,不要只看show ip int br里地址在不在。
3.2 配置回显与检查:先看差异,再决定下一步
刚上手的人最容易犯的错,是配置完马上想“生效”,直接对端口做 shutdown 再 no shutdown。其实很多配置根本不需要物理抖动。改完配置后,先看运行配置和启动配置的差异,再决定是否需要重启相关进程。
检查运行配置用show running-config,检查落盘配置用show startup-config。两者不一致时,说明还有未保存的改动。保存命令最常用的是copy running-config startup-config,它的作用是把当前生效配置写入启动配置。这里有一个细节:EOS 里有些修改是“即改即生效”的,比如接口地址;有些修改需要协议进程重新加载配置,但 CLI 通常在会话内就完成了。真正需要单独执行的重载动作并不多。
比较稳妥的做法是:每完成一个配置步骤,就show一次相关片段;整个会话收尾时,再对照show running-config和show startup-config。如果设备是生产环境,还要把变更窗口、备份配置、回退方案写在一起。EOS 支持清理未提交的配置会话,但依赖版本和技术细节,别把清理当常规手段。
3.3 保存与重启验证:把配置变成事实
设备运行中,运行配置是当前生效的,启动配置是下次启动加载的。两者一旦不一致,计划内重启后生效内容会丢。这是很多线上故障的根源:工程师配置完忘了保存,设备被机房断电重启,所有变更全部回滚。
copy running-config startup-config show startup-configcopy把当前运行配置写到闪存,show startup-config验证落盘结果。如果你要做一次完整的开机验证,可以在维护窗口执行reload,然后观察设备是否能按预期启动。生产环境不要因为一条小配置就急着整机重启,EOS 多数控制面进程可以单独拉起;具体操作方式因版本而异,先用bash ps看清进程,再决定是不是需要重启。
这里还要说一个习惯:保存配置不是只在改动之后做一次,而是在每次“配置变更完成、验证通过”后都做一次。一次开局可能涉及几十条命令,等到全部配完再保存,中间任何一次误操作都可能把错误也写进去。分步保存、分步验证,是可控的。
3.4 用 show 命令建立排查基线
开工之前,先跑一组show命令,把设备的初始状态存档。等出了问题,拿当时的状态和现在对比,能少走很多弯路。
| 命令 | 用途 | 关键输出 |
|---|---|---|
show version | 查看系统镜像和运行时长 | 版本号、启动时间、升级历史 |
show interfaces status | 查看物理口和管理口状态 | 端口是否 up、速率、协商模式 |
show ip interface brief | 查看三层接口地址 | VRF、IP、接口状态 |
show running-config | 查看当前生效配置 | 当前完整配置 |
show startup-config | 查看落盘配置 | 重启后生效的配置 |
这组命令不解决具体问题,但能建立基线。版本决定命令差异,端口状态决定后续排障方向,配置快照能用来回滚。我把这套动作称为“开局五连看”,每次处理新设备都先跑一遍。
4. 网络功能落地的常见套路:二层、三层、BGP
4.1 二层:VLAN 与 trunk 口
二层配置是开局基础。EOS 的 VLAN 配置方式和常见交换机相似,但生成树、端口安全等默认策略不同,不要带着惯性直接照抄。
configure terminal vlan 100 name users exit interface Ethernet1 switchport mode trunk switchport trunk allowed vlan 100 exitvlan 100创建 VLAN,name users给 VLAN 一个可读名字;interface Ethernet1进入物理口,switchport mode trunk把它设成 trunk;switchport trunk allowed vlan 100只放行指定 VLAN。实际开局时,上联链路通常还要放行管理 VLAN,不能把所有 VLAN 都过滤掉,否则管理面会失控。
查看二层配置可以用show vlan看 VLAN 状态,用show interfaces Ethernet1 switchport看端口模式。如果端口没起来,先看物理口状态,再看协商模式。EOS 对光模块检测比较严格,插上没起来时换一根线或重新插拔模块往往比改配置更快。这里有个常见误区:软件层面no shutdown了,但光模块或线缆本身有问题,端口会一直处于 down 状态。不要反复改配置,先排除物理层。
在存在多台设备互连的环境里,trunk 两端 VLAN 列表必须一致。我一般会把允许 VLAN 列表写得明确,而不是用默认放行所有 VLAN。这样后续排查二层环路或广播域扩大时,少一条链路就少一分风险。
4.2 三层:SVI 与静态路由
要让不同 VLAN 互访,需要做三层转发。EOS 中路由开关默认是关闭的,所以先要开ip routing,再创建 VLAN 接口并配地址。
configure terminal ip routing interface Vlan100 ip address 192.168.100.1/24 no shutdown exit ip route 0.0.0.0/0 192.168.0.1 exitip routing是开启三层路由的关键开关,没开之前 SVI 配置再多也不会转发;interface Vlan100是 VLAN 的三层接口,地址要跟接入网段在同一个子网;ip route 0.0.0.0/0 192.168.0.1加一条默认静态路由,让非本地流量走到上行网关。
在三层环境中,EOS 没有隐藏的路由开关。如果show ip route里只有直连路由,多半是ip routing没开,或者 SVI 被 shutdown。配合show ip interface Vlan100看接口状态,基本能定位。另一个常见问题是 SVI 地址配错,比如网关写成了另一台设备的地址,导致终端上不了网。排查时一定要先确认终端、交换机、服务器三个地址在同一广播域。
静态路由适合小规模或边界场景。规模稍大后,静态路由的维护成本会快速上升,这时候应该考虑动态路由协议。EOS 对 BGP、OSPF 的支持都比较完整,数据中心场景里 BGP 通常更受青睐,因为它能做路由策略和跨厂商互通。
4.3 动态路由:BGP 的典型配置流程
BGP 是 EOS 用得最多的动态路由协议,尤其在数据中心场景。配置流程是先建邻居,再激活地址族,最后宣告网络。
configure terminal router bgp 65000 router-id 10.0.0.1 neighbor 10.0.0.2 remote-as 65001 neighbor 10.0.0.2 password Eos123 address-family ipv4 neighbor 10.0.0.2 activate network 192.168.100.0/24router bgp 65000指定本地自治系统号,必须和对方remote-as区分清楚;router-id建议手工配置,避免自动选举出不可控值;password不是必须项,但使用后两边要一致;address-family ipv4进入 IPv4 单播地址族,neighbor ... activate是真正把邻居纳入该地址族,network 192.168.100.0/24宣告本地网段。注意它只负责把路由发出去,不关心链路中间经过什么设备。
验证 BGP 一定要看三层闭环:
show bgp summary show bgp ipv4 unicastshow bgp summary看邻居状态是否 Established;show bgp ipv4 unicast看收到的前缀和下一跳。如果两个设备配置看起来都对,BGP 却一直卡在 Active,通常不是 BGP 自身问题,而是底层网络或 ACL 挡住了 TCP 179 端口。这时要先ping邻居的 loopback,再telnet或nc测端口,逐步缩小范围。
在大型网络里,BGP 的路由策略往往比基本的建邻居复杂得多。社区属性、出向路由过滤、本地优先级、MED 这些都是常见手段。关键原则是:先把基础连通性验证好,再上策略;策略越少,故障面越小。EOS 的日志和状态查询能力足够强大,别把时间花在猜测上。
4.4 选型理由:静态路由、OSPF 还是 BGP
| 路由方式 | 适合规模 | 收敛速度 | 策略能力 | EOS 常见场景 |
|---|---|---|---|---|
| 静态路由 | 小型或边界 | 无动态收敛 | 低 | 出口默认路由、管理网段 |
| OSPF | 中型园区 | 中 | 一般 | 传统三层互联 |
| BGP | 数据中心、大型骨干 | 高 | 强 | ToR 互联、EVPN、跨厂商互通 |
很多入门者会纠结到底用哪个。我的建议是:先看网络规模和变更频率。只有几台设备、几条链路,静态路由最稳;设备数和网段上去了,再用 OSPF 或 BGP。EOS 的 BGP 能力强,但能力越强,配置边界越需要约束,别把策略堆到不可维护的地步。
5. EOS 使用中的避坑与排查:五个踩坑记录
5.1 配置会话锁死,后一个人无法进 configure
现象:多人管理同一台设备,A同学开了一个配置会话没有退出,B同学进 configure 时提示配置会话不可用,改不了任何配置。
原因:EOS 的配置会话机制要求正常提交或终止来结束会话,直接关掉终端会让会话残留,配置锁没有释放。某些自动化脚本如果通过 API 进入配置模式,异常退出后也有可能留下占锁会话。
解决:用show configuration session查看残留会话,确认无误后abort清掉。日常习惯是每次配置改动后保存并退出,不保留会话窗口。如果是自动化脚本触发,要在脚本里捕捉异常并保证退出配置模式,避免长期占用锁。
5.2 管理口 IP 配了,跨网段却不通
现象:Management1 配置了 IP,同网段能 ping 通,但跨网段管理地址始终不通,SSH 和 eAPI 都连不上。
原因:管理口默认在 MGMT VRF 里,默认路由没有写进 MGMT VRF,导致回包路由缺失。很多人把它当成普通三层口,只配了地址,忘了配 VRF 路由。
解决:补一条ip route vrf MGMT 0.0.0.0/0 <网关>,让管理流量走独立路由表。如果 eAPI 也连不上,还要确认management api http-commands下配置了对应的 VRF,否则服务可能监听在默认路由表里,管理网段找不到它。
5.3 eAPI 报证书错误,其实是设备时间不对
现象:用 curl 调 eAPI,提示证书错误;浏览器访问同一地址也会报不安全。但设备本身是内网设备,证书是按设备名签发的。
原因:设备自签证书的 CN 与访问 IP 不匹配,或者系统时间偏差超过了证书有效期范围,导致证书链校验失败。在刚开局没同步 NTP 的设备上特别容易遇到。
解决:排障先用-k跳过证书校验,确认接口通;生产环境用私有 CA 签发证书,并配置 NTP 让设备时间准确。如果只是内网临时测试,可以在 eAPI 配置里使用 HTTP 协议,但生产环境不要这样做,明文认证信息太容易被截获。
5.4 在 bash 里手改 startup-config,启动后配置丢失
现象:某工程师为了快速改一个参数,直接在 bash 里编辑/mnt/flash/startup-config,结果设备重启后停在启动早期界面,配置没有加载。
原因:EOS 的启动配置文件是语义化内容,不是随便写的文本。手工编辑时哪怕少一个换行、多一个缩进,都可能被解析器识别失败。最坏的情况下,系统会跳过配置加载,进入一个只保留基础管理能力的状态,数据面完全不可用。
解决:不要直接编辑启动配置。所有修改走 CLI configure 流程,保存用copy running-config startup-config。如果已经发生启动失败,只能通过备份配置文件恢复,或在引导过程中加载干净的 startup-config。这个教训值一次午夜维护。
5.5 管理口 ACL 放行顺序不对,SSH 当场断开
现象:给 Management1 入方向套了一条 ACL,保存配置的瞬间 SSH 掉线,console 还能登录。ACL 的目的是限制来源,结果把自己也限制了。
原因:ACL 按从上到下的顺序匹配,先命中先执行。如果放行管理网段的规则放在最后,拒绝规则放前面,管理流量会被先匹配到拒绝规则而丢弃。许多网络设备都是这种顺序语义,EOS 也不例外。
解决:用 console 登录,删除该 ACL,先把管理网段 allow 放在最前面,再放行业务端口,最后显式 deny all。以后做任何会改变管理通道的 ACL,先确认 console 可用,再检查 ACL 顺序,不要在远端 SSH 会话里直接套可能影响管理口的规则。
6. 让 EOS 变成可编程平台:eAPI 与验证习惯
如果只把 EOS 当命令行设备用,会错过它最值钱的接口:管理面 API。设备侧的 eAPI 配置并不复杂:
configure terminal management api http-commands protocol http vrf MGMT no shutdown exitmanagement api http-commands进入 eAPI 配置;protocol http表示用 HTTP 监听,内网测试方便;vrf MGMT让它只监听管理 VRF,避免业务面暴露;no shutdown开启 API 服务。生产环境建议使用 HTTPS,并放行对应端口。
调用范例:
curl -s http://192.0.2.10/command-api \ -H "Authorization: Basic $(printf 'admin:admin' | base64)" \ -d '{"jsonrpc":"2.0","method":"runCmds","params":{"version":1,"cmds":["show version"],"format":"json"}}'Authorization是 HTTP Basic 认证;jsonrpc表示协议版本;cmds数组里放要执行的命令,可以是多条;format设成 json 方便程序解析。第一次跑通这条命令,比读十页 API 文档都有用。如果启用 HTTPS,记得在 curl 里加-k或配置好证书。
我在自动化项目里一贯的验证习惯是:脚本开头先执行一次show version,确认 eAPI 连通、用户名密码无误、VRF 正确,再进入真正的业务逻辑。线上遇到脚本翻车,多半不是脚本逻辑错,而是命令名大小写、VRF 没对上、认证信息过期这些小问题。先把验证路径压短,后面所有自动化收益才会稳。希望帮到你。
本文还有配套的精品资源,点击获取