Conteneurs et fenêtres. De Hello World à Kubernetes. Première partie, introduction



Lorsque je parle avec des ingénieurs Linux et que je leur parle des problèmes du cluster Kubernetes sous Windows, ils me regardent avec méfiance. Certains ne croient même pas que ce soit légitime . Les conteneurs sur Windows ne sont pas aussi courants et demandés que sur Linux. Mais je pense que cela vaut la peine de parler de ce sujet, ne serait-ce que pour comprendre le concept général et les principales différences entre les conteneurs Windows et Linux. La première entrée, je vais parcourir la toile avec un pinceau large, puis, dans les articles suivants, j'essaierai de me plonger progressivement dans les nuances.

Conteneurs Windows


Selon cet article:
De nombreux développeurs .NET ou SQL Server se mordent les coudes et envient leurs collègues Linux.

En effet, les conteneurs sur Windows étaient exotiques jusqu'à récemment. Et le pire, c'est que la documentation devait être collectée en morceaux, sur chaque ressource, qu'il s'agisse du site officiel de Docker ou de Microsoft, tout était présenté sous forme de présentation sans description de «comment et pourquoi», et après un mois ou deux, les informations existantes devenaient obsolètes. Et il n'y a rien de surnaturel à cela - les conteneurs et les technologies qui leur sont associés se développent à une vitesse irréaliste.

Pour le moment, tout va mieux avec la documentation et pour plonger dans le monde des conteneurs pour Windows, il suffit de lire la documentation officielle de Microsoft et de suivre ses changements. Fait intéressant, la documentation est bien écrite et en russe, bien qu'avec une étude approfondie, vous ne pouvez pas éviter de cliquer sur des liens vers diverses ressources comme https://www.docker.com/ ou https://kubernetes.io/ où tout est écrit à l'ancienne bon anglais.

Maintenant, les réponses à toutes les questions peuvent être trouvées dans la documentation officielle, mais certaines nuances sont mieux connues à l'avance. Cela vous sera peut-être utile et vous fera gagner du temps lorsque vous serez plongé dans la technologie des conteneurs sous le drapeau Microsoft.

Vous ne pouvez pas exécuter de conteneurs Windows sur Linux et sur Windows *


La technologie des conteneurs facilite la gestion de l'environnement grâce aux images d'application reconfigurées. C'est comme un Apple Appstore ou Google Play, mais uniquement pour les ingénieurs et les développeurs. Comme dans les magasins d'applications mobiles, vous ne pouvez pas mettre l'application depuis Google Play sur iOS. Ainsi, sur l'hôte Docker avec le système d'exploitation Linux, vous ne pouvez pas démarrer le conteneur avec le système d'exploitation Windows. L'inverse est également vrai, mais avec quelques «mais», car l'hôte Docker avec Windows peut toujours fournir à Linux un environnement pour exécuter des conteneurs.

En outre, vous ne pouvez pas démarrer un conteneur Windows dans un environnement Windows sans vous assurer que les versions du système d'exploitation sont compatibles. Lorsque vous travaillez avec des conteneurs de Microsoft, vous devrez revoir la compatibilité des versions de conteneurs Windows et ouvrir régulièrement ce document.

En parlant de versioning - Microsoft avec l'avènement des conteneurs a décidé de publier de nouvelles versions semi-annuelles de Windows semi-annuelles. Il s'agit de versions telles que Windows Server 1703, 1709, 1803, 1809, 1903. Les chiffres indiquent l'année et le mois de publication et ils sont pris en charge pendant 18 mois. Les deux premiers sont déjà en paix et sont en fin de service. De plus, il existe des versions LTS telles que Windows Server 2016 et Windows Server 2019. Liste des versions.

Donc, si vous avez collecté le conteneur sur un hôte avec une version de Windows 1803, vous ne pouvez exécuter ce conteneur que sur des hôtes avec Windows 1803. En conséquence, afin de ne pas reconstruire le conteneur lui-même à chaque fois, vous devrez utiliser la version LTS de Windows, qui avec des vitesses de développement de technologie moderne pas toujours justifié. Ou, néanmoins, pensez au versionnage et réassemblez toujours les conteneurs en suivant le programme étape par étape du semestre.

La dernière balise dans les conteneurs Dokerfile pour Windows n'est pas toujours présente et généralement déconseillée . Dans le bon sens, vous devez toujours savoir quelle est votre version de Windows et apporter les modifications appropriées au Dockerfile.
Les conteneurs font partie de l'approche Infrastructure as Code. Il est nécessaire de réassembler les conteneurs en permanence, ce n'est pas seulement simple et amusant, mais c'est la magie principale, qui permet aux applications de toujours travailler sur des logiciels frais et améliorés. Mais dans notre cas, nous sommes confrontés à une limitation: cela ne fonctionnera pas de conserver un Dockerfile universel pour tous les systèmes Windows. Il faut en tenir compte.

Tout ce qui précède est vrai pour les conteneurs fonctionnant en mode d'isolation de processus. En mode d'isolation Hyper-V, la compatibilité descendante s'applique - vous pouvez exécuter tous les conteneurs qui sont construits sur les versions actuelle et précédente. En général, en utilisant l'isolation Hyper-V, vous pouvez également exécuter des conteneurs Linux sur un hôte Windows. Mais ce mode prend en charge jusqu'à présent moins de goodies, ce qui est juste le manque de Kubernetes.

La différence entre l'isolement de processus et l'isolement Hyper-V fait l'objet d'un article séparé. Pour l'instant, je dirai simplement que les scénarios avec l'isolement Hyper-V ne sont pas complètement évidents pour moi, et par défaut, Windows utilise l'isolement des processus.

Un autre casse-tête consiste à trouver la version correcte des images sur le Docker Hub. Certaines images sont généralement manquantes pour Windows. Par exemple, vous ne trouverez pas la version officielle de Nginx, MySQL, Nodejs, ainsi que des centaines d'autres applications pour Windows et vous devrez collecter les conteneurs vous-même ou utiliser des conteneurs collectés et fournis par les membres de la communauté.

Windows coûte de l'argent.

N'oubliez pas que Windows est toujours payant. Par exemple, les versions semestrielles sont disponibles via un abonnement Visual Studio ou avec la Software Assurance dans le contrat de licence Microsoft existant. Lien

Mais Microsoft dispose d'un grand nombre de façons de se faire payer gratuitement. Il s'agit du programme BizSpark et de toutes sortes de versions d'essai de Windows Server 2019 pendant 180 jours et ainsi de suite.

Les conteneurs Windows ne sont pas légers.

Il est généralement admis que les conteneurs sont légers, mais que la vérité pour Linux n'est pas toujours vraie pour Windows. La grande majorité des conteneurs Windows, à première vue, pèsent beaucoup trop cher. Et au deuxième coup d'œil, l'impression ne change pas. Par exemple, une image aspnet de base: 4,8 pèse environ 7,5 Go.



Même si vous hébergez les images de base dans un référentiel local, le téléchargement initial de l'image sur l'hôte prendra un certain temps, sans parler des référentiels distants tels que le Docker Hub.

Oui, vous pouvez utiliser le serveur Windows Nano léger dans certains scénarios, mais hélas, il a un tas de limitations. Et plus encore, vous n'êtes pas sur le chemin avec Windows Nano Server si vous développez pour le .Net Framework.

Pour gérer, vous devez bien connaître CMD et Powershell.

Vous devrez très probablement travailler avec la version principale de Windows Server sur les hôtes Docker. Windows Server possède une multitude de capacités de gestion à distance. L'approche générale est qu'ayant un serveur Windows avec une interface graphique, vous pouvez connecter tous les composants logiciels enfichables graphiques à n'importe quel serveur principal.

Cette approche ne fonctionne pas dans les scénarios de conteneur, bien que le conteneur contienne une version complète de Windows Server. À l'intérieur d'un conteneur Windows, il est théoriquement possible de se connecter via WMI, mais ce n'est pas si simple, ne serait-ce que parce que le système d'exploitation hôte va intercepter ce trafic pour lui-même. Il peut y avoir plusieurs dizaines et centaines de conteneurs sur un hôte, et dans ce cas, diriger le trafic vers le bon conteneur est tout.

CMD et Powershell seront nécessaires à la fois pour l'administration des conteneurs et pour l'hôte sur lequel Docker est installé. De plus, la connaissance de ces shells est nécessaire pour écrire un Dockerfile, car toutes les instructions RUN seront exécutées dans les shells susmentionnés.

Se souvenir de toutes les longues applets de commande Powershell est assez délicat. Ce ne sont pas des commandes bash concises pour vous. Bien que maintenant la plupart des applets de commande aient des alias clairs pour tout ingénieur Linux. Dans PowerShell, vous pouvez utiliser:

rm  Remove-Item pwd  Get-Location. cat  Get-Content touch  New-Item etc. #     Linux    .  rm –rf  . #   Powershell   man      Get-Help <> 

Parmi les choses extrêmement utiles, c'est qu'en utilisant Powershell, vous pouvez exécuter un simple serveur Web dans un conteneur à des fins de test. Dans Powershell, tout apparaît comme des objets. Si vous êtes un partisan de la POO, vous apprécierez rapidement les avantages de cette coque.

Pour conclure l'article introductif, je tiens à dire que je n'ai délibérément pas abordé la question de l'orchestration et de la gestion des clusters. Docker sous Windows rattrape son retard et les applications d'orchestration telles que Swarm et Kubernetes sous Windows ne réalisent pas pleinement leur fonctionnalité.

Pour le moment également, si vous souhaitez augmenter le cluster Docker, il sera probablement multi-plateforme. Autrement dit, vous devrez avoir un ou plusieurs hôtes Linux dans le cluster. Par exemple, pour Kubernetes, les nœuds maîtres doivent être sous Linux. Et dans Swarm, les conteneurs Linux sont nécessaires, par exemple, pour implémenter un équilibreur sur Nginx ou exécuter d'autres applications de cluster populaires qui ne sont disponibles que pour Linux.

PS L'utilisation de Windows dans des conteneurs a un ensemble très limité de scripts à utiliser. Cependant, ces scénarios peuvent être extrêmement productifs. Bien sûr, la première chose qui me vient à l'esprit est les applications Web IIS, mais mon expérience montre que les services autonomes Windows et certains services tels que MSMQ sont bien isolés dans des conteneurs.

UPD Il y a une légère inexactitude dans l'article; vous pouvez créer un cluster Docker uniquement sur les hôtes Windows. De plus, ce n'est pas seulement Swarm, mais aussi un produit développé par Micrisoft pour orchestrer le cluster Service Fabric

UPD2. Les conteneurs Docker pour Windows 10 ne sont disponibles qu'en mode d'isolation Hyper-V et utilisent des images de base autres que Windows Server.

Source: https://habr.com/ru/post/fr465057/


All Articles