
à la fin de l'année derniÚre, un autre direct de la communauté PostgreSQL russe a eu lieu , au cours duquel son cofondateur, Nikolai Samokhvalov, a discuté avec le directeur technique de « Flanta », Dmitri Stolyarov, de cette SGBD dans le contexte de Kubernetes.
Nous publions le compte rendu de la partie principale de cette discussion, et sur la vidéo complÚte a été publiée :

Bases de données et Kubernetes
NS: Nous ne parlerons pas aujourd'hui de VACUUM et des CHECKPOINTS. Nous voulons discuter de Kubernetes. Je sais que tu as dĂ©jĂ beaucoup d'expĂ©rience. J'ai regardĂ© tes vidĂ©os et mĂȘme revisitĂ© certains extraits... Allons droit au but : pourquoi utiliser Postgres ou MySQL dans K8s ?
DS: Il n'y a pas de réponse unique à cette question, et il n'y en aura jamais. Mais en gros, il s'agit de simplicité et de commodité... potentielles. Tout le monde souhaite des services gérés.
NS: Pour avoir , uniquement chez soi ?
DS: Oui : pour avoir RDS, mais oĂč que ce soit.
NS: « OĂč que ce soit » â c'est un bon point. Dans les grandes entreprises, tout est situĂ© Ă diffĂ©rents endroits. Et pourquoi, si c'est une grande entreprise, ne pas prendre une solution prĂȘte Ă l'emploi ? Par exemple, Nutanix a ses propres dĂ©veloppements, d'autres entreprises (VMwareâŠ) proposent le mĂȘme « RDS, mais chez soi ».
DS: Mais cela concerne une mise en Ćuvre spĂ©cifique, qui ne fonctionnera que dans certaines conditions. Et quand il s'agit de Kubernetes, il y a une Ă©norme diversitĂ© d'infrastructures (qui peuvent ĂȘtre dans K8s). En essence, c'est une norme pour l'API du cloud...
NS: Et c'est mĂȘme gratuit !
DS: Ce n'est pas si important. La gratuité est importante pour un segment de marché qui n'est pas si grand. Ce qui est essentiel, c'est autre chose... Tu te souviens probablement de la présentation «»?
NS: Oui.
DS: J'ai compris que cela a été perçu de maniÚre trÚs ambiguë. Une partie des gens a pensé que je disais : « Les gars, allons mettre toutes les bases de données dans Kubernetes ! », tandis que d'autres ont décidé que ce n'était que des bicyclettes terribles. Mais ce que je voulais réellement dire, c'est : « Regardez ce qui se passe, quels problÚmes existent et comment les résoudre. Est-ce qu'il faut aller vers les bases dans Kubernetes ? En production ? Eh bien, seulement si vous aimez... vous engager dans certaines choses. Mais pour le développement, je peux dire que je recommande. Pour le développement, la dynamique de création/suppression des environnements est trÚs importante ».
NS : Par dĂ©veloppement, tu entends tous les environnements qui ne sont pas prod ? Staging, QAâŠ
DS: Si l'on parle des perf-stands, il n'y en a probablement plus, car les exigences sont spĂ©cifiques. Si l'on parle de cas particuliers oĂč une trĂšs grande base de donnĂ©es est nĂ©cessaire en staging, c'est aussi probablement non⊠Si c'est un environnement statique, de longue durĂ©e, quel est l'avantage d'avoir la base dans K8s ?
NS: Aucun. Mais oĂč voyons-nous des environnements statiques ? L'environnement statique est dĂ©jĂ obsolĂšte.
DS: Le staging peut ĂȘtre statique. Nous avons des clientsâŠ
NS: Oui, j'en ai aussi. C'est un gros problĂšme si vous avez une base de 10 To et que le staging n'est que de 200 GoâŠ
DS: J'ai un cas trĂšs intĂ©ressant ! Dans le staging se trouve la base de production, Ă laquelle on apporte des modifications. Et il y a un bouton : « dĂ©ployer en production ». Ces modifications â les deltas â sont ajoutĂ©es (il semble qu'elles soient simplement synchronisĂ©es via l'API) Ă la production. C'est une option trĂšs exotique.
NS: J'ai vu des startups dans la vallĂ©e qui utilisent RDS ou mĂȘme encore Heroku â c'est des histoires de 2-3 ans â et elles tĂ©lĂ©chargent des dumps sur leur portable. Parce que la base n'est que de 80 Go, et qu'il y a de la place sur le portable. Ensuite, elles achĂštent des disques Ă chacun pour avoir 3 bases afin de mener diffĂ©rents dĂ©veloppements. Ăa arrive aussi. J'ai aussi vu qu'elles n'hĂ©sitent pas Ă copier la prod en staging â cela dĂ©pend beaucoup de la sociĂ©tĂ©. Mais j'ai aussi vu qu'elles ont trĂšs peur, et qu'il y a souvent un manque de temps et de ressources. Mais avant de passer Ă ce sujet, j'aimerais entendre parler de Kubernetes. Ai-je bien compris qu'il n'y en a pour l'instant nulle part en prod ?
DS: Nous avons de petites bases en prod. Il s'agit de volumes de dizaines de gigaoctets et de services non critiques, pour lesquels il Ă©tait fastidieux de crĂ©er des rĂ©pliques (et il n'y a pas vraiment de besoin). Et Ă condition qu'il y ait un bon stockage sous Kubernetes. Cette base fonctionnait sur une machine virtuelle â supposons sous VMware, au-dessus de SAN. Nous l'avons placĂ©e dans et maintenant nous pouvons la transfĂ©rer d'une machine Ă l'autre.
NS: Des bases de cette taille, jusqu'Ă 100 Go, sur de bons disques et avec un bon rĂ©seau, peuvent ĂȘtre installĂ©es en quelques minutes, n'est-ce pas ? Une vitesse de 1 Go par seconde, ce n'est plus une exotique.
DS: Oui, pour une opération linéaire, ce n'est pas un problÚme.
NS: D'accord, pour la prod, nous devons seulement rĂ©flĂ©chir. Et si nous envisageons Kubernetes pour des environnements non-prod â comment faire ? Je vois que chez Zalando , chez Crunchy , il y a encore d'autres options. Et il y a â c'est notre bon ami Alvaro d'Espagne : ils font en fait pas seulement , mais une distribution entiĂšre (), dans lequel en plus de Postgres lui-mĂȘme, un backup a Ă©galement Ă©tĂ© intĂ©grĂ©, le proxy EnvoyâŠ
DS: à quoi sert Envoy ? Pour l'équilibrage de la charge du trafic Postgres ?
NS: Oui. Donc, ils le voient comme : si l'on prend une distribution Linux et le noyau, alors PostgreSQL classique est le noyau, et ils veulent créer une distribution qui sera conviviale pour le cloud et fonctionnera sur Kubernetes. Ils assemblent des composants (backups, etc.) et les peaufinent pour qu'ils fonctionnent bien.
DS: C'est vraiment génial ! En gros, c'est un logiciel pour créer son propre Postgres géré.
NS: Les distributions Linux ont toujours des problÚmes : comment faire des pilotes pour que tout le matériel soit supporté. Leur idée est qu'ils vont fonctionner sur Kubernetes. Je sais que dans l'opérateur Zalando, nous avons récemment vu une connexion à AWS, et ce n'est pas trÚs bien. Il ne devrait pas y avoir de lien avec une infrastructure spécifique - quel est alors le sens ?
DS: Je ne sais pas dans quelle situation Zalando est liĂ©, mais dans Kubernetes, le stockage est fait de telle maniĂšre qu'il n'est pas possible de faire un backup de disque de maniĂšre gĂ©nĂ©rique. RĂ©cemment, dans la norme - dans la derniĂšre version â la possibilitĂ© de snapshots a Ă©tĂ© ajoutĂ©e, mais oĂč est-elle implĂ©mentĂ©e ? HonnĂȘtement, c'est encore tellement embryonnaire⊠Nous essayons CSI sur AWS, GCE, Azure, vSphere, mais dĂšs que l'on commence Ă l'utiliser, on voit que ce n'est pas encore prĂȘt.
NS: C'est pourquoi il faut parfois s'appuyer sur l'infrastructure. Je pense que cela reste une phase prĂ©coce - des problĂšmes de croissance. Question : quels conseils donnerais-tu aux dĂ©butants qui veulent essayer PgSQL dans K8s ? Quel opĂ©rateur peut-ĂȘtre ?
DS: Le problĂšme, c'est que Postgres reprĂ©sente pour nous 3%. Nous avons aussi une trĂšs grande liste de diffĂ©rents logiciels dans Kubernetes, je ne vais mĂȘme pas tout Ă©numĂ©rer. Par exemple, Elasticsearch. Il y a une multitude d'opĂ©rateurs : certains se dĂ©veloppent activement, d'autres non. Nous avons Ă©tabli nos exigences sur ce qui doit ĂȘtre dans un opĂ©rateur pour que nous le prenions au sĂ©rieux. Dans l'opĂ©rateur uniquement pour Kubernetes - pas dans « un opĂ©rateur pour faire quelque chose dans des conditions spĂ©cifiques Ă Amazon »⊠En rĂ©alitĂ©, nous utilisons assez massivement (= presque tous nos clients) un seul opĂ©rateur - (nous publierons bientĂŽt un article Ă ce sujet).
NS: Et pour MySQL, il n'y en a pas non plus ? Je sais que Percona⊠étant donné qu'ils s'occupent désormais aussi de MySQL, MongoDB et Postgres, ils devront en créer un universel : pour toutes les bases, pour tous les fournisseurs cloud.
DS: Nous n'avons pas eu le temps de nous pencher sur les opérateurs pour MySQL. Ce n'est pas notre priorité actuelle. MySQL fonctionne bien en mode autonome. Pourquoi un opérateur, si tu peux simplement lancer la base de données⊠Tu peux lancer un conteneur Docker avec Postgres, ou le lancer simplement.
NS: C'était aussi une question. En fait, sans opérateur ?
DS: Oui, Ă 100% nous avons PostgreSQL fonctionnant sans opĂ©rateur. Pour l'instant, c'est comme ça. Nous utilisons activement un opĂ©rateur pour Prometheus et pour Redis. Nous prĂ©voyons de trouver un opĂ©rateur pour Elasticsearch â c'est le plus urgent, car nous souhaitons l'installer dans 100% des cas sous Kubernetes. De mĂȘme, nous voulons arriver Ă installer MongoDB aussi systĂ©matiquement sous Kubernetes. Il y a certaines attentes â on a l'impression qu'il y a des choses Ă rĂ©aliser dans ces cas. Quant Ă Postgres, nous ne nous sommes mĂȘme pas penchĂ©s dessus. Bien sĂ»r, nous savons qu'il existe diffĂ©rentes options, mais en fait, nous fonctionnons en autonome.
Base de données pour les tests dans Kubernetes
NS: Passons au sujet des tests. Comment dĂ©ployer les modifications dans la base â du point de vue DevOps. Il y a des microservices, beaucoup de bases, et il y a tout le temps des changements. Comment assurer un CI/CD normal, pour que du point de vue SGBD tout soit en ordre. Quelle est ton approche ?
DS: Il ne peut pas y avoir une seule rĂ©ponse. Il y a plusieurs paramĂštres. Le premier â c'est la taille de la base que nous souhaitons dĂ©ployer. Tu as toi-mĂȘme mentionnĂ© que les entreprises ont des attitudes diffĂ©rentes vis-Ă -vis de la nĂ©cessitĂ© d'avoir une copie de la base de prod sur dev et stage.
NS: Et dans le cadre du RGPD, je pense qu'ils y font de plus en plus attention⊠Je peux dire qu'en Europe, ils ont déjà commencé à infliger des amendes.
DS: Mais souvent, on peut Ă©crire un logiciel qui effectue un dump Ă partir de la production et qui l'obfusque. On obtient des donnĂ©es de prod (snapshot, dump, copie binaireâŠ), mais elles sont anonymisĂ©es. Il peut aussi y avoir des scripts de gĂ©nĂ©ration : cela peut ĂȘtre des fixtures ou simplement un script qui gĂ©nĂšre une grande base. Le problĂšme, c'est combien de temps il faut pour crĂ©er l'image de base ? Et combien de temps faut-il pour la dĂ©ployer dans l'environnement souhaitĂ© ?
Nous sommes arrivĂ©s Ă un schĂ©ma : si le client a un ensemble de donnĂ©es de fixtures (version minimale de la base), nous les utilisons par dĂ©faut. Si nous parlons d'environnements de revue, lorsqu'on a créé une branche, un exemplaire de l'application a Ă©tĂ© dĂ©ployĂ© â nous y dĂ©ployons une petite base. Mais cela a bien fonctionnĂ© et , lorsque nous effectuons une sauvegarde du production une fois par jour (la nuit) et que nous construisons un conteneur Docker avec PostgreSQL et MySQL en utilisant ces donnĂ©es chargĂ©es. Si nous devons dĂ©ployer cette base 50 fois Ă partir de cette image, cela se fait simplement et rapidement.
NS: Par simple copie ?
DS: Les donnĂ©es sont directement stockĂ©es dans l'image Docker. C'est-Ă -dire que nous avons une image prĂȘte, disons de 100 Go. GrĂące aux couches dans Docker, nous pouvons dĂ©ployer cette image le nombre de fois nĂ©cessaire, rapidement. C'est une mĂ©thode basique, mais qui fonctionne bien.
NS: Ensuite, quand vous testez, cela change directement dans Docker, n'est-ce pas ? Copy-on-write Ă l'intĂ©rieur de Docker â nous le supprimons et recommençons, tout est parfait. GĂ©nial ! Et vous l'utilisez dĂ©jĂ pleinement ?
DS: Depuis longtemps.
NS: Nous faisons des choses trĂšs similaires. Sauf que nous n'utilisons pas le copy-on-write de Docker, mais quelque chose d'autre.
DS: Ce n'est pas générique. Mais celui de Docker fonctionne partout.
NS: En théorie, oui. Mais nous avons aussi des modules là -bas, nous pouvons créer différents modules et travailler avec différents systÚmes de fichiers. Voici le point. Nous regardons tout cela du cÎté de Postgres. Maintenant, j'ai regardé du cÎté Docker et j'ai vu que tout fonctionne pour vous. Mais si la base est énorme, par exemple 1 To, alors cela devient long : que ce soit les opérations de nuit ou pour intégrer tout ça dans Docker... Et si c'est 5 To à intégrer dans Docker⊠Ou tout va bien ?
DS: Quelle est la différence ? Ce ne sont que des blobs, juste des bits et des octets.
NS: La différence est : vous le faites via dump et restore ?
DS: Ce n'est pas du tout nĂ©cessaire. Les mĂ©thodes de gĂ©nĂ©ration de cette image peuvent ĂȘtre variĂ©es.
NS: Pour certains clients, nous avons fait en sorte qu'au lieu de gĂ©nĂ©rer rĂ©guliĂšrement l'image de base, nous la maintenons constamment Ă jour. Elle est en fait une rĂ©plique, mais les donnĂ©es ne proviennent pas directement du maĂźtre, mais par le biais d'un archive. Une archive binaire, oĂč les WAL sont appliquĂ©s chaque jour, des sauvegardes sont Ă©galement prises⊠Ces WAL arrivent ensuite â avec un lĂ©ger retard (Ă peine 1-2 secondes) â Ă l'image de base. Nous clonons Ă partir de lĂ de n'importe quelle maniĂšre â en ce moment, nous utilisons par dĂ©faut ZFS.
DS: Mais avec ZFS, vous ĂȘtes limitĂ© Ă un seul nĆud.
NS: Oui. Mais ZFS a aussi un aspect magique : avec lequel vous pouvez envoyer un snapshot et mĂȘme (je ne l'ai pas encore beaucoup testĂ©, maisâŠ) vous pouvez envoyer la delta entre deux PGDATA. En rĂ©alitĂ©, nous avons aussi un autre outil que nous n'avons pas vraiment envisagĂ© pour ces tĂąches. Postgres a , fonctionnant comme un rsync « intelligent », Ă©vitant beaucoup de ce qui peut ne pas ĂȘtre examinĂ©, car il n'y a certainement rien qui a changĂ©. Nous pouvons rĂ©aliser une synchronisation rapide entre deux serveurs et revenir en arriĂšre de la mĂȘme maniĂšre.
Ainsi, nous essayons de créer un outil de cette maniÚre, plus cÎté DBA, qui permet de faire ce dont tu parlais : nous avons une base, mais nous voulons tester quelque chose 50 fois, presque simultanément.
DS: 50 fois signifie que vous devez commander 50 instances Spot.
NS: Non, tout se fait sur une seule machine.
DS: Mais comment allez-vous déployer 50 fois, si cette base unique, disons, fait un téraoctet. Elle a probablement besoin de, disons, 256 Go de RAM ?
NS: Oui, parfois il faut beaucoup de mĂ©moire â c'est normal. Mais un exemple de la vie rĂ©elle. Sur la machine de production, il y a 96 cĆurs et 600 Go. Alors que pour la base de donnĂ©es, 32 cĆurs sont utilisĂ©s (voire parfois 16 cĆurs maintenant) et 100-120 Go de mĂ©moire.
DS: Et vous y mettez 50 copies ?
NS: Donc, la copie est unique, ensuite fonctionne le copy-on-write (ZFS)... Je vais expliquer plus en détail.
Par exemple, nous avons une base de 10 To. Nous avons créé un disque pour elle, ZFS a dĂ©jĂ compressĂ© sa taille de 30-40 %. Puisque nous ne faisons pas de tests de charge, le temps de rĂ©ponse exact n'est pas important pour nous : il peut ĂȘtre jusqu'Ă 2 fois plus lent â c'est acceptable.
Nous permettons aux dĂ©veloppeurs, aux QA, aux DBA, etc., de faire des tests en 1-2 flux. Par exemple, ils peuvent lancer une migration. Cela ne nĂ©cessite pas immĂ©diatement 10 cĆurs â il lui faut 1 backend PostgreSQL, 1 cĆur. La migration va dĂ©marrer â peut-ĂȘtre que va dĂ©marrer aussi, alors le deuxiĂšme cĆur sera utilisĂ©. Nous avons allouĂ© 16-32 cĆurs, donc 10 personnes peuvent travailler en mĂȘme temps, il n'y a pas de problĂšme.
Puisque physiquement PGDATA identique, il se trouve que nous trompons finalement PostgreSQL. L'idĂ©e est la suivante : par exemple, 10 PostgreSQL dĂ©marrent en mĂȘme temps. Quel est gĂ©nĂ©ralement le problĂšme ? Ils sont configurĂ©s , disons, Ă 25 %. En consĂ©quence, cela reprĂ©sente 200 Go. Plus de trois de tels systĂšmes ne peuvent plus ĂȘtre lancĂ©s, car la mĂ©moire va manquer.
Mais Ă un moment donnĂ©, nous avons compris que ce n'Ă©tait pas nĂ©cessaire : nous configurons shared_buffers Ă 2 Go. PostgreSQL a , et en rĂ©alitĂ©, c'est le seul qui influence les . Nous le rĂ©glons Ă 0,5 To. Et il n'est mĂȘme pas important qu'il n'y en ait pas rĂ©ellement : il construit des plans comme s'il y en avait.
Ainsi, lorsque nous testons une migration, nous pouvons collecter tous les plans â nous verrons comment cela se dĂ©roulera en production. Les secondes seront diffĂ©rentes (plus lentes), mais les donnĂ©es que nous lisons rĂ©ellement, ainsi que les plans (les JOIN et autres) restent exactement les mĂȘmes qu'en production. De plus, nous pouvons effectuer de nombreux tests simultanĂ©ment sur une seule machine.
DS: Ne penses-tu pas qu'il y a plusieurs problĂšmes ici ? Le premier â c'est une solution qui ne fonctionne que sur PostgreSQL. Cette approche est trĂšs spĂ©cifique, elle n'est pas gĂ©nĂ©rique. Le deuxiĂšme â Kubernetes (et tout ce vers quoi vont les technologies cloud) implique de nombreux nĆuds, et ces nĆuds sont Ă©phĂ©mĂšres. Dans ton cas, il s'agit d'un nĆud stateful, persistant. Ces aspects me posent des contradictions.
NS: D'abord, je suis d'accord, c'est une histoire purement Postgres. Je pense que si nous avons un I/O direct et un pool de mĂ©moire tampon presque complet, cette approche ne fonctionnera pas â les plans seront diffĂ©rents. Mais pour l'instant, nous travaillons seulement avec Postgres, sans penser aux autres.
Concernant Kubernetes. Tu racontes partout que notre base est persistante. Si une instance plante, l'essentiel est de sauvegarder le disque. Notre plateforme repose également sur Kubernetes, tandis que le composant avec Postgres est séparé (bien qu'il y figure un jour). Donc, c'est comme ça : l'instance est tombée, mais nous avons conservé son PV et l'avons simplement connecté à une autre (nouvelle) instance, comme si rien ne s'était passé.
DS: De mon point de vue, nous crĂ©ons des pods dans Kubernetes. K8s est Ă©lastique : les nĆuds sont commandĂ©s au besoin. L'objectif est simplement de crĂ©er un pod et de dire qu'il a besoin de X ressources, et ensuite K8s gĂšre le reste. Mais la prise en charge du stockage dans Kubernetes reste instable : dans , sur (cette version a Ă©tĂ© publiĂ©e il y a une semaine ) ces fonctionnalitĂ©s sont encore en bĂȘta.
Dans six mois Ă un an, cela deviendra plus ou moins stable, ou du moins ce sera annoncĂ© comme tel. Ă ce moment-lĂ , la possibilitĂ© de snapshots et de redimensionnement rĂ©soudra complĂštement votre problĂšme. Parce que vous avez une base. Oui, elle peut ne pas ĂȘtre trĂšs rapide, mais la vitesse dĂ©pend de ce qui se trouve « sous le capot », car certaines implĂ©mentations savent faire la copie et le copy-on-write au niveau du sous-systĂšme de stockage.
NS: Il faut aussi que tous les moteurs (Amazon, GoogleâŠ) commencent Ă prendre en charge cette version â cela prend aussi un certain temps.
DS: Pour l'instant, nous ne les utilisons pas. Nous utilisons les nĂŽtres.
Développement local sous Kubernetes
NS: As-tu déjà eu ce besoin de déployer tous les pods sur une seule machine pour faire un petit test ? Pour rapidement obtenir une preuve de concept et voir si l'application fonctionne dans Kubernetes sans allouer plein de machines pour cela. Il y a Minikube, non ?
DS: Je pense que ce cas â de dĂ©ployer sur un seul nĆud â concerne exclusivement le dĂ©veloppement local. Ou certaines manifestations d'un tel modĂšle. Il y a , il y a , . Nous allons utiliser Kubernetes IN Docker. Nous avons commencĂ© Ă travailler avec ça pour des tests.
NS: Je pensais auparavant que c'Ă©tait une tentative d'envelopper tous les pods dans une seule image Docker. Mais il s'avĂšre que c'est tout Ă fait autre chose. Il y a toujours des conteneurs sĂ©parĂ©s, des pods sĂ©parĂ©s â juste dans Docker.
DS: Oui. Il y a une imitation assez amusante, mais le sens est tel⊠Nous avons un utilitaire pour le dĂ©ploiement â . Nous voulons y inclure un mode â disons werf up: «DĂ©marre-moi un Kubernetes local». Et ensuite lancer un werf follow. Ainsi, le dĂ©veloppeur pourra coder dans son IDE, tandis qu'un processus s'exĂ©cute dans le systĂšme, qui voit les modifications et reconstruit les images, les redĂ©ploie dans le K8s local. C'est ainsi que nous voulons essayer de rĂ©soudre le problĂšme du dĂ©veloppement local.
Snapshots et clonage de bases de données dans le cadre de K8s
NS: Si l'on revient au copy-on-write. J'ai remarquĂ© que les clouds ont aussi des snapshots. Ils fonctionnent diffĂ©remment. Par exemple, dans GCP : tu as une instance de plusieurs tĂ©raoctets sur la cĂŽte est des Ătats-Unis. Tu fais pĂ©riodiquement des snapshots. Tu redĂ©marres une copie de disque Ă partir du snapshot sur la cĂŽte ouest â en quelques minutes, tout est prĂȘt, ça fonctionne trĂšs rapidement, il te faut juste remplir le cache en mĂ©moire. Mais ces clones (snapshots) servent Ă provisioning un nouveau volume. C'est gĂ©nial quand tu dois crĂ©er beaucoup d'instances.
Mais pour des tests, je pense que les snapshots dont tu parles dans Docker ou ceux dont je parle dans ZFS, btrfs et mĂȘme LVM⊠â ils permettent justement de ne pas rĂ©ellement crĂ©er de nouvelles donnĂ©es sur une seule machine. Dans le cloud, tu devras encore payer pour cela Ă chaque fois et attendre non pas des secondes, mais des minutes (et dans le cas de , peut-ĂȘtre des heures).
Au lieu de cela, tu peux obtenir ces donnĂ©es en une ou deux secondes, faire tourner un test et les jeter. Ces snapshots rĂ©solvent des tĂąches diffĂ©rentes. Dans le premier cas â pour se scaler et obtenir de nouvelles rĂ©pliques, et dans le second â pour des tests.
DS: Je ne suis pas d'accord. RĂ©aliser correctement le clonage des volumes est une tĂąche pour le cloud. Je n'ai pas regardĂ© leur implĂ©mentation, mais je sais comment nous faisons cela sur le matĂ©riel. Nous avons Ceph, on peut dire Ă n'importe quel volume physique () et obtenir en quelques dizaines de millisecondes un second volume avec des caractĂ©ristiques identiques, clone IOPS : Mais ils prendront quand mĂȘme des secondes, des dizaines de secondes, pour dĂ©marrer une instance, faire venir Docker, etc.
NS: Pourquoi est-il nĂ©cessaire de dĂ©marrer une instance complĂšte ? Nous avons une instance avec 32 cĆurs, et une autre avec 16... et elle peut contenir un certain nombre de volumes - par exemple, quatre. Lorsque nous commandons une cinquiĂšme, une instance sera dĂ©jĂ lancĂ©e, puis elle sera supprimĂ©e.
DS: Oui, c'est intéressant, dans Kubernetes cela donne une autre histoire. Notre base de données n'est pas dans K8s, et il y a une instance. Pourtant, le clonage d'une base de données de plusieurs téraoctets prend moins de deux secondes.
NS: C'est gĂ©nial. Mais mon point de dĂ©part est que ce n'est pas une solution gĂ©nĂ©rique. Oui, c'est super, mais cela convient uniquement Ă Postgres et seulement sur un nĆud.
DS: Ce n'est pas seulement pour Postgres : les plans, comme je l'ai décrit, fonctionneront ainsi uniquement en son sein. Mais si nous ne nous préoccupons pas des plans, mais avons simplement besoin de toutes les données pour des tests fonctionnels, alors cela conviendra à n'importe quel SGBD.
NS: Il y a de nombreuses annĂ©es, nous avons fait quelque chose de similaire avec des snapshots LVM. C'est classique. Cette approche a Ă©tĂ© utilisĂ©e trĂšs activement. Les nĆuds Ă©tat-plein sont vraiment un dĂ©fi. Parce qu'il faut les faire fonctionner sans interruption, toujours se souvenir d'eux...
DS: Ne vois-tu pas ici une possibilité de hybridation ? Disons qu'un état-plein est un pod, il fonctionne pour plusieurs utilisateurs (beaucoup de testeurs). Nous avons un seul volume, mais grùce au systÚme de fichiers, les clones sont locaux. Si le pod tombe, le disque reste ; le pod se relÚvera, l'information sur tous les clones sera lue, tout sera remis en place et il dira : « Voici vos clones lancés sur ces ports, travaillez avec eux ».
NS: Techniquement, cela signifie qu'au sein de Kubernetes c'est un pod, à l'intérieur duquel nous lançons plusieurs Postgres.
DS: Oui. Il a une limite : disons que pas plus de 10 personnes peuvent y travailler en mĂȘme temps. Si 20 s'avĂšrent nĂ©cessaires, nous lancerons un second pod identique. Il est tout Ă fait possible de le cloner complĂštement, obtenant un second volume complet, avec les mĂȘmes 10 clones 'minces'. Ne vois-tu pas cette possibilitĂ© ?
NS: Oui. Il a une limite : disons que pas plus de 10 personnes peuvent y travailler en mĂȘme temps. Si 20 s'avĂšrent nĂ©cessaires, nous lancerons un second pod identique. Il est tout Ă fait possible de le cloner complĂštement, obtenant un second volume complet, avec les mĂȘmes 10 clones 'minces'. Ne vois-tu pas cette possibilitĂ© ?
DS: Il faut ajouter ici des questions de sĂ©curitĂ©. Ce type dâorganisation implique que ce pod a de hauts privilĂšges (capabilities), car il peut effectuer des opĂ©rations non standard sur le systĂšme de fichiers... Mais je le rĂ©pĂšte : je pense qu'Ă moyen terme, Kubernetes corrigera le stockage, et dans le cloud, ils rĂ©gleront toute l'histoire avec les volumes â tout fonctionnera « simplement ». Il y aura resize, clonage... Il y a un volume â nous disons : « CrĂ©e un nouveau Ă partir de celui-ci », â et en une seconde et demie, nous obtenons ce qu'il faut.
NS: Je ne crois pas quâune seconde et demie soit rĂ©alisable pour de nombreux tĂ©raoctets. Sur Ceph, tu le fais toi-mĂȘme, mais tu parles des clouds. Va dans le cloud, fais un clone d'un volume EBS de plusieurs tĂ©raoctets sur EC2 et regarde quelle sera la performance. Cela ne prendra pas quelques secondes. Cela mâintĂ©resse beaucoup de savoir quand ils atteindront ce rĂ©sultat. Je comprends de quoi tu parles, mais je me permets de ne pas ĂȘtre d'accord.
DS: D'accord, mais j'ai dit que c'était à moyen terme, pas à court terme. Dans quelques années.
Ă propos de lâopĂ©rateur PostgreSQL de Zalando
Au milieu de cette réunion, Alexey Klyukin, un ancien développeur de Zalando, a également rejoint la discussion et a parlé de l'histoire de l'opérateur PostgreSQL :
C'est gĂ©nial que ce sujet soit abordĂ© : Postgres et Kubernetes. Quand nous avons commencĂ© Ă le dĂ©velopper chez Zalando en 2017, c'Ă©tait un sujet que tout le monde voulait explorer, mais personne ne s'y mettait. Tout le monde avait dĂ©jĂ Kubernetes, mais quand on demandait comment gĂ©rer les bases de donnĂ©es, mĂȘme des gens comme , prĂŽnant Kubernetes, disaient Ă peu prĂšs ceci :
« Allez vers des services gĂ©rĂ©s et utilisez-les, ne lancez pas de BD dans Kubernetes. Sinon, votre K8s dĂ©cidera, par exemple, de faire une mise Ă niveau, Ă©teindra tous les nĆuds et vos donnĂ©es s'Ă©chapperont trĂšs loin. »
Nous avons dĂ©cidĂ© de crĂ©er un opĂ©rateur qui, contrairement Ă ce conseil, lancerait la base de donnĂ©es Postgres dans Kubernetes. Et nous avions de bonnes raisons â . C'est un failover automatique pour PostgreSQL, fait correctement, c'est-Ă -dire utilisant etcd, consul ou ZooKeeper comme stockage d'informations sur le cluster. Un tel stockage, qui fournira Ă tous ceux qui le demandent, par exemple, quelle est actuellement le leader, la mĂȘme information â mĂȘme si nous sommes tout distribuĂ©s â afin d'Ă©viter le split brain. De plus, nous avions un pour cela.
En fait, le besoin de basculement automatique est apparu pour l'entreprise aprÚs la migration d'un centre de données interne vers le cloud. Le cloud était basé sur une solution PaaS (Platform-as-a-Service) développée en interne. C'est une solution Open Source, mais pour la mettre en place, il fallait beaucoup travailler. Elle s'appelait .
Au dĂ©part, il n'y avait pas de Kubernetes. En fait, lorsque la solution a Ă©tĂ© dĂ©ployĂ©e, K8s existait dĂ©jĂ , mais elle Ă©tait tellement immature qu'elle n'Ă©tait pas prĂȘte pour la production. C'Ă©tait, je pense, en 2015 ou 2016. En 2017, Kubernetes Ă©tait devenu relativement mature â il y avait un besoin de migration lĂ -bas.
Et nous avions déjà un conteneur Docker. Il y avait une PaaS qui utilisait Docker. Pourquoi ne pas essayer K8s ? Pourquoi ne pas écrire notre propre opérateur ? Murat Kabilov, qui est venu nous rejoindre depuis Avito, a commencé cela par ses propres initiatives - « juste pour jouer », - et le projet a « décollé ».
Mais en fait, je voulais parler d'AWS. Pourquoi il y avait historiquement du code liĂ© Ă AWSâŠ
Lorsque vous lancez quoi que ce soit dans Kubernetes, il faut comprendre que K8s est un travail en cours. Il Ă©volue constamment, s'amĂ©liore et, parfois, mĂȘme se casse. Il faut suivre de prĂšs tous les changements dans Kubernetes, ĂȘtre prĂȘt Ă plonger dedans et Ă comprendre comment cela fonctionne en dĂ©tail â peut-ĂȘtre plus que vous ne le souhaiteriez. C'est en principe le cas pour toute plateforme sur laquelle vous exĂ©cutez vos bases de donnĂ©esâŠ
Alors, lorsque nous avons créé l'opĂ©rateur, nous avions Postgres qui fonctionnait avec un volume externe (dans ce cas, EBS, puisque nous travaillions dans AWS). La base de donnĂ©es a grandi, et Ă un moment donnĂ©, il a fallu faire un redimensionnement : par exemple, la taille initiale de l'EBS Ă©tait de 100 To, la base a atteint cette taille, maintenant nous voulons faire un EBS de 200 To. Comment ? Supposons que l'on puisse faire un dump/restauration sur une nouvelle instance, mais c'est long et entraĂźne un temps d'arrĂȘt.
C'est pourquoi nous souhaitions un redimensionnement qui augmenterait la partition de l'EBS puis dirait au systÚme de fichiers d'utiliser le nouvel espace. Et nous l'avons fait, mais à l'époque, Kubernetes n'avait aucune API pour l'opération de redimensionnement. Comme nous travaillions sur AWS, nous avons écrit du code pour son API.
Personne n'empĂȘche de faire la mĂȘme chose pour d'autres plateformes. L'opĂ©rateur n'est pas limitĂ© Ă ĂȘtre exĂ©cutĂ© uniquement sur AWS, il fonctionnera ailleurs Ă©galement. En gros, c'est un projet Open Source : si quelqu'un veut accĂ©lĂ©rer l'apparition de l'utilisation d'une nouvelle API â vous ĂȘtes le bienvenu. Il y a , les pull requests â l'Ă©quipe de Zalando s'efforce d'y rĂ©pondre assez rapidement et de promouvoir l'opĂ©rateur. D'aprĂšs ce que je sais, le projet au Google Summer of Code et Ă d'autres initiatives similaires. Zalando travaille trĂšs activement dessus.
P.S. Bonus !
Si vous ĂȘtes intĂ©ressĂ© par le sujet de PostgreSQL et Kubernetes, nous attirons Ă©galement votre attention sur le fait que la semaine derniĂšre a eu lieu le prochain Postgres Tuesday, oĂč Nikolai a Ă©changĂ© avec Alexandre Kukushkin de Zalando. La vidĂ©o est disponible .
P.P.S.
Lisez aussi dans notre blog :
- «»;
- «»;
- «»;
- «».
Source : habr.com
