Histoires de réussite de Kubernetes en production. Partie 10: Reddit

La semaine dernière, il a été annoncé que désormais tous les nouveaux services Reddit sont lancés en production sur une infrastructure basée sur des clusters Kubernetes. Il s'agit d'un jalon important sur la voie de la migration vers les K8 de l'une des ressources en ligne les plus populaires, et voici comment cela est arrivé ...



Likbez : À ce jour, Reddit est dans le top 20 des sites mondiaux (et n ° 6 aux États-Unis) selon Alexa . Cette communauté en ligne d'origine américaine comprend plus de 400 millions d'utilisateurs actifs (en moins d'un mois), 12 millions de publications et 2 milliards de votes par jour.

À propos de pourquoi et comment les ingénieurs de Reddit sont venus à Kubernetes, en décembre dernier à KubeCon 2018 ( présentation + vidéo ) Greg Taylor, chef du groupe d'ingénierie de libération de Project Engineering, Department of Infrastructure.



Pourquoi es-tu venu à Kubernetes?


Début 2016, le service, implémenté comme une application monolithique , ne comptait qu'une vingtaine d'ingénieurs qui formaient 3 équipes, dont l'une est une sorte de héros de l'histoire - l'équipe Infrastructure. Cependant, cette année a apporté de grands changements: à la fin de l'année, plus de 60 ingénieurs travaillaient dans l'entreprise (et à la fin de 2018, leur nombre était passé à 200, c'est-à-dire qu'en seulement 3 ans, le personnel a été multiplié par 10 ).

Ces taux de croissance rapides ont mis à l'ordre du jour la non pertinence (inefficacité) de l'architecture d'application monolithique, car il est devenu très difficile d'apporter de nombreuses modifications à ses différents composants (par différentes équipes). S'étant réunis pour résoudre le problème et considérant de nombreuses options, les ingénieurs ont choisi la voie de l'architecture orientée services (SOA) .

En passant à une architecture de service au lieu d'un gros monolithe, Reddit a rencontré un nouveau problème. L'équipe infrastructure est devenue un goulot d'étranglement dans les activités des développeurs qui se sont avérés très dépendants d'elle à différents stades: lors de l'initialisation des services, lors de leur fonctionnement continu, lors du débogage et de la résolution des problèmes de performances. Pour résoudre rapidement le problème, l'entreprise a constitué des équipes plus autonomes appelées «orientées infrastructure»: les participants de ces équipes avaient les compétences nécessaires dans le domaine de l'exploitation de l'infrastructure, leur permettant de surmonter de nombreuses difficultés sans attendre les actions de l'équipe Infrastructure, qui était surchargée par un carnet de commandes sans fin de nombreux développeurs.

Cependant, c'était toujours une solution temporaire et la pratique a montré que tout le monde ne voulait pas faire fonctionner la pile entière pour leur service:



Comment cette situation a-t-elle été résolue? L'organisation a introduit le concept des propriétaires de services , qui pouvaient développer leur service du tout début à la fin, déployer le service tôt et souvent, exploiter le service (y compris les problèmes de disponibilité et de performance). Mais comment y parvenir?

Au lieu de vous attendre à ce que des équipes d'ingénieurs aux compétences irréprochables combinent des services à partir de dizaines de briques, dont beaucoup ne connaissent peut-être pas, vous devez leur offrir un chemin bien pensé et prédéfini pour amener des services à la production, affectant un minimum de technologie. Cela évitera aux ingénieurs d'avoir à apprendre de nombreuses nouvelles technologies et outils, qui peuvent être très nombreux:



«Afin de mettre cette idée en pratique, nous devions« regrouper »nos connaissances, nos processus, nos meilleures pratiques et bien plus encore sous une forme plus accessible.»

InfreRedd - Kubernetes dans Reddit


C'est ainsi qu'est né InfreRedd, le produit d'infrastructure interne de Reddit, basé sur Kubernetes.

Comment les trois besoins des propriétaires de services spécifiés dans leur définition ont-ils été satisfaits?

1. Développement


La norme de développement dans l'organisation n'indique pas le choix d'un langage ou d'un cadre spécifique, mais définit la «forme» générale du service, à laquelle elle doit correspondre. La norme - une spécification de service indépendante du langage de programmation - comprend la définition d'un protocole RPC, l'utilisation des secrets, le retour des métriques, la traçabilité et le format d'émission des journaux. Un exemple de la mise en œuvre d'une telle spécification en Python peut être trouvé dans le projet de plaque de base , qui, cependant, ne sera probablement pas utile à quelqu'un pour une utilisation réelle, mais il peut être une inspiration.

De plus, des matériaux ont été créés pour un démarrage rapide lors de l'écriture de nouveaux services: des talons de code pour différentes langues (Python, Go, Node), ainsi que Dockerfile, des configurations pour CI et même des graphiques Helm.

Pour aider au développement local, le choix des ingénieurs de Reddit s'est porté sur le produit Google - Skaffold , qui offre aux développeurs un cycle de lecture: éditer → reconstruire → actualiser, ce qui:

  • ne nécessite pas une connaissance approfondie de Kubernetes;
  • au plus près de la production;
  • vous permet d'utiliser des graphiques / images standard;
  • et - contrairement au Minikube qui était utilisé auparavant - travailler avec Skaffold ne nécessite pas d'énormes ressources de la part des ordinateurs portables qui fonctionnent (car le déploiement est effectué sur des clusters distants).

2. Déployer


Reddit utilise la plate-forme de livraison continue Drone pour exécuter des tests et créer des artefacts (généralement des images Docker).

Kubernetes utilisait à l'origine le plug-in Helm pour Drone pour le déploiement, mais assez rapidement, les ingénieurs sont arrivés à la conclusion que Helm n'était pas satisfait car ils voulaient un système qui «comprenne mieux l'état des objets créés ou mis à jour», et une automatisation accrue des processus de déploiement a conduit à la nécessité d'une solution qui pourrait faire appel aux outils utilisés et interrompre la restauration en cas d'échecs ou de problèmes de performances.

En conséquence, Spinnaker a été choisi pour orchestrer le déploiement dans Kubernetes. Pour lui, des modèles ont été créés pour des pipelines typiques (sur Jsonnet). Ensuite, des graphiques Helm sont générés, qui sont déjà déployés dans Kubernetes par Spinnaker. Les utilisateurs reçoivent des informations sur la progression du déploiement et une aide au diagnostic en cas de problème. Voici à quoi ressemble un processus de déploiement typique en staging / production de manière très générale:



3. Fonctionnement


Premièrement, comment les obligations des propriétaires de services et de l'équipe d'infrastructure sont-elles partagées?

  • Propriétaires de services : comprendre les bases de Kubernetes, déployer et exploiter leurs services;
  • Équipe infrastructure : soutenir l'opérabilité (déploiement, support, évolutivité) des clusters Kubernetes, en leur fournissant toutes les ressources nécessaires, et également conseiller les ingénieurs de l'organisation sur la conception de services fiables, productifs et tolérants aux pannes (en particulier, des sessions de formation sont organisées régulièrement, dont les enregistrements sont ensuite distribués dans toute l'entreprise).

Les propriétaires de services sont limités dans leurs droits. Cependant, pour accéder à la production (pour diagnostiquer un problème), il est possible de demander (via un utilitaire de console spécial) un jeton temporaire qui leur donne tous les droits sur leurs espaces de noms.

Un autre point de fonctionnement important est la minimisation des dommages potentiels pouvant provenir de différentes sources. Voici ce que Reddit fait pour cela:



Pour faciliter la vie des ingénieurs impliqués dans l'opération, les éléments suivants sont également impliqués:

  • Front d'onde - pour les mesures;
  • PagerDuty - pour les alertes;
  • Zipkin - pour le traçage;
  • Sentry - pour le suivi des exceptions et des erreurs;
  • système de journalisation centralisé.

Statut de Kubernetes dans Reddit


Les statistiques générales sur l'infrastructure de Kubernetes au mois de décembre de l'année dernière étaient les suivantes:

  • 7 clusters (de 3 à 6 nouveaux devaient être ajoutés dans les prochains mois);
  • d'un tiers à la moitié de toutes les équipes d'ingénierie interagissent avec Kubernetes;
  • environ 20 services Reddit sont en production avec des K8;
  • un jour ouvrable, 10 à 20 déploiements de ces services vers les K8 ont lieu.

La disponibilité d'InfreRedd avec Kubernetes pour l'ensemble de l'organisation était prévue pour le premier trimestre 2019, ce qui impliquait le déploiement de tout nouveau service en production desservi par Kubernetes. (À cette époque, cela se produisait pour environ 3 des 4 nouveaux services.)

Comme mentionné au début de l'article, cette étape a été franchie avec succès la semaine dernière:



Autres articles du cycle


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


All Articles