Exécution d’applications tierces dans des conteneurs
Pour exécuter vos propres applications sur Junos OS Evolved, vous avez la possibilité de les déployer dans un conteneur Docker. Le conteneur s’exécute sur Junos OS Evolved et les agents s’exécutent à l’intérieur du conteneur, ce qui les isole du système d’exploitation. Les conteneurs sont installés dans une partition séparée montée dans / var/extensions.
Les conteneurs Docker ne sont pas intégrés dans Junos OS Evolved, ils sont créés et gérés entièrement via Linux à l’aide des commandes Docker. Pour plus d’informations sur les conteneurs et les commandes Docker, consultez la documentation officielle de Docker : https://docs.docker.com/get-started/
Les conteneurs ont des limites par défaut pour les ressources qu’ils peuvent utiliser à partir du système :
Storage – La taille de la partition /var /extensions est pilotée par la plate-forme : 8 Go ou 30 % de la taille totale de /var, selon la plus petite des deux.
Memory – Les conteneurs ont une limite par défaut de 2 Go ou 10 % de la mémoire physique totale, selon la plus petite des deux.
CPU – Les conteneurs ont une limite par défaut de 20 % d’utilisation maximale du processeur sur tous les cœurs.
Vous pouvez modifier les limites de ressources sur les conteneurs si nécessaire. Reportez-vous à la section Modification des limites de ressources pour les conteneurs.
Déploiement d’un conteneur Docker
Pour déployer un conteneur docker :
Gestion d’un conteneur Docker
Les conteneurs Docker sont gérés via un workflow Linux. Utilisez les commandes ou top
Linux pour indiquer quels conteneurs Docker sont en cours d’exécution, et utilisez les commandes Docker pour gérer les ps
conteneurs. Pour plus d’informations sur les commandes Docker, consultez : https://docs.docker.com/engine/reference/commandline/cli/
Les fonctionnalités de haute disponibilité de Junos OS Evolved ne sont pas prises en charge pour les applications personnalisées dans les conteneurs Docker. Si une application dispose d’une fonctionnalité de haute disponibilité, vous devez exécuter l’application sur chaque RE pour vous assurer qu’elle peut se synchroniser.
Activation de Netlink ou d’E/S de paquets dans un conteneur
Vous devez fournir des arguments supplémentaires aux commandes Docker si votre conteneur nécessite des fonctionnalités supplémentaires telles que Netlink ou Packet IO. L’exemple suivant montre comment activer les fonctionnalités Netlink ou Packet IO pour un conteneur en ajoutant des arguments à une commande Docker :
Créez un volume persistant de nom en lecture seule au démarrage des services Docker :
--mount source=jnet,destination=/usr/evo
Partagez l’espace de noms réseau de l’hôte avec le processus conteneur :
--network=host
Démarrez automatiquement le conteneur au redémarrage du système :
--restart=always
Activez la fonctionnalité d’administration réseau, requise par les bibliothèques Netlink et Packet IO :
--cap-add=NET_ADMIN
Activez les variables d’environnement requises pour Netlink et Packet O :
--env-file=/run/docker/jnet.env
Sélection d’un VRF pour un conteneur Docker
Les conteneurs héritent du routage et transfert virtuel (VRF) du démon Docker. Pour exécuter des conteneurs dans un VRF distinct, une instance du démon Docker doit être démarrée dans le VRF correspondant. L’instance docker@vrf.service
permet de démarrer un démon dans le VRF correspondant. Si le VRF n’est pas spécifié, la valeur par défaut du VRF est .vrf0
Le docker.service
s’exécute par vrf:none
défaut.
Le démon docker d’un VRF spécifique écoute le socket correspondant situé dans / run/docker-vrf.sock.
Le client Docker est associé au démon docker spécifique VRF à l’aide des arguments suivants :
--env-file /run/docker-vrf/jnet.env --host unix:///run/docker-vrf.sock or export DOCKER_HOST=unix:///run/docker-vrf.sock
Par exemple, pour exécuter un conteneur dans vrf0
, entrez la commande et les arguments Docker suivants :
[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
Un conteneur ne peut être associé qu’à un seul VRF.
Modification des limites de ressources pour les conteneurs
Les limites de ressources par défaut pour les conteneurs sont contrôlées via un fichier situé dans / etc/extensions/platform_attributes. Vous verrez le texte suivant à l’ouverture de ce fichier :
## 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=
Pour modifier les limites de ressources pour les conteneurs, ajoutez des EXTENSIONS
valeurs aux entrées au bas du fichier :
EXTENSIONS_FS_DEVICE_SIZE_MIB=
contrôle l’espace de stockage maximal que les conteneurs peuvent utiliser. Entrez la valeur en octets. La valeur par défaut est 8 Go ou 30 % de la taille totale de /var, la valeur la plus petite étant retenue.EXTENSIONS_CPU_QUOTA_PERCENTAGE=
contrôle l’utilisation maximale du processeur que les conteneurs peuvent utiliser. Entrez une valeur en pourcentage de l’utilisation du processeur. La valeur par défaut est 20 % d’utilisation maximale du processeur sur tous les cœursEXTENSIONS_MEMORY_MAX_MIB=
Contrôle la quantité maximale de mémoire physique que les conteneurs peuvent utiliser. Entrez la valeur en octets. La valeur par défaut est 2 Go ou 10 % de la mémoire physique totale, la valeur la plus petite étant retenue.
Avant de modifier les limites de ressources pour les conteneurs, tenez-vous compte des exigences en matière de CPU et de mémoire pour l’échelle que vous devez prendre en charge dans votre configuration. Soyez prudent lorsque vous augmentez les limites de ressources pour les conteneurs afin d’éviter qu’ils ne mettent votre système à rude épreuve.