컨테이너에서 타사 애플리케이션 실행
Junos OS Evolved에서 자체 애플리케이션을 실행하려면 Docker 컨테이너 안에 애플리케이션을 구축할 수 있습니다. 컨테이너는 Junos OS Evolved에서 실행되며 에이전트는 컨테이너 내부에서 실행되어 OS와 격리됩니다. 컨테이너는 /var/extensions에 마운트된 별도의 파티션에 설치됩니다.
Docker 컨테이너는 Junos OS Evolved에 통합되지 않으며 Docker 명령을 사용하여 Linux를 통해 완전히 생성되고 관리됩니다. 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 또는 패킷 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
예를 들어 컨테이너를 vrf0
실행하려면 다음 Docker 명령과 인수를 입력합니다.
[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에만 연결될 수 있습니다.
컨테이너에 대한 리소스 제한 수정
컨테이너의 기본 리소스 제한은 /etc/extensions/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=
은(는) 컨테이너가 사용할 수 있는 최대 스토리지 공간을 제어합니다. 바이트로 값을 입력합니다. 기본값은 /var 총 크기의 8GB 또는 30%입니다. 중 더 작은 값입니다.EXTENSIONS_CPU_QUOTA_PERCENTAGE=
은(는) 컨테이너가 사용할 수 있는 최대 CPU 사용량을 제어합니다. CPU 사용량의 백분율로 값을 입력합니다. 기본값은 모든 코어에서 최대 20%의 CPU 사용입니다.EXTENSIONS_MEMORY_MAX_MIB=
은(는) 컨테이너가 사용할 수 있는 물리적 메모리의 최대 양을 제어합니다. 바이트로 값을 입력합니다. 기본값은 총 물리적 메모리 중 더 작은 메모리 중 2GB 또는 10%입니다.
컨테이너에 대한 리소스 제한을 수정하기 전에 구성에서 지원해야 하는 확장에 대한 CPU 및 메모리 요구 사항을 인식해야 합니다. 컨테이너에 대한 리소스 제한을 늘리면 시스템에 부담을 줄 수 없도록 주의하십시오.