Comment devenir ingénieur DevOps en six mois ou plus vite. Partie 4. Packaging logiciel

Comment devenir ingénieur DevOps en six mois ou plus vite. Partie 1. Introduction
Comment devenir ingénieur DevOps en six mois ou même plus rapidement. Partie 2. Configuration
Comment devenir ingénieur DevOps en six mois ou même plus rapidement. Partie 3. Versions



Envisagez comment empaqueter votre code pour un déploiement facile et une exécution ultérieure. Permettez-moi de vous rappeler que nous sommes ici maintenant:



Que vous parliez avec vos employeurs actuels ou futurs, vous devriez être en mesure de définir clairement ce qu'est DevOps et pourquoi il est important.
Fournissez une histoire cohérente sur la meilleure façon de livrer rapidement et efficacement le code de l'ordinateur portable du développeur au lieu de déploiement du produit final avec le bénéfice approprié. Nous étudions non pas un ensemble d'outils DevOps disparates et à la mode, mais un ensemble de compétences, guidées par les besoins de l'entreprise et s'appuyant sur des outils techniques. N'oubliez pas que l'étude de chaque étape de DevOps prend environ un mois de formation, ce qui vous prendra au total six mois.

Tutoriel de virtualisation


Vous vous souvenez des serveurs physiques? Les mêmes serveurs pour lesquels vous attendez depuis des semaines l'approbation du bon de commande, l'approbation du processus d'envoi, l'approbation du centre de données, la connexion réseau, l'installation du système d'exploitation et les correctifs? Ce sont les serveurs qui sont entrés dans nos vies.

Imaginez que la seule façon de trouver une maison est de construire une toute nouvelle maison. Après tout, avez-vous besoin de vivre quelque part? Alors attendez qu'il soit construit, peu importe le temps qu'il faut! Cela semble cool, parce que tout le monde a sa propre maison, mais lourd, car sa construction prend beaucoup de temps. Suite à cette analogie, un serveur physique est comme une maison.

Au fil du temps, ce processus est devenu ennuyeux et des gens vraiment intelligents ont eu l'idée de la virtualisation. Ils ont décidé de faire fonctionner un tas de machines imaginaires sur une seule machine physique et ont fait chacun prétendre être une vraie machine. Ingénieux!

Par conséquent, si vous avez vraiment besoin d'une maison, vous pouvez construire la vôtre et attendre six semaines. Ou vous pouvez emménager dans un immeuble à appartements et partager des ressources avec d'autres résidents. Peut-être pas si cool, mais assez bien! Et surtout, vous n'avez rien à attendre!

Cela a duré un certain temps, et des entreprises telles que VMWare ont gagné un capital sérieux à cet égard. Ensuite, d'autres personnes intelligentes ont décidé que pousser un tas de machines virtuelles dans une machine physique ne suffit pas: vous avez besoin d'un emballage plus compact de plus de processus dans moins de ressources.

Donc, une maison ou même un appartement coûte trop cher, alors essayez peut-être de louer une chambre temporairement? De plus, je peux entrer et sortir à tout moment! C'est ce que Docker représente essentiellement en décembre 2018.



Naissance Docker


Docker est une nouvelle technologie basée sur une idée très ancienne. Le système d'exploitation FreeBSD contenait le concept du moteur de virtualisation de prison, qui remonte à 2000! En vérité, tout nouveau est bien oublié ancien.

Et puis, et maintenant, l'idée était d'isoler les processus individuels au sein du même système d'exploitation en fonction de la virtualisation au niveau du système d'exploitation, ou «virtualisation au niveau du système». Notez que ce n'est pas la même chose que la virtualisation complète, ou «virtualisation complète», qui exécute des machines virtuelles côte à côte sur le même hôte physique.

Dans la pratique, cela signifie que la popularité croissante de Docker reflète fidèlement la croissance des microservices, une approche du développement logiciel dans laquelle le logiciel est décomposé en de nombreux composants distincts. Et tous ces composants ont besoin de leur maison. Les déployer individuellement en tant qu'applications Java autonomes ou exécutables binaires est une énorme douleur: la façon dont vous contrôlez une application Java est différente de la façon dont vous contrôlez une application C ++, et cela, à son tour, est différent de la gestion d'une application Golang .

Au lieu de cela, Docker fournit une interface de gestion unique qui permet aux programmeurs de regrouper, déployer séquentiellement et exécuter diverses applications. C'est une énorme victoire, mais parlons des avantages et des inconvénients de Docker.

Avantages de Docker


1. Isolement des processus


Docker permet à chaque service d'avoir un processus complètement isolé. Le service A vit dans son propre petit conteneur, avec toutes ses dépendances, le service B vit également dans son propre conteneur privé avec toutes ses dépendances, et ces deux services ne sont pas en conflit.

De plus, si un conteneur tombe en panne, seul ce conteneur en souffrira.

Les conteneurs restants fonctionneront et devraient continuer de fonctionner. Un tel mécanisme est bénéfique pour la sécurité. Si le conteneur est compromis, il sera très difficile (mais pas impossible!) De s'en sortir pour casser le système d'exploitation de base.

Enfin, si le conteneur ne se comporte pas correctement (consomme trop de ressources processeur ou mémoire), vous pouvez réduire le «rayon d'explosion» de ce conteneur uniquement sans affecter le reste du système.

2. Déploiement


Pensez à la façon dont les différentes applications sont construites dans la pratique. S'il s'agit d'une application Python, elle comportera de nombreux packages Python différents. Certains d'entre eux seront installés en tant que modules pip, d'autres en tant que packages rpm ou deb, et d'autres en tant que simples installations git-clone. Ou, si vous avez terminé avec virtualenv, ce sera un seul fichier zip de toutes les dépendances dans le répertoire virtualenv.

D'un autre côté, s'il s'agit d'une application Java, elle aura alors un assemblage Gradle Built, avec toutes ses dépendances étendues et dispersées aux endroits appropriés.

Vous voyez quel est le problème? Différentes applications, assemblys avec différents langages et différentes durées d'exécution posent un problème lors du déploiement de ces applications pour prod. De plus, le problème est exacerbé en cas de conflit. Que faire si le service A dépend de la bibliothèque Python v1 et le service B dépend de la bibliothèque Python v2? Il y a un conflit ici, car v1 et v2 ne peuvent pas coexister sur la même machine.

Et puis Docker entre en jeu. Il vous permet d'isoler complètement non seulement le processus, mais aussi les dépendances. Il est possible d'avoir plusieurs conteneurs travaillant côte à côte sur le même système d'exploitation, chacun contenant ses propres bibliothèques et packages qui ne sont pas compatibles avec les autres.

3. Gestion de l'exécution du programme


Je note que la façon dont nous gérons les applications disparates dépend de l'application elle-même. Le code Java est écrit différemment dans le registre, s'exécute différemment et est suivi différemment du code Python. Et Python est différent de Golang, etc.

Avec Docker, nous obtenons une interface de gestion unique et unifiée qui nous permet de démarrer, contrôler, centraliser les journaux, arrêter et redémarrer de nombreux types d'applications. Il s'agit d'un énorme gain de productivité, qui réduit considérablement les coûts d'exploitation des systèmes de production en fonctionnement.

Depuis décembre 2018, vous n'aurez plus à faire de choix entre le lancement rapide de Docker et la sécurité des machines virtuelles. Projet de plate-forme de virtualisation légère Fireckracker, présenté par Amazon, a essayé de combiner le meilleur des deux solutions. Cependant, il s'agit d'une nouvelle technologie qui n'approche que de la phase de production.



Remarque: La plate-forme Firecracker fournit des outils pour créer et gérer des environnements et des services isolés construits à l'aide d'un modèle de développement sans serveur. Le code du projet est écrit en Rust et distribué sous la licence Apache 2.0.

Firecracker propose des machines virtuelles légères appelées microVM. Pour les isoler complètement, des technologies de virtualisation matérielle sont utilisées, mais en même temps, les performances et la flexibilité sont fournies au niveau des conteneurs ordinaires. La plate-forme est basée sur le Virtual Machine Monitor (VMM), qui utilise l'hyperviseur KVM intégré au noyau Linux. VMM est basé sur les bases du projet crosvm écrit en Rust , que Google développe pour lancer Linux sur ChromeOS. Fin 2018, les bases de code crosvm et Firecracker ont été divisées, mais Amazon prévoit d'envoyer des corrections aux composants empruntés en amont.

Cependant, quelle que soit la qualité du Docker, il présente également des inconvénients.

Introduction à Lambda


Premièrement, l'exécution de Docker continue de fonctionner sur des serveurs qui doivent être préparés, corrigés, etc. Deuxièmement, Docker n'est pas sûr à 100%. Au moins, il n'est pas aussi sécurisé qu'une machine virtuelle. Il y a une raison pour laquelle les grandes entreprises travaillant avec des conteneurs hébergés le font à l'intérieur de machines virtuelles, et non sur du métal nu. Ils ont besoin de temps de lancement de conteneurs rapides et de la sécurité des machines virtuelles!



Troisièmement, personne ne contrôle réellement le Docker en tant que tel. Au lieu de cela, il est presque toujours déployé dans le cadre d'une structure d'orchestration de conteneurs complexe telle que Kubernetes, ECS, docker-swarm ou Nomad. Ce sont des plates-formes assez complexes qui nécessitent du personnel spécial pour travailler (je discuterai de ces solutions plus en détail plus tard).

Cependant, si je ne suis qu'un développeur, je veux juste écrire du code et demander à quelqu'un de l'exécuter pour moi. Docker, Kubernetes et autre jazz - dois-je vraiment apprendre tout cela? Je dirai ceci: tout dépend des circonstances. Pour les personnes qui souhaitent simplement que quelqu'un d'autre exécute leur code, le stockage cloud AWS Lambda et d'autres éléments similaires sont une excellente option.

AWS Lambda vous permet d'exécuter du code sans provisionnement ni gestion de serveur. Vous ne payez que pour le temps de calcul que vous consommez, et lorsque votre code ne fonctionne pas, il n'y a aucun frais.
Si vous avez entendu parler du stockage sans serveur, alors c'est tout. Plus de serveurs de lancement ni de conteneurs de gestion! Écrivez simplement votre code, emballez-le dans un fichier zip, téléchargez-le sur Amazon et laissez-le gérer votre mal de tête! De plus, comme les «lambdas» sont de courte durée, il n'y a rien à craquer - les «lambdas» sont assez sûres dans leur conception. Vraiment super?

Mais il y a aussi des points négatifs. Premièrement, les lambdas ne peuvent fonctionner que pendant un maximum de 15 minutes (à partir de novembre 2018). Cela signifie que les processus de longue durée, tels que Kafka ou les applications de craquage de nombres, ne peuvent pas fonctionner dans Lambda.

Deuxièmement, les «lambdas» sont des fonctions en tant que service (fonctions en tant que service). Cela signifie que votre application doit être entièrement décomposée en microservices et synchronisée avec d'autres services PaaS complexes tels que AWS Step Functions . Cependant, toutes les entreprises ne sont pas à ce niveau d'architecture de microservices.

Troisièmement, le dépannage des lambdas est très difficile. Il s'agit d'exécutions dans le cloud et toutes les corrections de bogues se produisent dans l'écosystème Amazon. C'est souvent assez complexe et peu intuitif. Bref, il n'y a pas de déjeuner gratuit ici.

Je note qu'à la fin de 2018, il existe également des solutions de conteneurs cloud sans serveur telles que AWS Fargate. Sa mécanique est très similaire à celle de Lambda. Si vous commencez tout juste à apprendre ces services, je vous recommande fortement d'essayer Fargate, qui est un moyen incroyablement facile de faire fonctionner les conteneurs «correctement». De plus, le 13 janvier 2019, les services cloud AWS ont annoncé une réduction significative du prix de Fargate, ce qui en fait un choix très attractif pour le lancement de conteneurs sans serveur.



Sommaire


Docker et Lambda sont les deux approches basées sur le cloud modernes les plus populaires pour l'empaquetage, l'exécution et la gestion des applications. Ils sont souvent gratuits, à la fois adaptés à divers cas d'utilisation et applications.

Quoi qu'il en soit, l'ingénieur DevOps moderne doit bien connaître les deux. Par conséquent, la formation Docker et Lambda sont de bons objectifs à court et moyen terme.
Je note que jusqu'à présent, nous avons traité de sujets que les ingénieurs DevOps juniors et intermédiaires devraient connaître. Dans les sections suivantes, nous commencerons à discuter des méthodes qui conviennent mieux aux ingénieurs DevOps de niveau intermédiaire et supérieur. Comme toujours, il n'y a pas de moyen facile d'acquérir des connaissances!

A suivre très prochainement ...

Un peu de publicité :)


Merci de rester avec nous. Aimez-vous nos articles? Vous voulez voir des matériaux plus intéressants? Soutenez-nous en passant une commande ou en recommandant à vos amis, le cloud VPS pour les développeurs à partir de 4,99 $ , un analogue unique de serveurs d'entrée de gamme que nous avons inventé pour vous: Toute la vérité sur VPS (KVM) E5-2697 v3 (6 cœurs) 10 Go DDR4 480 Go SSD 1 Gbit / s à partir de 19 $ ou comment diviser le serveur? (les options sont disponibles avec RAID1 et RAID10, jusqu'à 24 cœurs et jusqu'à 40 Go de DDR4).

Dell R730xd 2 fois moins cher au centre de données Equinix Tier IV à Amsterdam? Nous avons seulement 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV à partir de 199 $ aux Pays-Bas!Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - à partir de 99 $! En savoir plus sur la création d'un bâtiment d'infrastructure. classe c utilisant des serveurs Dell R730xd E5-2650 v4 coûtant 9 000 euros pour un sou?

All Articles