Orchestre de performance

Il n'est pas faux de dire que le meilleur des gens
prendre de la joie par la souffrance.
Ludwig van Beethoven



Je m'appelle Sergey, je travaille chez Yandex.Money dans une équipe de recherche sur la performance. Je veux vous raconter le début d'une histoire sur notre chemin vers l'orchestration - comment nous avons choisi les instruments et ce que nous avons pris en compte. Tous les événements de l'article se déroulent en temps réel, alors vous, chers lecteurs, suivez presque en direct l'évolution de la situation.


Pourquoi avons-nous besoin d'un chef d'orchestre dans l'équipe?


Qui est chef d'orchestre? Du fr. diriger - gérer, diriger, diriger - dans le monde de la musique - c'est une personne, le leader de l'apprentissage et de la performance de la musique d'ensemble. Dans notre cas, cet endroit est occupé par des systèmes d'orchestration et d'automatisation.


Leur rôle n'est pas différent de celui du chef d'orchestre en musique - ils sont nécessaires pour aider l'équipe, diriger et organiser sa pièce.


En règle générale, une équipe a un certain ensemble de capacités - appelons-les serveurs sur lesquels ils mettent en œuvre leurs projets.


L'approche pour obtenir et exploiter ces serveurs est diverse. Quelques exemples:


  • L'équipe demande par exemple au groupe d'opération de lui fournir des ressources avec certains paramètres.
  • Le groupe d'exploitation leur fournit la quantité requise - nuage ou métal nu («métal nu») - et s'engage à les maintenir en bon état selon le SLA. L'ajustement est également effectué par l'équipe des opérations.
  • L'équipe ne reçoit que des ressources cloud ou bare metal du groupe d'opérations; elle effectue ses propres paramètres.
  • L'équipe elle-même «achète» des ressources et les soutient / les configure de manière totalement indépendante.

Notre équipe utilise des serveurs qui doivent être pris en charge - mettre à jour le système d'exploitation, installer de nouveaux packages, etc.


Pour nous, nous les avons distingués en deux types principaux:


  • groupe de réservoirs
  • groupe de service.

Le groupe de chars se compose d'hôtes avec Yandex.Tank.


Le groupe de services comprend tout ce qui concerne la maintenance - ce sont divers services pour fournir une assistance pour le cycle de publication, générer des rapports automatiques, etc.


À un moment donné, il était devenu gênant de gérer tout cela manuellement, et nous avons pensé à automatiser l'ensemble du processus, en commençant par le «chargement» des serveurs et en terminant par le développement, la mise en page et le lancement de notre service interne.


Pourquoi un chef d'orchestre est-il nécessaire, même si l'orchestre lui-même peut jouer?


Pour commencer, nous avons maîtrisé Ansible et avons commencé à «verser» nos serveurs bare metal pour être moins dépendants des administrateurs système - tout le monde y gagne, nous acquérons de nouvelles compétences et décharge les administrateurs de la partie du travail qu'ils ont toujours sans nous. Nous nous efforçons de développer notre équipe en dehors de notre spécialité et de notre autonomie autant que possible.


La société travaille avec Ansible depuis longtemps déjà installée et réglementée, nous avons donc facilement intégré notre solution dans ce processus.


L'hébergement comprend désormais trois rôles Ansible:


  • le premier rôle installe le système d'exploitation,
  • le deuxième déroule les paramètres de base de l'hôte, l'autorisation LDAP, par exemple,
  • et le troisième installe Yandex.Tank et les dépendances associées dans le conteneur Docker.

Passons aux services que nous utilisons au sein de l'équipe.


Pour nos tâches, nous utilisons également Kotlin et Python, et un peu plus Golang. Pour unifier le développement et le déploiement de nos services, nous avons décidé de les emballer dans des containers dockers. Cela donne la liberté de choisir un langage de programmation et régule en même temps le format de livraison uniforme de son application.


Une petite remarque sur ipv6 dans Docker


Certains des services avec lesquels nous interagissons ne sont disponibles que via ipv6, j'ai donc dû trouver comment créer ipv6 pour les conteneurs.


Selon la documentation d'ipv6 sur le site officiel de Docker, ipv6 est activé en ajoutant des paramètres à daemon.json:


{ "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64" } 

Dans ce cas, le fournisseur doit émettre le sous-réseau ipv6, que vous fixed-cidr-v6. dans fixed-cidr-v6.
Cependant, nous avons choisi une autre option - ipv6 NAT, et voici pourquoi:


  • Docker ne peut plus être utilisé uniquement avec ipv6.
  • La présence d'une adresse routable à l'échelle mondiale dans chaque conteneur signifie que tous les ports (même ceux non publiés) deviennent accessibles à tous si aucun filtrage supplémentaire n'est effectué.
  • proxy de l'espace utilisateur pour la publication des ports, iptables pour ipv4 uniquement .

ipv6 NAT est un conteneur docker qui gère lui-même les règles dans ip6tables et les modifie lorsqu'un nouveau conteneur est ajouté.


Pour que cette solution fonctionne correctement, un certain nombre de manipulations ont dû être effectuées. Assurez-vous d'initialiser ip6table_nat sur le système. La présence d'un module installé dans le système ne garantit pas qu'au démarrage le module sera chargé dans le noyau. Nous sommes tombés sur ce problème lorsque nous avons eu cette erreur lors du démarrage d'un conteneur avec NAT sur un nouvel hôte:


 2019/01/22 14:59:54 running [/sbin/ip6tables -t filter -N DOCKER --wait]: exit status 3: modprobe: can't change directory to '/lib/modules': No such file or directory ip6tables v1.6.2: can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?) 

Le problème a été résolu après avoir ajouté l'initialisation au rôle Ansible à l'aide du module modprobe et l'avoir chargé au démarrage à l'aide de lineinfile:


 - name: Add ip6table_nat module modprobe: name: ip6table_nat state: present - name: Add ip6table_nat to boot lineinfile: path: /etc/modules line: 'ip6table_nat' 

À propos, il y a un bon article sur Haber, qui décrit brièvement et clairement les avantages et les inconvénients d'une méthode particulière pour travailler avec ipv6 dans docker.


Mais revenons à notre question posée au début:
Pourquoi un chef d'orchestre est-il nécessaire, même si l'orchestre lui-même peut jouer?


Maintenant, tout le monde sait jouer dans notre équipe:


  • le processus de "remplissage" des serveurs est créé,
  • le développement et le déploiement des services sont unifiés.

Une question raisonnable se pose: comment déployer, mettre à jour, contrôler nos services dans des conteneurs Docker de manière efficace et aussi automatisée que possible?


Malgré le fait que chaque membre de l'orchestre connaisse sa propre part, il peut s'égarer, s'éloigner de l'idée originale. Ici, nous arrivons au fait que sans chef d'orchestre, notre orchestre ne pourra pas répéter et jouer de manière harmonieuse. Le chef d'orchestre est responsable de tous les paramètres de performance, pour s'assurer que tout est uni par un rythme et une humeur uniques.


Comment obtenir un bon conducteur avec un investissement minimal?


Le thème de l'orchestration est bien développé sur le marché. Mais d'abord, parlons des outils de support qui peuvent aider le chef d'orchestre.


Consul est un système qui fournit deux fonctions principales:


  • découverte de service
  • stockage de valeurs-clés distribué.

Dans notre orchestre, le consul sera responsable de l'enregistrement des services et du stockage de leurs configurations. Il existe deux options d'inscription:


  • Actif - c'est lorsque le service lui-même s'enregistre à l'aide de l'API HTTP;
  • Passif - le service doit être enregistré manuellement.

Vault est un référentiel qui standardise et unifie le stockage sécurisé et utilise des secrets - mots de passe, certificats.
Voici les avantages que nous retirerons de cet outil:


  • Un centre unique pour créer et garder des secrets, gérer leur cycle de vie via l'API HTTP.
  • Transit Secrets Engine - cryptage-décryptage des données sans les enregistrer. La capacité de transmettre des données sous forme cryptée via des canaux de communication non sécurisés.
  • Stratégies d'accès faciles à configurer.
  • Auditez l'accès aux secrets.
  • Possibilité de créer votre propre CA (autorité de certification) pour gérer les certificats auto-signés au sein de votre infrastructure.

Compte tenu de toutes nos exigences, deux options convenaient au rôle de chef d'orchestre - Kubernetes et Nomad.


Kubernetes


Combien d'articles et de livres ont déjà été écrits sur lui (celui- ci , par exemple), des rapports ont dit que j'écrirai en bref - c'est une moissonneuse-batteuse universelle qui peut faire presque n'importe quoi. Le payer n'est pas toujours facile à configurer et à prendre en charge un cluster sur Kubernetes.


Nomade


L'outil provient de HashiCorp, une entreprise connue pour le consul et le coffre-fort mentionnés ci-dessus.


Nomad nous a semblé plutôt simple à installer et à configurer que Kubernetes. Un fichier binaire fonctionne à la fois en mode serveur et en mode client. En même temps, Nomad couvre toute la liste des tâches que nous voulons qu'il résout: gestion de cluster, ordonnanceur rapide, support multi-centre. De plus, lorsque vous utilisez consul et vault, nous bénéficions d'une intégration plus étroite pour orchestrer nos services.


Ce qui est maintenant au travail:


  • préparé les serveurs pour le déploiement de Consul,
  • la configuration du cluster nomade sera saisie dans Consul, avec laquelle le nomade devra être déployé automatiquement,
  • En parallèle, nous installerons le coffre-fort pour garder les secrets.

La question dans la salle est de savoir s'il vaut la peine d'avoir un chef d'orchestre pour de telles tâches, ou un orchestre est-il bon sans lui? Dites-nous dans les commentaires ce que vous en pensez.




Abonnez-vous à notre blog et restez en contact - nous vous dirons bientôt ce qui s'est finalement passé et si nous avons configuré le cluster nomade, comme nous le voulions.


Visitez notre salon de discussion confortable sur les télégrammes où vous pouvez toujours demander des conseils, aider vos collègues et simplement parler de la recherche de performances et plus encore.

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


All Articles