Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

컨테이너에서 타사 애플리케이션 실행

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입니다. 이것은 변경할 수 있습니다.

  • CPU – 컨테이너의 기본 결합 CPU 제한은 CPU 코어 1개의 20%입니다. 이것은 변경할 수 있습니다.

메모:

필요한 경우 컨테이너에 대한 리소스 제한을 수정할 수 있습니다. 컨테이너에 대한 리소스 제한 수정을 참조하십시오.

Docker 컨테이너 배포

Docker 컨테이너를 배포하려면 다음을 수행합니다.

  1. VRF에 바인딩된 Docker 서비스를 시작합니다(예vrf0: ). Junos OS 진화한 릴리스 23.4R1 이하의 경우, 이 Docker 서비스에서 관리하는 모든 컨테이너가 이 Linux VRF에 바인딩됩니다. Junos OS Evolved 릴리스 24.1R1 및 이후 버전에서는 컨테이너 내의 특정 작업을 VRF에 바인딩하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에 대한 VRF 선택을 참조하십시오.
  2. 다음 환경 변수를 구성하여 클라이언트에 대한 Docker 소켓을 설정합니다.
  3. 이미지를 가져옵니다.
    메모:

    다른 컨테이너에 대해 명령의 import URL을 변경해야 합니다.

  4. 이미지가 다운로드되었는지 확인하고 이미지 ID를 가져옵니다.
  5. 이미지 ID를 사용하여 컨테이너를 만들고 해당 컨테이너에 bash 세션을 입력합니다.
  6. 이미지 ID를 사용하여 패킷 IO 및 Netlink 용량이 있는 컨테이너를 생성하고 해당 컨테이너에 세션을 입력합니다bash.
    메모:

    Docker 컨테이너는 인수를 사용하지 않는 한 기본적으로 데몬화됩니다 -it .

Docker 컨테이너 관리

Docker 컨테이너는 표준 Docker Linux 워크플로를 통해 관리됩니다. docker ps또는 Linux 명령을 사용하여 실행 중인 Docker 컨테이너를 표시하고, ps top Docker 명령을 사용하여 컨테이너를 관리합니다. Docker 명령에 대한 자세한 내용은 다음을 참조하세요. https://docs.docker.com/reference/cli/docker/

메모:

Junos OS Evolved 고가용성 기능은 Docker 컨테이너의 사용자 지정 애플리케이션에 대해 지원되지 않습니다. 애플리케이션에 고가용성 기능이 있는 경우 각 RE에서 애플리케이션을 실행하여 자체적으로 동기화할 수 있는지 확인해야 합니다. 이러한 응용 프로그램에는 자체적으로 관리하고 모든 인스턴스와 통신하는 데 필요한 비즈니스 논리가 있어야 합니다.

Docker 컨테이너용 VRF 선택

Junos OS 진화한 릴리스 23.4R1 및 이전 버전의 경우, 컨테이너는 Docker 프로세스에서 가상 라우팅 및 포워딩(VRF)을 상속합니다. 개별 VRF에서 컨테이너를 실행하려면 해당 VRF에서 Docker 프로세스 인스턴스를 시작해야 합니다. docker@vrf.service 인스턴스를 통해 해당 VRF에서 프로세스를 시작할 수 있습니다. VRF가 지정되지 않은 경우 VRF의 기본값은 입니다 vrf0.

기본적으로 docker.service 실행됩니다 vrf:none .

Junos OS 진화한 릴리스 24.1R1 이상에서는 명령을 사용하여 ip vrf exec task 컨테이너 내의 특정 작업을 특정 Linux VRF에 바인딩하는 것이 좋습니다. 이렇게 하려면 컨테이너를 옵션 --privileged으로 시작해야 하며, 컨테이너에는 호환되는 버전의 이 iproute2 설치되어 있어야 합니다. 또한 컨테이너는 호스트와 네트워크 네임스페이스를 공유해야 합니다. 또한 socket 옵션을 SO_BINDTODEVICE 사용하여 컨테이너 내의 특정 작업 또는 애플리케이션에 대한 소켓을 특정 Linux VRF 디바이스에 바인딩할 수 있습니다. 이 경우 iproute2 필요하지 않습니다.

명령은 ip vrf show 사용 가능한 모든 Linux VRF를 나열합니다. 를 사용하여 iproute2컨테이너 내의 작업에 대한 소켓을 VRF에 바인딩하도록 선택한 경우 을 사용하여 --env-file=/run/docker-vrf0/jnet.env일부 env 변수를 덮어쓰는 것이 좋으므로 libnli.so 를 방해 iproute2하지 않도록 미리 로드되지 않습니다.

다음 명령을 사용하여 컨테이너를 시작하고 컨테이너의 작업과 연결된 소켓을 기본 vrf vrf0 에 바인딩할 수 있습니다.

이 접근 방식을 사용하면 컨테이너 내의 다른 작업과 연결된 다른 소켓을 하나의 VRF에 바인딩된 모든 소켓 대신 다른 VRF와 연결할 수 있습니다.

특정 VRF에 대한 Docker 프로세스는 /run/docker-vrf.sock에 있는 해당 소켓에서 수신 대기합니다.

이는 Junos OS Evolved VRF가 아닌 Linux에서 볼 수 있는 VRF입니다. 유틸리티 evo_vrf_name (Junos OS Evolved 릴리스 24.1부터 사용 가능)를 사용하여 Junos OS Evolved VRF에 해당하는 Linux VRF를 찾을 수 있습니다.

Docker 클라이언트는 다음 인수를 사용하여 VRF 특정 Docker 프로세스와 연결됩니다.

예를 들어 에서 vrf0 컨테이너를 실행하려면 다음 Docker 명령 및 인수를 입력합니다.

메모:

컨테이너는 단일 VRF에만 연결할 수 있습니다.

컨테이너에 대한 리소스 제한 수정

컨테이너의 기본 리소스 제한은 /etc/extensions/platform_attributes에 있는 파일을 통해 제어됩니다. 이 파일을 열면 다음 텍스트가 표시됩니다.

컨테이너에 대한 리소스 제한을 변경하려면 파일 맨 아래에 있는 항목에 값을 EXTENSIONS 추가합니다. Docker 프로세스를 시작하기 전에 이 작업을 수행해야 합니다.

  • EXTENSIONS_FS_DEVICE_SIZE_MIB=컨테이너가 사용할 수 있는 최대 스토리지 공간을 제어합니다. 값을 메가바이트 단위로 입력합니다. 기본값은 8000 또는 /var 전체 크기의 30% 중 더 작은 값입니다. Docker 프로세스를 처음 시작하기 전에 이 항목을 추가해야 합니다. 나중에 이 값을 변경해야 하는 경우 기존 파티션을 삭제해야 하므로 이 파티션의 데이터가 손실될 수 있습니다. Docker 서비스가 이미 시작된 후 이 스토리지 파티션을 변경해야 하는 경우 먼저 명령을 사용하여 systemctl stop docker Docker 프로세스를 중지해야 하며 명령 다음에 명령을 사용하여 기존 파티션을 systemctl stop var-extensions.mount rm /var/extensions_fs 삭제할 수 있습니다. 이 속성이 변경되면 Docker 프로세스를 다시 시작하면 지정된 크기의 새 파티션이 만들어집니다. 동일한 결과를 얻기 위해 명령으로 systemctl restart var-extensions.mount 다시 시작할 var-extensions.mount 수도 있습니다. 중요한 데이터가 손실되지 않도록 파티션을 백업하는 것이 좋습니다. 이 값을 /var 파티션의 30% 이상으로 늘리면 Junos OS Evolved의 정상적인 기능에 영향을 미칠 수 있으므로 권장하지 않습니다.

  • EXTENSIONS_CPU_QUOTA_PERCENTAGE= 컨테이너가 사용할 수 있는 최대 CPU 사용량을 제어합니다. CPU 사용량의 백분율로 값을 입력합니다. 기본값은 20%이지만 플랫폼에 따라 다를 수 있습니다.

  • EXTENSIONS_MEMORY_MAX_MIB= 컨테이너가 사용할 수 있는 실제 메모리의 최대 양을 제어합니다. 값을 메가바이트 단위로 입력합니다. 기본값은 2000이지만 플랫폼에 따라 다를 수 있습니다. 이를 수정해야 하는 경우 스왑 값 EXTENSIONS_MEMORY_SWAP_MAX_MIB= 도 지정해야 합니다. Linux cgroup 는 메모리 및 CPU 제한에 대해 불합리한 값을 설정하는 것을 허용하지 않습니다. 설정된 값이 에 cgroup반영되지 않은 경우 가장 가능성이 높은 이유는 값이 잘못되었기 때문일 수 있습니다(매우 높거나 매우 낮을 수 있음).

  • EXTENSIONS_MEMORY_SWAP_MAX_MIB=컨테이너가 사용할 수 있는 최대 스왑 메모리 양을 제어합니다. 값을 메가바이트 단위로 입력합니다. 기본값은 사용 가능한 스왑 공간의 15%이지만 플랫폼에 따라 다를 수 있습니다. EXTENSION_MEMORY_MAX_MIB=EXTENSIONS_MEMORY_SWAP_MAX_MIB= 중 하나를 수정하는 경우 및 둘 다 설정해야 합니다. 스왑에 권장되는 값은 의 15%입니다EXTENSION_MEMORY_MAX_MIB=. swap EXTENSION_MEMORY_MAX_MIB 의 실제 cgroup 값은 + EXTENSIONS_MEMORY_SWAP_MAX_MIB입니다.

기본적으로 이러한 값은 플랫폼별 값으로 설정되므로 컨테이너를 시작하기 전에 값을 설정하는 것이 좋습니다.

주의:

컨테이너에 대한 리소스 제한을 수정하기 전에 구성에서 지원해야 하는 규모에 대한 CPU 및 메모리 요구 사항을 알고 있어야 합니다. 컨테이너에 대한 리소스 제한을 늘릴 때는 시스템에 부담을 주지 않도록 주의해야 합니다.