Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Executando aplicativos de terceiros em contêineres

Para executar seus próprios aplicativos no Junos OS Evolved, você tem a opção de implantá-los como um contêiner Docker. O contêiner é executado no Junos OS Evolved, e os aplicativos são executados no contêiner, mantendo-os isolados do sistema operacional host. Os contêineres são instalados em uma partição separada montada em /var/extensões. Os contêineres persistem em reinicializações e atualizações de software.

Nota:

Os contêineres Docker não são integrados ao Junos OS Evolved, eles são criados e gerenciados inteiramente através do Linux usando comandos Docker. Para obter mais informações sobre contêineres e comandos Docker, veja a documentação oficial do Docker: https://docs.docker.com/get-started/

Os contêineres têm limites padrão para os recursos que podem usar do sistema:

  • Storage – O tamanho da partição /var/extensões é orientado por plataforma: 8GB ou 30% do tamanho total de /var, o que for menor.

  • Memory – Os contêineres não têm limite padrão de memória física. Isso pode ser mudado.

  • CPU – Os contêineres não têm limite padrão de CPU. Isso pode ser mudado.

Nota:

Você pode modificar os limites de recursos em contêineres, se necessário. Veja modificação dos limites de recursos para contêineres.

Implantação de um contêiner Docker

Para implantar um contêiner Docker:

  1. Inicie o serviço Docker vinculado a um VRF (por exemplovrf0). Para o Junos OS Evolved Releases 23.4R1 e anteriores, todos os contêineres gerenciados por este serviço Docker estarão vinculados a este Linux VRF. Para o Junos OS Evolved Release 24.1R1 e posterior, recomendamos vincular tarefas específicas dentro do contêiner a um VRF. Consulte a seleção de um VRF para um Contêiner Docker para obter mais detalhes.
  2. Configure a tomada Docker para o cliente configurando a seguinte variável de ambiente:
  3. Importe a imagem.
    Nota:

    A URL para o import comando precisa ser alterada para diferentes contêineres.

  4. Certifique-se de que a imagem seja baixada e obtenha a ID da imagem.
  5. Crie um contêiner usando a ID da imagem e insira uma sessão de bash naquele contêiner.
  6. Crie um contêiner com a capacidade do Packet IO e Netlink usando a ID da imagem e insira uma bash sessão naquele contêiner.
    Nota:

    Os contêineres Docker são daemonizados por padrão, a menos que você use o -it argumento.

Gerenciamento de um contêiner Docker

Os contêineres Docker são gerenciados por meio do fluxo de trabalho padrão do Docker Linux. Use os docker pscomandos , ps ou top Linux para mostrar quais contêineres Docker estão sendo executados, e use comandos Docker para gerenciar os contêineres. Para obter mais informações sobre os comandos Docker, veja: https://docs.docker.com/engine/reference/commandline/cli/

Nota:

Os recursos de alta disponibilidade do Junos OS Evolved não são suportados para aplicativos personalizados em contêineres Docker, se um aplicativo tem funcionalidade de alta disponibilidade, então você deve executar o aplicativo em cada RE para garantir que ele possa se sincronizar. Esse aplicativo precisará ter a lógica de negócios necessária para se gerenciar e se comunicar com todas as instâncias.

Selecionando um VRF para um contêiner Docker

Para o Junos OS Evolved Releases 23.4R1 e anteriores, os contêineres herdam o roteamento virtual e o encaminhamento (VRF) do processo Docker. Para executar contêineres em um VRF distinto, uma instância de processo Docker precisa ser iniciada no VRF correspondente. A docker@vrf.service instância permite iniciar um processo no VRF correspondente. Se o VRF não estiver especificado, o VRF fica inadimplente em vrf0.

A docker.service rede funciona vrf:none por padrão.

Para o Junos OS Evolved Releases 24.1R1 e posteriores, recomendamos vincular uma tarefa específica dentro do contêiner a um Linux VRF específico usando o ip vrf exec task comando. Isso exige que o contêiner seja iniciado com a opção --privileged, e o contêiner precisa ter uma versão compatível da instalação iproute2 . O contêiner também deve compartilhar o namespace da rede com o host. Você também pode usar a opção SO_BINDTODEVICE de tomada para vincular o soquete para uma tarefa ou aplicativo específico dentro do contêiner a um dispositivo VrF Linux específico, nesse caso iproute2 não é necessário.

O ip vrf show comando lista todos os VRFs linux disponíveis. Se você optar por vincular os soquetes para uma tarefa dentro do contêiner a um VRF usando iproute2, recomendamos reescrever algumas variáveis de env usando --env-file=/run/docker-vrf0/jnet.env, para libnli.so que não seja pré-carregado para evitar que interfira iproute2.

Você pode lançar um contêiner e vincular o soquete associado à tarefa do contêiner ao vrf vrf0 padrão com os seguintes comandos:

Com essa abordagem, diferentes tomadas associadas a diferentes tarefas dentro do contêiner podem ser associadas a diferentes VRFs em vez de todos os tomadas vinculados a apenas um VRF.

O processo Docker para um VRF específico ouve o socket correspondente localizado em /run/docker-vrf.sock.

Este é o VRF, como visto no Linux e não no Junos OS Evolved VRF. O utilitário evo_vrf_name (disponível a partir do Junos OS Evolved release 24.1) pode ser usado para encontrar o Linux VRF que corresponde a um Junos OS Evolved VRF.

O cliente Docker é associado ao processo docker específico da VRF usando os seguintes argumentos:

Por exemplo, para executar um contêiner vrf0 , insira os seguintes argumentos e comandos Docker:

Nota:

Um contêiner só pode ser associado a um único VRF.

Modificação dos limites de recursos para contêineres

Os limites padrão de recursos para contêineres são controlados por um arquivo localizado em /etc/extensões/platform_attributes. Você verá o texto a seguir ao abrir este arquivo:

Para alterar os limites de recursos para contêineres, adicione valores às EXTENSIONS entradas na parte inferior do arquivo. Certifique-se de fazer isso antes de iniciar o processo Docker.

  • EXTENSIONS_FS_DEVICE_SIZE_MIB= controla o espaço máximo de armazenamento que os contêineres podem usar. Digite o valor em megabytes. O valor padrão é de 8000 ou 30% do tamanho total de /var, o que for menor. Certifique-se de adicionar esta entrada antes de iniciar o processo Docker pela primeira vez. Se você precisar alterar esse valor mais tarde, você precisará excluir a partição existente, o que pode levar à perda de dados nesta partição. Se essa partição de armazenamento precisar ser alterada após o início do serviço Docker, então o processo Docker precisa ser interrompido primeiro com o systemctl stop docker comando, e a partição existente pode ser excluída usando o systemctl stop var-extensions.mount comando seguido pelo rm /var/extensions_fs comando. Assim que este atributo for alterado, inicie o processo Docker novamente e a nova partição com o tamanho especificado será criada. Você também pode reiniciar var-extensions.mount com o systemctl restart var-extensions.mount comando para obter o mesmo resultado. Sugerimos fazer um backup da partição para evitar perder dados importantes. Não recomendamos aumentar esse valor além de 30% da partição /var , pois isso pode afetar a função normal do Junos OS Evolved.

  • EXTENSIONS_CPU_QUOTA_PERCENTAGE= controla o uso máximo de CPU que os contêineres podem usar. Digite um valor como porcentagem do uso da CPU. O valor padrão é de 20%, mas pode variar dependendo da plataforma.

  • EXTENSIONS_MEMORY_MAX_MIB= controla a quantidade máxima de memória física que os contêineres podem usar. Digite o valor em megabytes. O valor padrão é de 2000, mas pode variar dependendo da plataforma. Se isso precisar ser modificado, o valor EXTENSIONS_MEMORY_SWAP_MAX_MIB= de swap também deve ser especificado. Observe que o Linux cgroup não permite que valores insensatos sejam definidos para limites de memória e CPU. Se o conjunto de valores não se refletir na cgrouprazão mais provável é que os valores estejam errados (possivelmente muito altos ou muito baixos).

  • EXTENSIONS_MEMORY_SWAP_MAX_MIB= controla a quantidade máxima de memória de troca que os contêineres podem usar. Digite o valor em megabytes. O valor padrão é de 15% do espaço de swap disponível, mas pode variar dependendo da plataforma. Ambos e EXTENSION_MEMORY_MAX_MIB= EXTENSIONS_MEMORY_SWAP_MAX_MIB= devem ser definidos se ambos estiverem sendo modificados. O valor recomendado para swap é de 15% de EXTENSION_MEMORY_MAX_MIB=. O valor real cgroup para swap seria EXTENSION_MEMORY_MAX_MIB + EXTENSIONS_MEMORY_SWAP_MAX_MIB.

Por padrão, estes são definidos em valores específicos da plataforma, por isso recomendamos definir os valores antes de iniciar os contêineres.

CUIDADO:

Antes de modificar os limites de recursos para contêineres, esteja ciente dos requisitos de CPU e memória para a escala que você tem a oferecer em sua configuração. Tenha cuidado ao aumentar os limites de recursos para contêineres para evitar que eles causem uma tensão em seu sistema.