# Container Linux

Container Linux (anciennement CoreOS Linux) était un système d'exploitation léger open source basé sur le noyau Linux et conçu pour fournir une infrastructure aux déploiements en cluster, tout en se concentrant sur l'automatisation, la facilité de déploiement des applications, la sécurité, la fiabilité et l'évolutivité. En tant que système d'exploitation, Container Linux ne fournit que les fonctionnalités minimales requises pour déployer des applications à l'intérieur de conteneurs logiciels, ainsi que des mécanismes intégrés pour la découverte de services et le partage de configuration$^,$$^,$$^,$.
Container Linux partage des fondations avec Gentoo Linux$^,$, Chrome OS et Chromium OS via un kit de développement logiciel commun (SDK). Container Linux ajoute de nouvelles fonctionnalités et personnalisations à cette fondation partagée pour prendre en charge du matériel et des cas d'utilisation supplémentaire$^,$ $^{:7:02}$. Début 2015, CoreOS est activement développé, principalement par Alex Polvi, Brandon Philips et Michael Marineau, avec ses principales fonctionnalités disponibles en version stable$^,$$^,$.
L'équipe CoreOS Linux a annoncé la fin de vie de Container Linux le 26 mai 2020, en proposant Fedora CoreOS et RHEL CoreOS comme remplaçants, tous deux basés sur Red Hat.

## Aperçu

Container Linux ne fournit aucun gestionnaire de packages comme moyen de distribuer des applications, exigeant à la place que toutes les applications s'exécutent à l'intérieur de leurs conteneurs. Servant d'hôte de contrôle unique, une instance Container Linux utilise les fonctionnalités de virtualisation sous-jacentes au niveau du système d'exploitation du noyau Linux pour créer et configurer plusieurs conteneurs qui fonctionnent comme des systèmes Linux isolés. De cette façon, le partitionnement des ressources entre les conteneurs est effectué via plusieurs instances d'espace utilisateur isolées, au lieu d'utiliser un hyperviseur et de fournir des machines virtuelles à part entière. Cette approche repose sur les fonctionnalités des cgroups et des espaces de noms du noyau Linux$^,$ qui fournissent, ensemble, des capacités pour limiter, prendre en compte et isoler l'utilisation des ressources ( CPU, mémoire, E / S disque, etc.) pour les collections de processus de l'espace utilisateur$^,$$^,$.
Initialement, Container Linux utilisait exclusivement Docker comme composant fournissant une couche supplémentaire d'abstraction et d'interface aux fonctionnalités de virtualisation au niveau du système d'exploitation du noyau Linux, ainsi que de fournir un format standardisé pour les conteneurs qui permet aux applications de s'exécuter dans des environnements différents$^,$. En décembre 2014, CoreOS a publié et a commencé à prendre en charge rkt (initialement publié sous le nom de Rocket ) en tant qu'alternative à Docker, fournissant à travers lui un autre format standardisé des images de conteneur d'application, la définition de l'environnement d'exécution du conteneur et un protocole de découverte et de récupération des images de conteneurs$^,$$^,$$^,$. CoreOS fournit rkt comme une implémentation de la spécification dite du conteneur d'application (appc) qui décrit les propriétés requises de l' application container image (ACI); CoreOS a lancé appc et ACI sous la forme d'un ensemble de spécifications indépendantes pilotées par un comité$^,$ - comité indépendant des éditeurs de systèmes d'exploitation - visant à les intégrer à l'Open Container Initiative (OCI) ; initialement appelé Open Container Project ou OCP )
Le standard de conteneurisation a été annoncé en juin 2015$^,$$^,$.
Container Linux utilise des scripts ebuild de Gentoo Linux pour la compilation automatisée de ses composants système$^,$, et utilise systemd comme son système d'initialisation principal avec une intégration étroite entre systemd et divers mécanismes internes de Container Linux$^,$.

## Infrastructure de cluster

Container Linux fournit etcd, un daemon qui s'exécute sur tous les ordinateurs d'un cluster et fournit un registre de configuration dynamique, permettant de partager facilement et de manière fiable, diverses données de configuration entre les membres du cluster$^,$. Étant donné que les données de valeur-clé stockées dans etcd sont automatiquement distribuées et répliquées avec une élection maître automatisée et l'établissement d'un consensus à l'aide de l'algorithme Raft, toutes les modifications des données stockées sont reflétées sur l'ensemble du cluster, tandis que la redondance obtenue empêche les défaillances des membres du cluster de provoquer une perte de données$^,$. En plus de la gestion de la configuration, etcd fournit également la découverte de services en permettant aux applications déployées de s'annoncer et lister les services qu'elles offrent. La communication avec etcd est faite via une API REST exposée sur HTTP , qui communique en JSON; l'API peut être utilisée directement (via curl ou wget , par exemple), ou indirectement par etcdctl , qui est un utilitaire de ligne de commande spécialisé également fourni par CoreOS$^,$$^,$$^,$$^,$. Etcd est également utilisé dans le logiciel Kubernetes .
Container Linux fournit également fleet gestionnaire de cluster qui contrôle les instances systemd distinctes de Container Linux. Depuis 2017, fleet n'est plus activement développée et est déconseillée au profit de Kubernetes. En utilisant fleetd , Container Linux crée un système d'initialisation distribué qui relie des instances systemd distinctes à un etcd à l’échelle du déploiement ; en interne, fleetd démon communique avec le systemd local à travers le D-Bus, et avec le etcd du déploiement via l'API exposée par le etcd. L'utilisation de fleetd permet le déploiement d'un ou de plusieurs conteneurs à l'échelle du cluster, avec des options plus avancées, notamment la redondance, le basculement, le déploiement sur des membres de cluster spécifiques, les dépendances entre les conteneurs et le déploiement groupé de conteneurs. Un utilitaire de ligne de commande appelé fleetctl est utilisé pour configurer et surveiller ce système d'initialisation distribué; en interne, il communique avec le fleetd daemon en utilisant une API basée sur JSON sur de l'HTTP, cette API peut également être utilisée directement. Lorsqu'il est utilisé en local sur un membre du cluster, fleetctl communique avec l'instance locale du fleetd sur un socket de domaine Unix ; lorsqu'il est utilisé à distance, le tunneling SSH est utilisé avec une authentification fournie via des clés SSH publiques$^,$$^,$$^,$$^,$.
Tous les daemons et utilitaires de ligne de commande mentionnés ci-dessus ( etcd , etcdctl , fleetd et fleetctl ) sont écrits en Go et distribués sous les termes de la licence Apache 2.0.

## Déploiement

Lorsqu'il s'exécute sur du matériel dédié, Container Linux peut être installé de manière permanente sur le stockage local, tel qu'un disque dur (HDD) ou un disque SSD ou démarré à distance sur un réseau à l' aide de Preboot Execution Environment (PXE) ) en général, ou iPXE comme l'une des implémentations du PXE$^,$. CoreOS prend également en charge les déploiements sur diverses plates-formes de virtualisation, notamment Amazon EC2, DigitalOcean, Google Compute Engine, Microsoft Azure, OpenStack, QEMU / KVM, Vagrant et VMware$^,$$^,$$^,$. Container Linux peut également être installé sur Citrix XenServer, notant qu'il existe un "modèle" pour CoreOS.
Container Linux peut également être déployé via sa distribution commerciale appelée Tectonic, qui s'intègre avec Kubernetes de Google en tant qu'utilitaire de gestion de cluster. Avril 2015, Tectonic a été proposé en tant que logiciel bêta pour une sélection de clients$^,$. De plus, CoreOS fournit Flannel en tant que composant implémentant un réseau de superposition requis principalement pour l'intégration avec Kubernetes$^,$.

## Technologies

* Kubernetes (K8s) est un système open source permettant d’automatiser le déploiement, la mise à l’échelle et la gestion des applications conteneurisées.
* Docker est une surcouche qui simplifie le développement et le déploiement des conteneurs tout en les standardisant.
* OpenShift est une plateforme de conteneurs d’applications libres, utilisant principalement Docker et Kubernetes, qui est chargé du démarrage et du « scaling » des conteneurs.

## Dérivés

À la suite de son acquisition de CoreOS, Inc. en janvier 2018, Red Hat a annoncé qu'il fusionnerait CoreOS Container Linux avec le projet Atomic de Red Hat, pour créer un nouveau système d'exploitation, Red Hat CoreOS, tout en alignant la communauté open source de Fedora Project autour de Fedora CoreOS, combinant les technologies des deux prédécesseurs.
Un fork open-source de CoreOS a donné lieu à la formation du projet Flatcar-linux.

## Accueil

LWN.net a examiné CoreOS en 2014: « For those who are putting together large, distributed systems—web applications being a prime example—CoreOS would appear to have a lot of interesting functionality. It should allow applications of that type to grow and shrink as needed with demand, as well as provide a stable platform where upgrades are not a constant headache. For "massive server deployments", CoreOS, or something with many of the same characteristics, looks like the future. »

## Voir également

* Application virtualization software technology that encapsulates application software from the operating system on which it is executed
* Comparison of application virtualization software various portable and scripting language virtual machines
* Comparison of platform virtualization software various emulators and hypervisors, which emulate the whole physical computers
* LXC (Linux Containers) – an environment for running multiple isolated Linux systems (containers) on a single Linux control host
* Operating-system-level virtualization implementations based on operating system kernel's support for multiple isolated userspace instances
* Software as a service (SaaS) – a software licensing and delivery model that hosts the software centrally and licenses it on a subscription basis
* Virtualization a general concept of providing virtual versions of computer hardware platforms, operating systems, storage devices, etc.