
à la fin de l'année derniÚre, une autre diffusion en direct de la communauté russe PostgreSQL a eu lieu , au cours de laquelle son co-fondateur Nikolai Samokhvalov s'est entretenu avec le directeur technique de Flant, Dmitry Stolyarov, à propos de ce SGBD dans le contexte de Kubernetes.
Nous publions une transcription de la partie principale de cette discussion, et à Vidéo complÚte postée :

Bases de données et Kubernetes
NA: Nous ne parlerons pas de VACUUM et de CHECKPOINTs aujourd'hui. Nous voulons parler de Kubernetes. Je sais que vous avez de nombreuses annĂ©es d'expĂ©rience. J'ai regardĂ© vos vidĂ©os et mĂȘme revu certaines d'entre elles... Allons droit au but : pourquoi Postgres ou MySQL dans K8 ?
DS: Il nây a pas et ne peut pas y avoir de rĂ©ponse dĂ©finitive Ă cette question. Mais en gĂ©nĂ©ral, c'est la simplicitĂ© et la commoditĂ©... le potentiel. Tout le monde veut des services gĂ©rĂ©s.
NA: Ă comment , seulement Ă la maison ?
DS: Oui : comme RDS, n'importe oĂč.
NA: « N'importe oĂč » est un bon point. Dans les grandes entreprises, tout est situĂ© Ă des endroits diffĂ©rents. Pourquoi alors, sâil sâagit dâune grande entreprise, ne pas adopter une solution toute faite ? Par exemple, Nutanix a ses propres dĂ©veloppements, d'autres sociĂ©tĂ©s (VMware...) ont le mĂȘme « RDS, uniquement chez soi ».
DS: Mais nous parlons d'une implĂ©mentation distincte qui ne fonctionnera que sous certaines conditions. Et si nous parlons de Kubernetes, alors il existe une grande variĂ©tĂ© d'infrastructures (qui peuvent ĂȘtre dans les K8). Il s'agit essentiellement d'une norme pour les API vers le cloud...
NA: C'est aussi gratuit !
DS: Ce n'est pas si important. La gratuité est importante pour un segment pas trÚs important du marché. Autre chose est important... Vous vous souvenez probablement du reportage «"?
NA: Oui
DS: J'ai rĂ©alisĂ© qu'il avait Ă©tĂ© reçu de maniĂšre trĂšs ambiguĂ«. Certains pensaient que je disais : « Les gars, mettons toutes les bases de donnĂ©es dans Kubernetes ! », tandis que dâautres pensaient que ce nâĂ©taient que de terribles vĂ©los. Mais je voulais dire quelque chose de complĂštement diffĂ©rent : « Regardez ce qui se passe, quels sont les problĂšmes et comment ils peuvent ĂȘtre rĂ©solus. Devons-nous utiliser les bases de donnĂ©es Kubernetes maintenant ? Production? Enfin, seulement si tu aimes... faire certaines choses. Mais pour un dĂ©veloppeur, je peux dire que je le recommande. Pour un dĂ©veloppeur, le dynamisme de crĂ©ation/suppression dâenvironnements est trĂšs important.
NS : Par dev, vous entendez tous les environnements qui ne sont pas des prod ? Mise en scĂšne, assurance qualitĂ©âŠ
DS: Si nous parlons de stands de performance, alors probablement pas, car les exigences y sont spĂ©cifiques. Si nous parlons de cas particuliers oĂč une trĂšs grande base de donnĂ©es est nĂ©cessaire pour la prĂ©paration, alors probablement pas... S'il s'agit d'un environnement statique et de longue durĂ©e, quel est l'avantage d'avoir la base de donnĂ©es situĂ©e dans les K8 ?
NA: Aucun. Mais oĂč voyons-nous des environnements statiques ? Un environnement statique deviendra obsolĂšte demain.
DS: La mise en scĂšne peut ĂȘtre statique. Nous avons des clients...
NA: Oui, j'en ai un aussi. C'est un gros problÚme si vous disposez d'une base de données de 10 To et d'un staging de 200 Go...
DS: J'ai un cas trÚs cool ! Lors de la préparation, il existe une base de données de produits dans laquelle les modifications sont apportées. Et il y a un bouton : « déployer en production ». Ces changements - les deltas - sont ajoutés (il semble qu'ils soient simplement synchronisés via l'API) en production. C'est une option trÚs exotique.
NA: J'ai vu des startups dans la Valley qui sont assises dans RDS ou mĂȘme dans Heroku - ce sont des histoires d'il y a 2-3 ans - et elles tĂ©lĂ©chargent le dump sur leur ordinateur portable. Parce que la base de donnĂ©es ne fait encore que 80 Go et qu'il y a de la place sur l'ordinateur portable. Ensuite ils achĂštent des disques supplĂ©mentaires pour tout le monde afin de disposer de 3 bases de donnĂ©es pour rĂ©aliser diffĂ©rents dĂ©veloppements. Câest aussi comme ça que ça se passe. J'ai aussi vu qu'ils n'ont pas peur de copier la production dans la mise en scĂšne - cela dĂ©pend beaucoup de l'entreprise. Mais jâai aussi vu quâils ont trĂšs peur et quâils nâont souvent pas assez de temps ni de mains. Mais avant de passer Ă ce sujet, je veux entendre parler de Kubernetes. Ai-je bien compris que personne n'est encore en prod ?
DS: Nous avons de petites bases de données en prod. Nous parlons de volumes de plusieurs dizaines de gigaoctets et de services non critiques pour lesquels nous étions trop paresseux pour faire des répliques (et ce n'est pas nécessaire). Et à condition qu'il y ait un stockage normal sous Kubernetes. Cette base de données fonctionnait dans une machine virtuelle - conditionnellement dans VMware, au-dessus du systÚme de stockage. Nous l'avons placé dans et maintenant nous pouvons le transférer de machine à machine.
NA: Des bases de donnĂ©es de cette taille, jusqu'Ă 100 Go, peuvent ĂȘtre dĂ©ployĂ©es en quelques minutes sur de bons disques et un bon rĂ©seau, non ? Une vitesse de 1 Go par seconde nâest plus exotique.
DS: Oui, pour un fonctionnement linéaire, ce n'est pas un problÚme.
NA: Okay, il faut juste penser Ă la prod. Et si nous envisageons Kubernetes pour les environnements hors production, que devons-nous faire ? Je vois ça chez Zalando , en Croquant , il existe d'autres options. Et voici - voici notre bon ami Alvaro d'Espagne : ce qu'ils font n'est pas simplement , et toute la distribution (), dans lequel, en plus de Postgres lui-mĂȘme, ils ont Ă©galement dĂ©cidĂ© d'insĂ©rer une sauvegarde, le proxy Envoy...
DS: EnvoyĂ© pour quoi ? Ăquilibrer spĂ©cifiquement le trafic Postgres ?
NA: Oui. Autrement dit, ils le voient comme suit : si vous prenez une distribution et un noyau Linux, alors PostgreSQL standard est le noyau, et ils veulent créer une distribution qui sera compatible avec le cloud et exécutée sur Kubernetes. Ils assemblent des composants (sauvegardes, etc.) et les déboguent pour qu'ils fonctionnent bien.
DS: TrÚs cool! Il s'agit essentiellement d'un logiciel permettant de créer votre propre Postgres géré.
NA: Les distributions Linux ont d'Ă©ternels problĂšmes : comment crĂ©er des pilotes pour que tout le matĂ©riel soit pris en charge. Et ils ont lâidĂ©e quâils travailleront dans Kubernetes. Je sais que chez l'opĂ©rateur Zalando nous avons rĂ©cemment vu une connexion Ă AWS et ce n'est plus trĂšs bon. Il ne devrait pas y avoir de lien avec une infrastructure spĂ©cifique â Ă quoi ça sert alors ?
DS: Je ne sais pas exactement dans quelle situation Zalando s'est retrouvĂ©, mais dans Kubernetes, le stockage est dĂ©sormais fait de telle maniĂšre qu'il est impossible de faire une sauvegarde sur disque en utilisant une mĂ©thode gĂ©nĂ©rique. RĂ©cemment en standard - dans la derniĂšre version â nous avons rendu les instantanĂ©s possibles, mais oĂč sont-ils implĂ©mentĂ©s ? HonnĂȘtement, tout est encore aussi brut... Nous essayons CSI sur AWS, GCE, Azure, vSphere, mais dĂšs que vous commencez Ă l'utiliser, vous voyez qu'il n'est pas encore prĂȘt.
NA: Câest pourquoi nous devons parfois compter sur les infrastructures. Je pense que nous en sommes encore Ă un stade prĂ©coce â des douleurs de croissance. Question : Quels conseils donneriez-vous aux dĂ©butants qui souhaitent essayer PgSQL dans K8 ? Quel opĂ©rateur peut-ĂȘtre ?
DS: Le problĂšme c'est que Postgres c'est 3% pour nous. Nous avons Ă©galement une trĂšs grande liste de logiciels diffĂ©rents dans Kubernetes, je ne vais mĂȘme pas tout lister. Par exemple, Elasticsearch. Il existe de nombreux opĂ©rateurs : certains se dĂ©veloppent activement, d'autres non. Nous avons Ă©tabli des exigences pour nous-mĂȘmes, ce qui devrait ĂȘtre chez l'opĂ©rateur afin que nous le prenions au sĂ©rieux. Dans un opĂ©rateur spĂ©cifiquement pour Kubernetes - pas dans un « opĂ©rateur pour faire quelque chose dans les conditions d'Amazon »... En fait, nous utilisons assez largement (= presque tous les clients) un seul opĂ©rateur - (nous publierons bientĂŽt un article sur lui).
NA: Et pas pour MySQL non plus ? Je sais que Percona... puisqu'ils travaillent désormais sur MySQL, MongoDB et Postgres, ils devront créer une sorte de solution universelle : pour toutes les bases de données, pour tous les fournisseurs de cloud.
DS: Nous n'avons pas eu le temps de regarder les opĂ©rateurs pour MySQL. Ce nâest pas notre objectif principal pour le moment. MySQL fonctionne bien en mode autonome. Pourquoi utiliser un opĂ©rateur si vous pouvez simplement lancer une base de donnĂ©es... Vous pouvez lancer un conteneur Docker avec Postrges, ou vous pouvez le lancer de maniĂšre simple.
NA: Il y avait une question à ce sujet aussi. Pas d'opérateur du tout ?
DS: Oui, 100 % d'entre nous utilisent PostgreSQL sans opĂ©rateur. Si loin. Nous utilisons activement l'opĂ©rateur pour Prometheus et Redis. Nous envisageons de trouver un opĂ©rateur pour Elasticsearch - c'est celui qui est le plus « en feu », car nous voulons l'installer dans Kubernetes dans 100 % des cas. Tout comme nous voulons nous assurer que MongoDB est Ă©galement toujours installĂ© dans Kubernetes. Ici, certains souhaits apparaissent - on a le sentiment que dans ces cas, quelque chose peut ĂȘtre fait. Et nous n'avons mĂȘme pas regardĂ© Postgres. Bien sĂ»r, nous savons quâil existe diffĂ©rentes options, mais en fait nous en avons une autonome.
Base de données pour les tests dans Kubernetes
NA: Passons au sujet des tests. Comment dĂ©ployer les modifications dans la base de donnĂ©es â du point de vue DevOps. Il existe des microservices, de nombreuses bases de donnĂ©es, quelque chose change tout le temps quelque part. Comment garantir un CI/CD normal afin que tout soit en ordre du point de vue du SGBD. Quelle est votre approche ?
DS: Il ne peut y avoir une seule rĂ©ponse. Il existe plusieurs options. Le premier est la taille de la base que nous souhaitons dĂ©ployer. Vous avez vous-mĂȘme mentionnĂ© que les entreprises ont des attitudes diffĂ©rentes Ă l'Ă©gard du fait d'avoir une copie de la base de donnĂ©es de production sur le dĂ©veloppement et sur la scĂšne.
NA: Et dans les conditions du RGPD, je pense qu'ils sont de plus en plus prudents... Je peux dire qu'en Europe, ils ont déjà commencé à imposer des amendes.
DS: Mais souvent, vous pouvez Ă©crire un logiciel qui extrait un dump de la production et le masque. Les donnĂ©es de production sont obtenues (instantanĂ©, dump, copie binaire...), mais elles sont anonymisĂ©es. A la place, il peut y avoir des scripts de gĂ©nĂ©ration : il peut s'agir de luminaires ou simplement d'un script qui gĂ©nĂšre une grande base de donnĂ©es. Le problĂšme est : combien de temps faut-il pour crĂ©er une image de base ? Et combien de temps faut-il pour le dĂ©ployer dans lâenvironnement souhaitĂ© ?
Nous sommes arrivés à un schéma : si le client dispose d'un ensemble de données fixes (version minimale de la base de données), alors nous les utilisons par défaut. Si nous parlons d'environnements de révision, lorsque nous avons créé une branche, nous avons déployé une instance de l'application - nous y déployons une petite base de données. Mais ça s'est bien passé , lorsque nous effectuons un vidage de la production une fois par jour (la nuit) et construisons un conteneur Docker avec PostgreSQL et MySQL avec ces données chargées basées sur celui-ci. Si vous devez agrandir la base de données 50 fois à partir de cette image, cela se fait assez simplement et rapidement.
NA: Par simple copie ?
DS: Les données sont stockées directement dans l'image Docker. Ceux. Nous avons une image toute faite, quoique de 100 Go. Grùce aux couches de Docker, nous pouvons déployer rapidement cette image autant de fois que nécessaire. La méthode est stupide, mais elle fonctionne bien.
NA: Ensuite, lorsque vous testez, cela change directement dans Docker, n'est-ce pas ? Copie sur Ă©criture dans Docker - jetez-le et recommencez, tout va bien. Classe! Et lâutilisez-vous dĂ©jĂ pleinement ?
DS: Pendant longtemps.
NA: Nous faisons des choses trÚs similaires. Seulement, nous n'utilisons pas la copie sur écriture de Docker, mais une autre.
DS: Ce n'est pas générique. Et Docker fonctionne partout.
NA: En théorie, oui. Mais nous y avons aussi des modules, vous pouvez créer différents modules et travailler avec différents systÚmes de fichiers. Quel moment ici. Du cÎté de Postgres, nous regardons tout cela différemment. Maintenant, j'ai regardé du cÎté Docker et j'ai vu que tout fonctionnait pour vous. Mais si la base de données est énorme, par exemple 1 To, alors tout cela prend beaucoup de temps : opérations de nuit et tout mettre dans Docker... Et si 5 To sont mis dans Docker... Ou est-ce que tout va bien ?
DS: Quelle est la différence : ce sont des blobs, juste des bits et des octets.
NA: La différence est la suivante : le faites-vous via le dump et la restauration ?
DS: Pas du tout nĂ©cessaire. Les mĂ©thodes pour gĂ©nĂ©rer cette image peuvent ĂȘtre diffĂ©rentes.
NA: Pour certains clients, nous avons fait en sorte qu'au lieu de gĂ©nĂ©rer rĂ©guliĂšrement une image de base, nous la tenions constamment Ă jour. Il s'agit essentiellement d'une rĂ©plique, mais elle reçoit les donnĂ©es non pas directement du maĂźtre, mais via une archive. Une archive binaire oĂč les WAL sont tĂ©lĂ©chargĂ©s quotidiennement, oĂč des sauvegardes sont effectuĂ©es... Ces WAL atteignent ensuite l'image de base avec un lĂ©ger retard (littĂ©ralement 1 Ă 2 secondes). Nous le clonons de quelque maniĂšre que ce soit - nous avons maintenant ZFS par dĂ©faut.
DS: Mais avec ZFS, vous ĂȘtes limitĂ© Ă un seul nĆud.
NA: Oui. Mais ZFS a aussi un pouvoir magique : avec, vous pouvez envoyer un instantanĂ© et mĂȘme (je n'ai pas encore vraiment testĂ© ça, mais...) vous pouvez envoyer un delta entre deux PGDATA. En fait, nous disposons dâun autre outil que nous nâavons pas vraiment envisagĂ© pour de telles tĂąches. PostgreSQL a , qui fonctionne comme un rsync « intelligent », en sautant une grande partie de ce que vous nâavez pas besoin de regarder, car rien nây a changĂ©. On peut faire une synchronisation rapide entre les deux serveurs et rembobiner de la mĂȘme maniĂšre.
Donc, de ce cĂŽtĂ© plus DBA, nous essayons de crĂ©er un outil qui nous permette de faire la mĂȘme chose que vous avez dit : nous avons une base de donnĂ©es, mais nous voulons tester quelque chose 50 fois, presque simultanĂ©ment.
DS: 50 fois signifie que vous devez commander 50 instances Spot.
NA: Non, nous faisons tout sur une seule machine.
DS: Mais comment allez-vous agrandir 50 fois si cette base de données fait, disons, un téraoctet. TrÚs probablement, elle a besoin de 256 Go de RAM conditionnels ?
NA: Oui, parfois vous avez besoin de beaucoup de mĂ©moire - c'est normal. Mais ceci est un exemple tirĂ© de la vie. La machine de production dispose de 96 cĆurs et de 600 Go. Dans le mĂȘme temps, 32 cĆurs (voire 16 cĆurs maintenant parfois) et 100 Ă 120 Go de mĂ©moire sont utilisĂ©s pour la base de donnĂ©es.
DS: Et 50 exemplaires y rentrent ?
NA: Il n'y a donc qu'une seule copie, alors la copie sur écriture (ZFS) fonctionne... Je vais vous le dire plus en détail.
Par exemple, nous avons une base de données de 10 To. Ils ont créé un disque pour cela, ZFS a également compressé sa taille de 30 à 40 %. Puisque nous ne effectuons pas de tests de charge, le temps de réponse exact n'est pas important pour nous : qu'il soit jusqu'à 2 fois plus lent - ce n'est pas grave.
Nous donnons l'opportunitĂ© aux programmeurs, QA, DBA, etc. effectuer des tests dans 1-2 threads. Par exemple, ils peuvent effectuer une sorte de migration. Il ne nĂ©cessite pas 10 cĆurs Ă la fois â il a besoin de 1 backend Postgres, 1 cĆur. La migration va commencer - peut-ĂȘtre dĂ©marrera toujours, alors le deuxiĂšme noyau sera utilisĂ©. Nous avons 16 Ă 32 cĆurs allouĂ©s, donc 10 personnes peuvent travailler en mĂȘme temps, sans problĂšme.
Parce que physiquement PGDATA de mĂȘme, il s'avĂšre que nous trompons Postgres. L'astuce est la suivante : par exemple, 10 Postgres sont lancĂ©s simultanĂ©ment. Quel est le problĂšme habituellement ? Ils mettent , disons 25%. En consĂ©quence, il s'agit de 200 Go. Vous ne pourrez pas en lancer plus de trois, car la mĂ©moire sera Ă©puisĂ©e.
Mais Ă un moment donnĂ©, nous avons rĂ©alisĂ© que ce n'Ă©tait pas nĂ©cessaire : nous avons dĂ©fini shared_buffers sur 2 Go. PostgreSQL a , et en rĂ©alitĂ© c'est le seul qui influence . Nous l'avons fixĂ© Ă 0,5 To. Et peu importe quâils nâexistent pas rĂ©ellement : il fait des projets comme sâils existaient.
En consĂ©quence, lorsque nous testons une sorte de migration, nous pouvons collecter tous les plans - nous verrons comment cela se passera en production. Les secondes y seront diffĂ©rentes (plus lentes), mais les donnĂ©es que nous lisons rĂ©ellement et les plans eux-mĂȘmes (quels sont les JOIN, etc.) s'avĂšrent exactement les mĂȘmes qu'en production. Et vous pouvez exĂ©cuter plusieurs de ces vĂ©rifications en parallĂšle sur une seule machine.
DS: Ne pensez-vous pas qu'il y a quelques problĂšmes ici ? La premiĂšre est une solution qui ne fonctionne que sur PostgreSQL. Cette approche est trĂšs privĂ©e, elle n'est pas gĂ©nĂ©rique. La seconde est que Kubernetes (et tout ce que vont faire les technologies cloud dĂ©sormais) implique de nombreux nĆuds, et ces nĆuds sont Ă©phĂ©mĂšres. Et dans votre cas, il sâagit dâun nĆud persistant avec Ă©tat. Ces choses me mettent en conflit.
NA: Tout d'abord, je suis d'accord, c'est une histoire purement Postgres. Je pense que si nous avons une sorte d'E/S directe et un pool de tampons pour presque toute la mĂ©moire, cette approche ne fonctionnera pas - les plans seront diffĂ©rents. Mais pour lâinstant nous travaillons uniquement avec Postgres, nous ne pensons pas aux autres.
Ă propos de Kubernetes. Vous nous dites vous-mĂȘme partout que nous avons une base de donnĂ©es persistante. Si l'instance Ă©choue, l'essentiel est de sauvegarder le disque. Ici, nous avons Ă©galement toute la plateforme dans Kubernetes, et le composant avec Postgres est sĂ©parĂ© (mĂȘme s'il sera lĂ un jour). Donc, tout est comme ça : l'instance est tombĂ©e, mais nous avons sauvegardĂ© son PV et l'avons simplement connectĂ© Ă une autre (nouvelle) instance, comme si de rien n'Ă©tait.
DS: De mon point de vue, nous crĂ©ons des pods dans Kubernetes. K8s - Ă©lastique : les nĆuds sont commandĂ©s selon les besoins. La tĂąche consiste simplement Ă crĂ©er un pod et Ă dire qu'il a besoin d'une quantitĂ© X de ressources, puis les K8 le dĂ©couvriront par eux-mĂȘmes. Mais la prise en charge du stockage dans Kubernetes est toujours instable : dans (cette version a Ă©tĂ© publiĂ©e ĐœĐ”ĐŽĐ”Đ»Đž il y a), ces fonctionnalitĂ©s ne deviennent que la version bĂȘta.
Six mois Ă un an s'Ă©couleront - cela deviendra plus ou moins stable, ou du moins il sera dĂ©clarĂ© comme tel. Ensuite, la possibilitĂ© de prendre des instantanĂ©s et de redimensionner rĂ©sout complĂštement votre problĂšme. Parce que tu as une base. Oui, ce n'est peut-ĂȘtre pas trĂšs rapide, mais la vitesse dĂ©pend de ce qui se cache sous le capot, car certaines implĂ©mentations peuvent copier et copier sur Ă©criture au niveau du sous-systĂšme de disque.
NA: Il est également nécessaire que tous les moteurs (Amazon, Google...) commencent à supporter cette version - cela prend également du temps.
DS: Nous ne les utilisons pas encore. Nous utilisons le nĂŽtre.
Développement local pour Kubernetes
NA: Avez-vous rencontré un tel souhait lorsque vous devez installer tous les pods sur une seule machine et faire un si petit test. Pour obtenir rapidement une preuve de concept, vérifiez que l'application s'exécute dans Kubernetes, sans lui consacrer un tas de machines. Il y a Minikube, non ?
DS: Il me semble que ce cas - dĂ©ployĂ© sur un nĆud - concerne exclusivement le dĂ©veloppement local. Ou quelques manifestations dâun tel modĂšle. Manger LĂ , . Nous nous dirigeons vers l'utilisation de Kubernetes IN Docker. Nous avons maintenant commencĂ© Ă travailler avec pour des tests.
NA: Je pensais qu'il s'agissait d'une tentative d'envelopper tous les pods dans une seule image Docker. Mais il sâest avĂ©rĂ© quâil sâagissait de quelque chose de complĂštement diffĂ©rent. Quoi qu'il en soit, il existe des conteneurs sĂ©parĂ©s, des pods sĂ©parĂ©s - uniquement dans Docker.
DS: Oui. Et il y a une imitation assez drÎle, mais le sens est le suivant... Nous avons un utilitaire de déploiement - . Nous voulons en faire un mode conditionnel werf up: « Donnez-moi Kubernetes local. » Et puis exécutez le conditionnel ici werf follow. Ensuite, le développeur pourra éditer l'EDI et un processus sera lancé dans le systÚme qui verra les modifications et reconstruira les images, en les redéployant sur les K8 locaux. C'est ainsi que nous voulons tenter de résoudre le problÚme du développement local.
Instantanés et clonage de bases de données dans la réalité de K8
NA: Si nous revenons Ă la copie sur Ă©criture. J'ai remarquĂ© que les nuages ââââont aussi des instantanĂ©s. Ils fonctionnent diffĂ©remment. Par exemple, dans GCP : vous disposez dâune instance de plusieurs tĂ©raoctets sur la cĂŽte est des Ătats-Unis. Vous prenez des instantanĂ©s pĂ©riodiquement. Vous rĂ©cupĂ©rez une copie du disque sur la cĂŽte ouest Ă partir d'un instantanĂ© - en quelques minutes tout est prĂȘt, cela fonctionne trĂšs rapidement, seul le cache doit ĂȘtre rempli en mĂ©moire. Mais ces clones (instantanĂ©s) sont destinĂ©s à « provisionner » un nouveau volume. C'est cool lorsque vous devez crĂ©er beaucoup d'instances.
Mais pour les tests, il me semble que les instantanĂ©s, dont vous parlez dans Docker ou dont je parle dans ZFS, btrfs et mĂȘme LVM... - ils permettent de ne pas crĂ©er de donnĂ©es vraiment nouvelles sur une seule machine. Dans le cloud, vous les paierez toujours Ă chaque fois et n'attendrez pas des secondes, mais des minutes (et dans le cas , Ă©ventuellement une montre).
Au lieu de cela, vous pouvez obtenir ces données en une seconde ou deux, exécuter le test et les jeter. Ces instantanés résolvent différents problÚmes. Dans le premier cas, pour évoluer et obtenir de nouvelles répliques, et dans le second, pour des tests.
DS: je ne suis pas d'accord. Faire fonctionner correctement le clonage de volumes est la tĂąche du cloud. Je nâai pas examinĂ© leur implĂ©mentation, mais je sais comment nous procĂ©dons sur le matĂ©riel. Nous avons Ceph, il autorise n'importe quel volume physique () dire cloner et obtenir un deuxiĂšme volume avec les mĂȘmes caractĂ©ristiques en quelques dizaines de millisecondes, 'ami, etc. Vous devez comprendre qu'il y a une copie sur Ă©criture dĂ©licate Ă l'intĂ©rieur. Pourquoi le cloud ne devrait-il pas faire de mĂȘme ? Je suis sĂ»r qu'ils essaient de procĂ©der d'une maniĂšre ou d'une autre.
NA: Mais il leur faudra quand mĂȘme des secondes, des dizaines de secondes pour lancer une instance, y amener Docker, etc.
DS: Pourquoi est-il nĂ©cessaire de relancer une instance entiĂšre ? Nous avons une instance avec 32 cĆurs, 16... et elle peut y entrer - par exemple quatre. Lorsque nous en commanderons la cinquiĂšme, l'instance sera dĂ©jĂ levĂ©e, puis elle sera supprimĂ©e.
NA: Oui, intĂ©ressant, Kubernetes s'avĂšre ĂȘtre une autre histoire. Notre base de donnĂ©es n'est pas dans K8 et nous en avons une instance. Mais le clonage d'une base de donnĂ©es de plusieurs tĂ©raoctets ne prend pas plus de deux secondes.
DS: C'est bien. Mais mon premier point est quâil ne sâagit pas dâune solution gĂ©nĂ©rique. Oui, c'est cool, mais cela ne convient qu'Ă Postgres et uniquement sur un seul nĆud.
NA: Il ne convient pas seulement à Postgres : ces plans, comme je l'ai décrit, ne fonctionneront que dans celui-ci. Mais si nous ne nous soucions pas des plans et que nous avons juste besoin de toutes les données pour les tests fonctionnels, alors cela convient à n'importe quel SGBD.
DS: Il y a de nombreuses annĂ©es, nous avons fait quelque chose de similaire sur les instantanĂ©s LVM. C'est un classique. Cette approche a Ă©tĂ© trĂšs activement utilisĂ©e. Les nĆuds avec Ă©tat ne sont qu'un problĂšme. Parce qu'il ne faut pas les laisser tomber, il faut toujours s'en souvenir...
NA: Voyez-vous une possibilitĂ© dâhybride ici ? Disons que stateful est une sorte de pod, il fonctionne pour plusieurs personnes (de nombreux testeurs). Nous avons un seul volume, mais grĂące au systĂšme de fichiers, les clones sont locaux. Si le pod tombe, mais que le disque reste, le pod se lĂšvera, comptera les informations sur tous les clones, reprendra tout et dira : « Voici vos clones fonctionnant sur ces ports, continuez Ă travailler avec eux.
DS: Techniquement, cela signifie qu'au sein de Kubernetes, il s'agit d'un seul pod dans lequel nous exécutons plusieurs Postgres.
NA: Oui. Il a une limite : disons que pas plus de 10 personnes travaillent avec lui en mĂȘme temps. Si vous en avez besoin de 20, nous lancerons un deuxiĂšme module de ce type. Nous le clonerons entiĂšrement, aprĂšs avoir reçu le deuxiĂšme volume complet, il aura les mĂȘmes 10 clones « fins ». Vous ne voyez pas cette opportunitĂ© ?
DS: Nous devons ajouter ici des problÚmes de sécurité. Ce type d'organisation implique que ce pod dispose de privilÚges (capacités) élevés, car il peut effectuer des opérations non standard sur le systÚme de fichiers... Mais je le répÚte : je crois qu'à moyen terme ils répareront le stockage dans Kubernetes, et dans les nuages, ils répareront toute l'histoire avec des volumes - tout "fonctionnera". Il y aura un redimensionnement, un clonage... Il y a un volume - nous disons : « Créez-en un nouveau sur cette base » et aprÚs une seconde et demie, nous obtenons ce dont nous avons besoin.
NA: Je ne crois pas Ă une seconde et demie pour plusieurs tĂ©raoctets. Sur Ceph, vous le faites vous-mĂȘme, mais vous parlez des nuages. AccĂ©dez au cloud, crĂ©ez un clone d'un volume EBS de plusieurs tĂ©raoctets sur EC2 et voyez quelles seront les performances. Cela ne prendra pas quelques secondes. Je suis trĂšs intĂ©ressĂ© de savoir quand ils atteindront ce niveau. Je comprends ce que vous dites, mais je ne suis pas d'accord.
DS: Ok, mais j'ai dit à moyen terme, pas à court terme. Pour plusieurs années.
à propos de l'opérateur pour PostgreSQL de Zalando
Au milieu de cette réunion, Alexey Klyukin, un ancien développeur de Zalando, s'est également joint à nous et a évoqué l'histoire de l'opérateur PostgreSQL :
Câest formidable que ce sujet soit abordĂ© de maniĂšre gĂ©nĂ©rale : Ă la fois Postgres et Kubernetes. Lorsque nous avons commencĂ© Ă le faire chez Zalando en 2017, c'Ă©tait un sujet que tout le monde voulait aborder, mais personne ne le faisait. Tout le monde possĂ©dait dĂ©jĂ Kubernetes, mais lorsqu'ils demandaient quoi faire avec les bases de donnĂ©es, mĂȘme les gens aiment , qui prĂȘchait les K8, a dit quelque chose comme ceci :
« AccĂ©dez aux services gĂ©rĂ©s et utilisez-les, n'exĂ©cutez pas la base de donnĂ©es dans Kubernetes. Sinon, vos K8 dĂ©cideront, par exemple, de faire une mise Ă niveau, dâĂ©teindre tous les nĆuds et vos donnĂ©es sâenvoleront trĂšs, trĂšs loin.
Nous avons dĂ©cidĂ© de crĂ©er un opĂ©rateur qui, contrairement Ă cet avis, lancera une base de donnĂ©es Postgres dans Kubernetes. Et nous avions une bonne raison - . Il s'agit d'un basculement automatique pour PostgreSQL, effectuĂ© correctement, c'est-Ă -dire en utilisant etcd, consul ou ZooKeeper comme stockage d'informations sur le cluster. Un tel rĂ©fĂ©rentiel qui donnera Ă tous ceux qui demandent, par exemple, quel est le leader actuel, les mĂȘmes informations - malgrĂ© le fait que nous ayons tout distribuĂ© - afin qu'il n'y ait pas de cerveau divisĂ©. De plus, nous avions pour lui.
En gĂ©nĂ©ral, le besoin de basculement automatique de lâentreprise est apparu aprĂšs la migration dâun centre de donnĂ©es matĂ©riel interne vers le cloud. Le cloud reposait sur une solution propriĂ©taire PaaS (Platform-as-a-Service). C'est Open Source, mais il a fallu beaucoup de travail pour le rendre opĂ©rationnel. Ăa s'appelait .
Au dĂ©part, Kubernetes nâexistait pas. Plus prĂ©cisĂ©ment, lorsque notre propre solution a Ă©tĂ© dĂ©ployĂ©e, les K8 existaient dĂ©jĂ , mais ils Ă©taient tellement bruts qu'ils n'Ă©taient pas adaptĂ©s Ă la production. C'Ă©tait, Ă mon avis, 2015 ou 2016. En 2017, Kubernetes Ă©tait devenu plus ou moins mature : il fallait y migrer.
Et nous avions déjà un conteneur Docker. Il existait un PaaS qui utilisait Docker. Pourquoi ne pas essayer les K8 ? Pourquoi ne pas écrire votre propre opérateur ? Murat Kabilov, qui nous est venu d'Avito, a lancé ce projet de sa propre initiative - « pour jouer » - et le projet a « décollé ».
Mais en général, je voulais parler d'AWS. Pourquoi y avait-il du code historique lié à AWS...
Lorsque vous exĂ©cutez quelque chose dans Kubernetes, vous devez comprendre que K8 est un travail en cours. Il se dĂ©veloppe, sâamĂ©liore et mĂȘme sâeffondre de temps en temps. Vous devez garder un Ćil attentif sur tous les changements apportĂ©s Ă Kubernetes, vous devez ĂȘtre prĂȘt Ă vous y plonger si quelque chose se produit et Ă apprendre comment cela fonctionne en dĂ©tail - peut-ĂȘtre plus que vous ne le souhaiteriez. Ceci, en principe, s'applique Ă toute plate-forme sur laquelle vous exĂ©cutez vos bases de donnĂ©es...
Ainsi, lorsque nous avons fait la dĂ©claration, Postgres s'exĂ©cutait sur un volume externe (EBS dans ce cas, puisque nous travaillions sur AWS). La base de donnĂ©es s'est agrandie, Ă un moment donnĂ© il a fallu la redimensionner : par exemple, la taille initiale d'EBS Ă©tait de 100 To, la base de donnĂ©es s'est agrandie, maintenant nous voulons faire EBS de 200 To. Comment? Disons que vous pouvez effectuer un vidage/restauration sur une nouvelle instance, mais cela prendra beaucoup de temps et impliquera des temps d'arrĂȘt.
Par conséquent, je voulais un redimensionnement qui agrandirait la partition EBS, puis indiquerait au systÚme de fichiers d'utiliser le nouvel espace. Et nous l'avons fait, mais à cette époque, Kubernetes ne disposait d'aucune API pour l'opération de redimensionnement. Depuis que nous travaillons sur AWS, nous avons écrit du code pour son API.
Personne ne vous empĂȘche de faire de mĂȘme pour dâautres plateformes. Rien n'indique dans la dĂ©claration qu'il ne peut ĂȘtre exĂ©cutĂ© que sur AWS et qu'il ne fonctionnera pas sur tout le reste. En gĂ©nĂ©ral, il s'agit d'un projet Open Source : si quelqu'un souhaite accĂ©lĂ©rer l'Ă©mergence de l'utilisation de la nouvelle API, il est le bienvenu. Manger , pull request - l'Ă©quipe Zalando essaie d'y rĂ©pondre assez rapidement et de promouvoir l'opĂ©rateur. Autant que je sache, le projet au Google Summer of Code et Ă d'autres initiatives similaires. Zalando y travaille trĂšs activement.
PS-Bonus !
Si le sujet de PostgreSQL et Kubernetes vous intĂ©resse, veuillez Ă©galement noter que le prochain Postgres Tuesday a eu lieu la semaine derniĂšre, oĂč j'ai parlĂ© avec Nikolai Alexandre Kukushkin de Zalando. La vidĂ©o de celui-ci est disponible .
PPS
A lire aussi sur notre blog :
- «";
- «";
- «";
- «».
Source: habr.com
