PuppetConf 2016. Kubernetes pour les administrateurs système. Partie 2

PuppetConf 2016. Kubernetes pour les administrateurs système. Partie 1

Fixez une limite de ressources. En utilisant des calculs simples, vous pouvez calculer le nombre de copies de l'application que vous pouvez exécuter - si une copie a besoin de 1 Go de RAM, puis d'avoir 10 Go de mémoire, vous pouvez exécuter 10 copies. Cela n'aura pas besoin d'être surveillé, car je sais que le cœur du système commencera simplement à remplir le contrat stipulé. Ce contrat, ou accord entre vous et le système, est très important car s'il est disponible, tous les outils fonctionnent beaucoup mieux. Ainsi, nous introduisons la discipline d'exécution dans le système.



Ainsi, le planificateur ne lancera cela que si chacune des répliques obtient 1 Go de mémoire libre. S'il n'y a pas assez de mémoire, le processus ne démarre pas. Donc, j'entre la commande kubectl create, et après son exécution le conteneur mysql sera créé.



Il y a une mise en garde ici liée aux systèmes avec état - vous avez plusieurs choix. J'ai mis en évidence un morceau de code dans lequel j'ai indiqué que je souhaitais utiliser le disque persistant de mon fournisseur de cloud.



Il peut s'agir de NFS, ISCSI ou de tout autre protocole qui fournit un accès de niveau bloc au réseau aux périphériques de stockage. Je le fais pour déconnecter mon stockage des machines. Si l'une des machines tombe en panne, je peux recréer le processus sur l'autre machine en utilisant le même magasin de données. Si vous montez le stockage à partir de l'hôte sur lequel la panne se produit, vous perdez simplement vos données et devrez tout restaurer à nouveau à partir de la sauvegarde.

Par conséquent, notre objectif est que le stockage s'exécute plus rapidement à mesure que nos réseaux se développent plus rapidement. Il ne s'agit pas de migration, mais de la capacité de monter et démonter rapidement le stockage en dehors de la machine. C'est tout à fait possible de le faire. Voyons comment les choses se passent avec notre foyer - il est toujours en cours de création, et maintenant je veux créer des services pour que d'autres applications puissent trouver les nôtres.



Dès que je crée ce service, Kubernetes générera un enregistrement DNS, vous pouvez donc simplement appeler mysql et détecter automatiquement que ce conteneur est en cours d'exécution. Continuons et entrez la commande $ kubectl create –f services / mysql.yaml. Comme vous pouvez le voir, le conteneur est toujours en cours de création. Soit dit en passant, vous pouvez regarder cette vidéo de démonstration sur mon site Web. Vous voyez à quoi ressemble un service pour une application mysql - il contient les adresses IP du cluster, les adresses IP externes, les numéros de port et les protocoles réseau.



Voyons ce qui se passe avec ce conteneur particulier. Comme vous pouvez le voir, cela fonctionne.



Donc, pour le moment, je pense que l'application mysql fonctionne vraiment. La prochaine chose dont nous avons besoin est une application Web. Alors déployons une telle application appelée "homards", je l'ai prise sur GitHub, c'est un clone de Hacker News. C'est un projet Ruby-on-Rails, je viens de créer un conteneur basé sur les données fournies ici et la configuration de base.



Si vous n'êtes pas à jour: Hacker News vous rendra très populaire lors de toute conférence de hackers. Lisez simplement ce qui est écrit ici, et vous pourrez discuter de tous les sujets populaires du monde de la technologie informatique. Donc, si vous voulez impressionner les autres, lisez les actualités de ce portail.

Donc, je veux créer un clone de cette chose et la mettre sur Internet pour gagner de l'argent. Bien sûr, ce n'est pas un vrai projet d'entreprise, mais juste une démonstration d'opportunités.
Je déploie actuellement une application appelée Lobsters. De mon secret, j'obtiens l'URL de la base de données, pour laquelle j'utilise la commande $ kubectl get secrets. Secret possède également un nom d'utilisateur et un mot de passe.



Ensuite, je veux créer un conteneur qui communiquera avec mon application, pour lequel j'utilise la commande $ kubectl create –f deployments / lobsters.yaml. Comme vous pouvez le voir, l'application est en cours d'exécution.



De plus, nous avons une adresse IP. J'entre la commande $ kubectl get svc et j'utilise l'équilibreur de charge global, qui pointe vers la page avec l'adresse IP externe 101.198.12.60.





Nous allons accéder au navigateur et essayer de saisir cette adresse via HTTP. Ouais, erreur en attente de migration! C'est Ruby-on-Rails, donc je m'attendais à quelque chose comme ça.



Nous avons donc besoin d'une migration de base de données. Nous devons exécuter ce processus une fois, et c'est tout. Cependant, nous voulons le faire de la même manière - pas d'autorisation sur le serveur, pas de serveurs spéciaux tels que Jump box, nous voulons contacter le planificateur et dire: "Hé, exécutez cette tâche une fois et après l'exécution, tuez simplement le processus!". Autrement dit, je veux exécuter une seule commande et quitter. Par conséquent, pour effectuer un traitement par lots à l'aide de la commande $ cat jobs / lobsters-db-schema-load.yaml, je crée un objet Jobs qui implémente un tel schéma.



Le drapeau de commande de râteau «db: schema: load» est envoyé directement au site Web de GitHub et dit: «prenez l'image de code: kelseyhightower / lobsters: 2.0.0 et exécutez cette commande 1 fois». La ligne restartPolicy: never à la fin du code indique à Kubernetis qu'il ne doit l'exécuter qu'une seule fois et ne jamais le répéter. Je limite également les ressources du processeur et de la mémoire, c'est-à-dire que j'indique les paramètres d'une machine appropriée sur laquelle cela peut être démarré et exécuté, après quoi le transfert de la base de données sera terminé. J'ai donc «mis sur les rails» tous les objets Jobs qui devraient être exécutés sur le système en utilisant la commande $ kubectl create –f jobs / lobsters-db-schema-load.yaml.
Vous voyez que le travail correspondant est créé, après quoi je tape la commande $ watch kubectl get jobs.



Ainsi, le conteneur a été tiré vers la machine, le planificateur a fonctionné, la tâche de râteau a été créée. Revenons en arrière et actualisons la page d'erreur de la base de données. Comme vous pouvez le voir, notre système a maintenant été mis en œuvre avec succès.



Ensuite, je dois me connecter. J'utilise la commande $ kubectl create –f jobs / lobsters-db-seed.yaml. Vous voyez que le planificateur charge toujours le conteneur et après quelques secondes, le travail est terminé. Pour démarrer la migration, nous utilisons le même niveau de code qu'auparavant. Je me connecte à cette page, et tout ce qui doit être fait maintenant est d'obtenir le contenu. Le contenu est nécessaire si nous voulons «collecter» de l'argent. Voici à quoi ressemble le piratage de la croissance, ou «croissance du piratage» - vous allez sur le site de quelqu'un d'autre, en récupérez le contenu et le postez sur votre propre site, qui ressemble à l'original.



Mais nous avons besoin non seulement de contenu, mais d'un bon contenu. Ce serait dommage de laisser les choses dériver, alors j'emprunte manuellement quelques nouvelles. Vous pouvez copier le contenu automatiquement, mais ce n'est pas légal. Je sélectionne donc l'actualité, je copie l'adresse du lien, je mets la balise «test», je coche la case «Je suis l'auteur de l'histoire située à cette URL» et j'appuie sur le bouton Soumettre. Voyez à quel point les nouvelles volées sont belles!



Il est maintenant temps de faire évoluer l'application. Pour ce faire, il vous suffit de modifier la définition de ce que nous faisons - au lieu d'une réplique, passez, par exemple, à 10. Ensuite, je lance à nouveau le bloc de commande.



Kubernetes accepte ces informations, effectue une action et nous avons maintenant 10 copies de l'application Lobsters en cours d'exécution dans notre foyer. De plus, ce processus est automatiquement ajouté à l'équilibreur de charge grâce au travail des Services.



Voyons ce qui se passe dans le backend. Pour ce faire, j'utilise la commande $ kubectl get svc, j'obtiens un bref état et demande de le décrire avec la commande $ kubectl describe svc. Kubernetes détecte automatiquement tous nos points de terminaison et les place derrière un équilibreur de charge.



Dans le même temps, tout ce qui est inutile est supprimé et tout ce qui est nécessaire est automatiquement ajouté. Nous n'avons pas besoin de créer cette chose encore et encore, tout est entièrement intégré à la plate-forme.
La prochaine question importante est de savoir comment mettre à jour et comment obtenir des journaux. Si vous vous souvenez, j'ai supprimé votre accès SSH, vous devez donc centraliser les journaux à l'aide de quelque chose comme Log Stash ou la journalisation interne de Google Cloud. Mais si vous souhaitez simplement afficher les journaux ad hoc, n'oubliez pas que vous n'avez pas accès aux machines. Cependant, vous pouvez utiliser l'API pour capturer des journaux à l'aide de noms de conteneurs. Pour ce faire, entrez la commande $ kubectl logs lobsters-240734871-03rmn –f, où 03rmn est le nom d'une copie spécifique de l'application lobsters-240734871 dans le conteneur. Ainsi, vous pouvez afficher le journal de chaque conteneur avec une réplique, de sorte que si nécessaire, dépannez.



Voyons notre contenu en utilisant la commande $ kubectl get pods, comme vous pouvez le voir, tout fonctionne. La prochaine chose importante à faire est d'embaucher un agent de commercialisation. Il regarde cette page et dit: "Faites ce que vous voulez, mais supprimez ces taches blanches du site!".



Tout ce que vous devez faire pour cela est de créer un nouveau conteneur en plus de celui déjà créé et de personnaliser le CSS pour ce que nous voulons promouvoir. Permettez-moi de vous rappeler que nous ne parlons pas de nœuds, les nœuds ne sont pas importants pour nous, car le système lui-même fournira exactement ce que nous voulons.

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 des VPS basés sur le cloud pour les développeurs à partir de 4,99 $ , un analogue unique de serveurs d'entrée de gamme que nous avons inventés pour vous: Toute la vérité sur les 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