在容器中运行第三方应用程序
要在 Junos OS Evolved 上运行自己的应用程序,您可以选择将其部署在 Docker 容器中。容器在 Junos OS Evolved 上运行,代理在容器内运行,将其与操作系统隔离开来。容器安装在安装在 /var/extensions 上的独立分区中。
Docker 容器未集成到 Junos OS Evolved 中,它们完全通过 Linux 使用 Docker 命令创建和管理。有关 Docker 容器和命令的详细信息,请参阅官方 Docker 文档: https://docs.docker.com/get-started/
容器对可从系统中使用的资源有默认限制:
Storage – /var/extensions 分区大小由平台驱动:8GB 或 /var 总大小的 30%,以较小者为准。
Memory – 容器的默认限制为 2GB 或总物理内存的 10%,以较小者为准。
CPU – 容器的默认限制在所有核心上最多使用 CPU 20%。
如有必要,您可以修改容器的资源限制。请参阅 修改容器的资源限制。
部署 Docker 容器
要部署 docker 容器:
管理 Docker 容器
Docker 容器通过 Linux 工作流程进行管理。 ps
使用 或 top
Linux 命令显示运行的 Docker 容器,并使用 Docker 命令管理容器。有关 Docker 命令的详细信息,请参阅: https://docs.docker.com/engine/reference/commandline/cli/
Junos OS Evolved 高可用性功能不支持 Docker 容器中的自定义应用程序,如果应用程序具有高可用性功能,则应在每个 RE 上运行应用程序以确保其能够同步。
在容器中启用 Netlink 或 Packet IO
如果您的容器需要 Netlink 或 Packet IO 等额外功能,则需要为 Docker 命令提供其他参数。以下示例说明如何通过向 Docker 命令添加参数来激活容器的 Netlink 或 Packet IO 功能:
启动 Docker 服务后,创建“只读”名称持久卷:
--mount source=jnet,destination=/usr/evo
将主机的网络名称空间与容器进程共享:
--network=host
系统重新启动后自动启动容器:
--restart=always
启用 Netlink 和 Packet IO 库所需的网络管理员功能:
--cap-add=NET_ADMIN
启用 Netlink 和 Packet IO 所需的环境变量:
--env-file=/run/docker/jnet.env
为 Docker 容器选择 VRF
容器从 Docker 守护程序继承虚拟路由和转发 (VRF)。为了在不同的 VRF 中运行容器,需要在相应的 VRF 中启动 Docker 守护程序实例。该 docker@vrf.service
实例允许在相应的 VRF 中启动守护程序。如果 VRF 未指定,则 VRF 默认为 vrf0
。
默 docker.service
认情况下运行 vrf:none
。
特定 VRF 的 docker 守护程序在 /run/docker-vrf.sock 的对应插座上侦听。
Docker 客户端使用以下参数与 VRF 特定 docker 守护程序相关联:
--env-file /run/docker-vrf/jnet.env --host unix:///run/docker-vrf.sock or export DOCKER_HOST=unix:///run/docker-vrf.sock
例如,要在以下 Docker 命令和参数中 vrf0
运行容器:
[vrf:none] user@host:~#docker -H unix:///run/docker-vrf0.sock run --rm -it --network=host --cap-add=NET_ADMIN --mount source=jnet,destination=/usr/evo --env-file=/run/docker-vrf0/jnet.env debian:stretch ip link 1002: et-01000000000: BROADCAST,MULTICAST,UP mtu 1514 state UP qlen 1 link/ether ac:a:a:18:01:ff brd ff:ff:ff:ff:ff:ff 1001: mgmt-0-00-0000: BROADCAST,MULTICAST,UP mtu 1500 state UP qlen 1 link/ether 50:60:a:e:08:bd brd ff:ff:ff:ff:ff:ff 1000: lo0_0: LOOPBACK,UP mtu 65536 state UP qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
容器只能与单个 VRF 相关联。
修改容器的资源限制
容器的默认资源限制通过位于 /等/扩展/platform_attributes的文件进行控制。打开此文件时,您将看到以下文本:
## Edit to change upper cap of total resource limits for all containers. ## applies only to containers and does not apply to container runtimes. ## memory.memsw.limit_in_bytes = EXTENSIONS_MEMORY_MAX_MIB + EXTENSIONS_MEMORY_SWAP_MAX_MIB:-0 ## check current defaults, after starting extensions-cglimits.service ## $ /usr/libexec/extensions/extensions-cglimits get ## please start extensions-cglimits.service to apply changes here ## device size limit will be ignored once extensionsfs device is created #EXTENSIONS_FS_DEVICE_SIZE_MIB= #EXTENSIONS_CPU_QUOTA_PERCENTAGE= #EXTENSIONS_MEMORY_MAX_MIB= #EXTENSIONS_MEMORY_SWAP_MAX_MIB=
要更改容器的资源限制,请为 EXTENSIONS
文件底部的条目添加值:
EXTENSIONS_FS_DEVICE_SIZE_MIB=
控制容器可以使用的最大存储空间。输入字节值。默认值为 8GB 或 /var 总大小的 30%,以较小者为准。EXTENSIONS_CPU_QUOTA_PERCENTAGE=
控制容器可使用的最大 CPU 使用量。按 CPU 使用量的百分比输入值。默认值是所有核心中最大 CPU 使用的 20%EXTENSIONS_MEMORY_MAX_MIB=
控制容器可以使用的最大物理内存量。输入字节值。默认值为 2GB 或总物理内存的 10%,以较小者为准。
修改容器的资源限制之前,请注意配置中必须支持的规模的 CPU 和内存要求。增加容器的资源限制以防止其对系统造成压力时,请小心谨慎。