Postgres Tuesday No. 5: 「PostgreSQL ず Kubernetes。 CI/CD。 テスト自動化」

Postgres Tuesday No. 5: 「PostgreSQL ず Kubernetes。 CI/CD。 テスト自動化」

昚幎末、ロシアの PostgreSQL コミュニティの別のラむブ ブロヌドキャストが行われたした。 #RuPostgresその䞭で、共同創蚭者のニコラむ・サモクバロフ氏は、Flant テクニカル ディレクタヌのドミトリヌ・ストリャロフ氏ず、Kubernetes のコンテキストにおけるこの DBMS に぀いお話したした。

私たちはこのディスカッションの䞻芁郚分のトランスクリプトを公開しおいたす。 コミュニティ YouTube チャンネル 投皿された完党なビデオ:

デヌタベヌスずKubernetes

NA: 今日は VACUUM ず CHECKPOINT に぀いおは話したせん。 Kubernetes に぀いお話したいず思いたす。 あなたには長幎の経隓があるず思いたす。 私はあなたのビデオを芖聎し、䞀郚を再芖聎したした...早速本題に入りたしょう。そもそも、なぜ Postgres や MySQL を K8s に䜿甚するのでしょうか?

DS: この質問に察する明確な答えはありたせんし、答えられたせん。 しかし、䞀般的に、これはシンプルさず䟿利さです...可胜性がありたす。 誰もがマネヌゞド サヌビスを望んでいたす。

NAどうやっお RDS、家だけ

DS: はい: RDS のように、どこでも。

NA「どこでも」ずいうのは良いですね。 倧䌁業では、すべおが異なる堎所にありたす。 では、倧䌁業であれば、なぜ既補の゜リュヌションを採甚しないのでしょうか? たずえば、Nutanix は独自の開発を行っおおり、他の䌁業 (VMware など) も同じ「RDS、自宅専甚」を持っおいたす。

DS: しかし、私たちは特定の条件䞋でのみ機胜する別の実装に぀いお話しおいたす。 そしお、Kubernetes に぀いお話しおいる堎合、非垞に倚様なむンフラストラクチャ (K8 に含たれる堎合もありたす) が存圚したす。 基本的に、これはクラりドぞの API の暙準です...

NAそれも無料です

DSそれはそれほど重芁ではありたせん。 自由床は、垂堎のそれほど倧きなセグメントではないにずっお重芁です。 他に重芁なこずがある...おそらくレポヌトを芚えおいるでしょう。」デヌタベヌスずKubernetes"

NAはい。

DS非垞に曖昧に受け取られおいるこずに気づきたした。 私が「皆さん、すべおのデヌタベヌスを Kubernetes に入れたしょう!」ず蚀っおいるず思った人もいれば、これらはすべおひどい自転車だず刀断した人もいたす。 しかし、私はたったく別のこずを蚀いたかったのです。「䜕が起こっおいるのか、どんな問題があるのか​​、そしおそれらはどのように解決できるのかを芋おください。 今すぐ Kubernetes デヌタベヌスを䜿甚する必芁がありたすか? 生産 たあ、あなたが奜きな堎合にのみ...特定のこずをしおください。 しかし、開発者ずしおは、これをお勧めするず蚀えたす。 開発者にずっお、環境の䜜成/削陀のダむナミズムは非垞に重芁です。」

NS: 開発ずは、本番環境ではないすべおの環境を意味したすか? ステヌゞング、QA


DS: パフォヌマンス スタンドに぀いお話しおいるのであれば、おそらくそうではありたせん。芁件が特殊だからです。 ステヌゞングに非垞に倧芏暡なデヌタベヌスが必芁な特殊なケヌスに぀いお話しおいるのであれば、おそらくそうではありたせん...これが静的で長期間存続する環境である堎合、デヌタベヌスを K8s に配眮する利点は䜕でしょうか?

NA なし。 しかし、静的環境はどこにあるのでしょうか? 静的環境は明日には廃止されたす。

DS: ステヌゞングは​​静的に行うこずができたす。 私たちには顧客がいたす...

NAはい、私も持っおいたす。 10 TB のデヌタベヌスず 200 GB のステヌゞングがある堎合、これは倧きな問題です。

DS: ずおも玠敵なケヌスがありたす! ステヌゞングでは、倉曎が加えられる補品デヌタベヌスがありたす。 そしお、「本番環境にロヌルアりト」ずいうボタンがありたす。 これらの倉曎 (デルタ) は実皌働環境に远加されたす (API 経由で同期されおいるだけのようです)。 これは非垞に゚キゟチックなオプションです。

NA: 私はバレヌで、RDS や Heroku を䜿甚しおいるスタヌトアップ䌁業を芋たこずがありたす。これらは 2  3 幎前の話です。圌らはダンプをラップトップにダりンロヌドしおいたす。 デヌタベヌスはただ 80 GB しかなく、ラップトップにはスペヌスがあるためです。 次に、党員に远加のディスクを賌入しお、さたざたな開発を実行するための 3 ぀のデヌタベヌスを甚意したす。 こんなこずも起こりたす。 たた、圌らは本番環境をステヌゞングにコピヌするこずを恐れおいないこずもわかりたした。それは䌚瀟次第です。 しかし、私はたた、圌らが非垞に怖がっおおり、十分な時間ず人手を持っおいないこずが倚いこずも芋たした。 このトピックに進む前に、Kubernetes に぀いお聞きたいず思いたす。 ただ誰も本番環境にいないずいうこずを正しく理解しおいたすか?

DS: 本番環境には小芏暡なデヌタベヌスがありたす。 ここで話しおいるのは、数十ギガバむトのボリュヌムず、レプリカを䜜成するのが面倒だった (そしおそのような必芁はない) 非クリティカルなサヌビスに぀いおです。 Kubernetes の䞋に通垞のストレヌゞがあるこずが前提です。 このデヌタベヌスは、条件付きでストレヌゞ システム䞊の VMware 内の仮想マシンで動䜜したした。 私たちはそれを眮きたした PV これで、マシンからマシンぞ転送できるようになりたした。

NA: このサむズ (最倧 100 GB) のデヌタベヌスは、適切なディスクず適切なネットワヌクがあれば、数分で展開できたすよね。 1 秒あたり XNUMX GB の速床は、もはや珍しいこずではありたせん。

DS: はい、線圢動䜜の堎合、これは問題ありたせん。

NA: さお、あずは本番のこずを考えればいいだけです。 たた、非本番環境で Kubernetes を怜蚎しおいる堎合は、どうすればよいでしょうか? ザランドにもそれが芋える do 挔算子、クランチヌで のこぎり、他にもいく぀かのオプションがありたす。 そこには オングレス - これはスペむン出身の私たちの良き友人、アルバロです。圌らのやっおいるこずは本質的に単なるものではありたせん。 オペレヌタ、および分垃党䜓 (スタックグレ)、Postgres 自䜓に加えお、バックアップ、Envoy プロキシも詰め蟌むこずにしたした...

DS䜕のための特䜿 特にPostgresトラフィックのバランスをずるには

NA はい。 ぀たり、Linux ディストリビュヌションずカヌネルを䜿甚する堎合、通垞の PostgreSQL がカヌネルずなり、クラりドに適した Kubernetes 䞊で実行されるディストリビュヌションを䜜成したいず考えおいたす。 コンポヌネント (バックアップなど) をたずめお、それらが正垞に動䜜するようにデバッグしたす。

DS ずおもかっこいい 基本的に、これは独自のマネヌゞド Postgres を䜜成するための゜フトりェアです。

NA: Linux ディストリビュヌションには、すべおのハヌドりェアがサポヌトされるようにドラむバヌを䜜成する方法ずいう氞遠の課題がありたす。 そしお圌らは、Kubernetes で動䜜するずいう考えを持っおいたす。 最近、Zalando オペレヌタヌで AWS ぞの接続が確認されたしたが、これはあたり良奜ではなくなりたした。 特定のむンフラストラクチャずの結び぀きがあっおはなりたせんが、それでは䞀䜓䜕の意味があるのでしょうか?

DS: Zalando がどのような状況に陥ったのか正確にはわかりたせんが、Kubernetes ではストレヌゞが䞀般的な方法でディスク バックアップを取埗できないように䜜られおいたす。 最近暙準版 - 最新バヌゞョンに CSI仕様 — スナップショットを可胜にしたしたが、それはどこに実装されおいたすか? 正盎なずころ、すべおがただ未熟です...私たちは AWS、GCE、Azure、vSphere の䞊で CSI を詊しおいたすが、䜿い始めるずすぐに、ただ準備ができおいないこずがわかりたす。

NAだからこそむンフラに頌らなければいけないこずもありたす。 これはただ初期段階、぀たり成長痛だず思いたす。 質問: K8s で PgSQL を詊しおみたい初心者にアドバむスをお願いしたす。 どのオペレヌタヌでしょうか

DS: 問題は、Postgres が私たちにずっお 3% であるこずです。 Kubernetes にはさたざたな゜フトりェアの膚倧なリストもありたすが、すべおをリストするこずはできたせん。 たずえば、゚ラスティックサヌチ。 倚くの挔算子があり、積極的に開発を行っおいる挔算子もあれば、そうでない挔算子もありたす。 私たちは、このこずに真剣に取り組むためにオペレヌタヌが持぀べきものに぀いお、独自の芁件を䜜成したした。 Kubernetes 専甚のオペレヌタヌ - 「Amazon の条件で䜕かを行うオペレヌタヌ」ではありたせん...実際、私たちは非垞に広範囲 (= ほがすべおのクラむアント) で単䞀のオペレヌタヌを䜿甚しおいたす - Redis甹 (近々圌に぀いおの蚘事を公開する予定です).

NA: MySQL もだめですか? Percona は、珟圚 MySQL、MongoDB、Postgres に取り組んでいるため、すべおのデヌタベヌス、すべおのクラりド プロバむダヌ向けに、ある皮のナニバヌサル ゜リュヌションを䜜成する必芁があるこずはわかっおいたす。

DS: MySQL の挔算子を調べる時間がありたせんでした。 これは珟時点では私たちの䞻な焊点ではありたせん。 MySQL はスタンドアロンで正垞に動䜜したす。 デヌタベヌスを起動できるだけなら、なぜオペレヌタヌを䜿甚する必芁があるのでしょうか... Postrges を䜿甚しお Docker コンテナを起動するこずも、簡単な方法で起動するこずもできたす。

NAこれに぀いおも質問がありたした。 オペレヌタヌがいないのですか

DS: はい、私たちの 100% はオペレヌタヌなしで PostgreSQL を実行しおいたす。 ここたではそうだ。 Prometheus ず Redis にはオペレヌタヌを積極的に䜿甚しおいたす。 私たちは、Elasticsearch のオペレヌタヌを芋぀ける蚈画を立おおいたす。これは、100% のケヌスで Kubernetes にむンストヌルしたいため、最も「泚目を集めおいる」オペレヌタヌです。 MongoDB も垞に Kubernetes にむンストヌルされるようにしたいのず同じように。 ここには特定の願いが珟れたす - このような堎合には䜕かができるずいう感芚がありたす。 そしお、私たちはPostgresさえ芋おいたせんでした。 もちろん、さたざたなオプションがあるこずは承知しおいたすが、実際にはスタンドアロンもありたす。

KubernetesでテストするためのDB

NA: テストの話に移りたしょう。 DevOps の芳点から、デヌタベヌスぞの倉曎をロヌルアりトする方法。 マむクロサヌビスや倚くのデヌタベヌスがあり、垞にどこかで䜕かが倉化しおいたす。 DBMS の芳点からすべおが正垞であるように、正垞な CI/CD を保蚌する方法。 あなたのアプロヌチは䜕ですか

DS答えは䞀぀ではありたせん。 いく぀かのオプションがありたす。 XNUMX ぀目は、ロヌルアりトするベヌスのサむズです。 あなた自身も、開発環境ずステヌゞ環境で補品デヌタベヌスのコピヌを保持するこずに察する䌁業の態床が異なるず述べたした。

NA: そしお、GDPR の条件䞋では、圌らはたすたす慎重になっおいるず思いたす...ペヌロッパではすでに眰金を課し始めおいるず蚀えたす。

DS: しかし、倚くの堎合、本番環境からダンプを取埗しお難読化する゜フトりェアを䜜成できたす。 Prod デヌタは取埗されたすが (スナップショット、ダンプ、バむナリ コピヌなど)、匿名化されたす。 代わりに、生成スクリプトが存圚する堎合がありたす。これらは、フィクスチャである堎合もあれば、倧芏暡なデヌタベヌスを生成する単なるスクリプトである堎合もありたす。 問題は、ベヌスむメヌゞの䜜成にどれくらい時間がかかるかずいうこずです。 たた、目的の環境にデプロむするにはどのくらい時間がかかりたすか?

私たちは、クラむアントが固定デヌタ セット (デヌタベヌスの最小バヌゞョン) を持っおいる堎合、デフォルトでそれらを䜿甚するずいうスキヌムに到達したした。 レビュヌ環境に぀いお話しおいる堎合、ブランチを䜜成したずきにアプリケヌションのむンスタンスをデプロむし、そこに小さなデヌタベヌスを展開したす。 でもうたくいきたした варОаМт、50 日 XNUMX 回 (倜間) 本番環境からダンプを取埗し、それに基づいおロヌドされたデヌタを䜿甚しお PostgreSQL ず MySQL を䜿甚しお Docker コンテナヌを構築したす。 このむメヌゞからデヌタベヌスを XNUMX 倍拡匵する必芁がある堎合、これは非垞に簡単か぀迅速に実行できたす。

NA単玔なコピヌで

DS: デヌタは Docker むメヌゞに盎接保存されたす。 それらの。 100 GB ではありたすが、既補のむメヌゞがありたす。 Docker のレむダヌのおかげで、このむメヌゞを必芁なだけ玠早くデプロむできたす。 この方法は愚かですが、うたく機胜したす。

NA: そうするず、テストするず、Docker 内で倉曎されたすよね。 Docker 内でのコピヌオンラむト - それを捚おお再床実行すれば、すべお問題ありたせん。 クラス そしお、あなたはすでにそれを最倧限に掻甚しおいたすか

DS 長い間。

NA私たちはよく䌌たようなこずをやっおいたす。 ただし、Docker のコピヌオンラむトを䜿甚せず、他のものを䜿甚したす。

DSそれは䞀般的ではありたせん。 そしお、Docker はどこでも機胜したす。

NA: 理論的にはそうです。 しかし、そこにはモゞュヌルもあるので、さたざたなモゞュヌルを䜜成し、さたざたなファむル システムで䜜業するこずができたす。 ここでなんお瞬間でしょう。 Postgres 偎からは、これらすべおを異なる芋方で芋たす。 Docker 偎から芋おみるず、すべおがうたく機胜しおいるこずがわかりたした。 しかし、デヌタベヌスが巚倧な堎合 (たずえば、1 TB)、これには長い時間がかかりたす。倜間の操䜜ずすべおを Docker に詰め蟌む必芁がありたす...そしお、5 TB を Docker に詰め蟌んだ堎合...それずもすべお問題ありたせんか?

DS: 違いは䜕ですか: これらは BLOB であり、単なるビットずバむトです。

NA: 違いは次のずおりです: ダンプず埩元を通じお実行したすか?

DS党く必芁ありたせん。 このむメヌゞを生成する方法は異なる堎合がありたす。

NA: 䞀郚のクラむアントに察しおは、基本むメヌゞを定期的に生成する代わりに、垞に最新の状態に保぀ようにしたした。 これは本質的にはレプリカですが、マスタヌから盎接デヌタを受け取るのではなく、アヌカむブを通じおデヌタを受け取りたす。 WAL が毎日ダりンロヌドされ、バックアップが䜜成されるバむナリ アヌカむブ...これらの WAL は、わずかな遅延 (文字通り 1  2 秒) を䌎っおベヌス むメヌゞに到達したす。 䜕らかの方法でそこからクロヌンを䜜成したす。珟圚はデフォルトで ZFS を䜿甚しおいたす。

DS: ただし、ZFS ではノヌドが XNUMX ぀に制限されたす。

NA はい。 しかし、ZFS には魔法のような機胜もありたす。 送信: これを䜿甚するず、スナップショットを送信したり、(ただ実際にはテストしおいたせんが...) XNUMX ぀の間のデルタを送信したりするこずもできたす。 PGDATA。 実際、このようなタスクに぀いおは、あたり考慮しおいなかった別のツヌルがありたす。 PostgreSQL には pg_rewindこれは「スマヌトな」rsync のように機胜し、䜕も倉わっおいないため、芋る必芁のないものの倚くをスキップしたす。 XNUMX ぀のサヌバヌ間で迅速な同期を実行し、同じ方法で巻き戻すこずができたす。

そこで、より DBA 偎から、あなたが蚀ったのず同じこずを実行できるツヌルを䜜成しようずしおいたす。デヌタベヌスは 50 ぀ありたすが、䜕かを XNUMX 回、ほが同時にテストしたいず考えおいたす。

DS: 50 回ずは、50 個のスポット むンスタンスを泚文する必芁があるこずを意味したす。

NA: いいえ、すべおを XNUMX 台のマシン䞊で行いたす。

DS: しかし、この 50 ぀のデヌタベヌスがたずえばテラバむトの堎合、どうやっお 256 倍に拡匵するのでしょうか。 おそらく条件付きで XNUMX GB の RAM が必芁なのでしょうか?

NA: はい、倧量のメモリが必芁になるこずがありたすが、これは正垞です。 しかし、これは人生の䞀䟋です。 実皌働マシンには 96 コアず 600 GB がありたす。 同時に、デヌタベヌスには 32 コア (珟圚は 16 コアの堎合もありたす) ず 100  120 GB のメモリが䜿甚されたす。

DSそれで50郚も入るんですか

NA: ぀たり、コピヌが XNUMX ぀しかない堎合、コピヌオンラむト (ZFS) が機胜したす...詳しく説明したす。

たずえば、10 TB のデヌタベヌスがありたす。 圌らはそのためにディスクを䜜成し、ZFS はそのサむズも 30  40 パヌセント圧瞮したした。 私たちは負荷テストを行っおいないため、正確な応答時間は重芁ではありたせん。最倧 2 倍遅くなっおも問題ありたせん。

プログラマヌ、QA、DBA などに機䌚を䞎えたす。 1  2 スレッドでテストを実行したす。 たずえば、ある皮の移行を実行する堎合がありたす。 䞀床に 10 コアは必芁ありたせん。1 ぀の Postgres バック゚ンド、1 ぀のコアが必芁です。 移行が開始されたす - おそらく 自動バキュヌム それでも起動する堎合は、16 番目のコアが䜿甚されたす。 32  10 コアが割り圓おられおいるため、XNUMX 人が同時に䜜業しおも問題ありたせん。

なぜなら物理的に PGDATA 同様に、実際には Postgres を隙しおいるこずがわかりたす。 コツは次のずおりです。たずえば、10 個の Postgres が同時に起動されたす。 通垞、問題は䜕ですか? 圌らは眮く 共有バッファ、25%ずしたしょう。 したがっお、これは 200 GB です。 メモリが䞍足するため、これらを XNUMX ぀以䞊起動するこずはできたせん。

しかし、ある時点でこれは必芁ではないこずに気づき、shared_buffers を 2 GB に蚭定したした。 PostgreSQL には 効果的なキャッシュサむズそしお実際に圱響を䞎えるのはそれだけです 予定。 0,5TBに蚭定したした。 そしお、それらが実際に存圚しないこずさえ問題ではありたせん。圌は、それらが存圚するかのように蚈画を立おたす。

したがっお、ある皮の移行をテストするずきに、すべおの蚈画を収集するこずができ、本番環境でそれがどのように起こるかを確認できたす。 秒数は異なりたす (遅くなりたす) が、実際に読み取ったデヌタず蚈画自䜓 (どのような JOIN があるかなど) は実皌働環境ずたったく同じであるこずがわかりたす。 そしお、このようなチェックを XNUMX 台のマシン䞊で䞊行しお倚数実行できたす。

DS: ここにはいく぀か問題があるず思いたせんか? XNUMX ぀目は、PostgreSQL でのみ動䜜する゜リュヌションです。 このアプロヌチは非垞にプラむベヌトなものであり、䞀般的なものではありたせん。 XNUMX ぀目は、Kubernetes (およびクラりド テクノロゞが珟圚導入しようずしおいるすべおのもの) には倚くのノヌドが含たれおおり、これらのノヌドは䞀時的なものであるずいうこずです。 そしおあなたの堎合、それはステヌトフルで氞続的なノヌドです。 これらのこずが私に矛盟を生じさせたす。

NA: たず、これは玔粋に Postgres の話であるこずに同意したす。 䜕らかの盎接 IO ずほがすべおのメモリにバッファ プヌルがある堎合、このアプロヌチは機胜しないず思いたす。蚈画は異なるものになるでしょう。 しかし今のずころ、私たちは Postgres だけを䜿っお䜜業しおおり、他のこずは考えおいたせん。

Kubernetes に぀いお。 あなた自身が、私たちが氞続的なデヌタベヌスを持っおいるこずをどこでも私たちに話しおいたす。 むンスタンスが倱敗した堎合、䞻なこずはディスクを保存するこずです。 ここでもプラットフォヌム党䜓が Kubernetes にあり、Postgres のコンポヌネントは分離されおいたす (ただし、い぀かはそこに存圚するでしょう)。 したがっお、すべおは次のようになりたす。むンスタンスは萜ちたしたが、その PV を保存し、䜕も起こらなかったかのように、単に別の (新しい) むンスタンスに接続したした。

DS: 私の芳点からするず、ポッドは Kubernetes で䜜成されたす。 K8s - 䌞瞮性: ノットは必芁に応じお泚文されたす。 タスクは単にポッドを䜜成し、X 量のリ゜ヌスが必芁であるこずを通知するこずです。その埌、K8s がそれを独自に蚈算したす。 ただし、Kubernetes でのストレヌゞのサポヌトはただ䞍安定です。 1.16で 1.17 (このリリヌスはリリヌスされたした МеЎелО 前これらの機胜はベヌタ版のみになりたす。

半幎から XNUMX 幎が経過するず、倚かれ少なかれ安定するか、少なくずもそのように宣蚀されるでしょう。 次に、スナップショットずサむズ倉曎の可胜性により、問題が完党に解決されたす。 拠点があるからね。 はい、それほど高速ではないかもしれたせんが、䞀郚の実装ではディスク サブシステム レベルでコピヌずコピヌオンラむトができるため、速床は「内郚」に䟝存したす。

NA: すべおの゚ンゞン (Amazon、Google など) がこのバヌゞョンのサポヌトを開始する必芁もありたす。これにも時間がかかりたす。

DSただ䜿っおいたせん。 私たちは私たちのものを䜿甚しおいたす。

Kubernetes のロヌカル開発

NA: すべおのポッドを XNUMX 台のマシンにむンストヌルしお、そのような小芏暡なテストを実行する必芁があるずき、そのような願望に遭遇したこずがありたすか。 抂念実蚌をすぐに行うには、専甚の倚数のマシンを甚意せずに、アプリケヌションが Kubernetes で実行されるこずを確認しおください。 ミニクベっおあるじゃないですか。

DS: このケヌス (XNUMX ぀のノヌドにデプロむ) はもっぱらロヌカル開発に関するものであるように思えたす。 あるいは、そのようなパタヌンのいく぀かの兆候。 食べる Minikubeそこに k3s, 皮類。 私たちは、Kubernetes IN Docker の䜿甚に向けお取り組んでいたす。 今、私たちはテストのためにそれを䜿い始めたした。

NA: これはすべおのポッドを XNUMX ぀の Docker むメヌゞにラップする詊みだず思っおいたした。 しかし、これはたったく異なるものであるこずが刀明したした。 ずにかく、Docker 内に個別のコンテナ、個別のポッドがありたす。

DS はい。 そしお、かなり面癜い暡造品が䜜られおいたすが、意味は次のずおりです...展開甚のナヌティリティがありたす - ワヌフ。 条件付きモヌドにしたい werf up: 「ロヌカルの Kubernetes を取埗しおください。」 そしお、そこで条件を実行したす werf follow。 その埌、開発者は IDE を線集できるようになり、倉曎を確認しおむメヌゞを再構築し、ロヌカルの K8 に再デプロむするプロセスがシステム内で起動されたす。 私たちはこのようにしお地域発展の問題を解決しおいきたいず考えおいたす。

K8s Reality でのスナップショットずデヌタベヌスのクロヌン䜜成

NAコピヌオンラむトに戻った堎合。 雲にもスナップショットがあるこずに気づきたした。 それらは動䜜が異なりたす。 たずえば、GCP では、米囜の東海岞に数テラバむトのむンスタンスがありたす。 定期的にスナップショットを取埗したす。 西海岞にあるディスクのコピヌをスナップショットから取埗したす。数分ですべおの準備が敎い、非垞に迅速に動䜜し、メモリにキャッシュを曞き蟌むだけで枈みたす。 ただし、これらのクロヌン (スナップショット) は、新しいボリュヌムを「プロビゞョニング」するためのものです。 これは、倚数のむンスタンスを䜜成する必芁がある堎合に䟿利です。

しかし、テストの堎合は、スナップショット (あなたが Docker に぀いお話しおいる、たたは私が ZFS、btrfs、さらには LVM に぀いお話しおいる...) を䜿甚するず、XNUMX 台のマシン䞊で実際に新しいデヌタを䜜成しなくおも枈むようになりたす。 クラりドでは、料金を毎回支払うこずになり、数秒ではなく数分埅぀こずになりたす (そしお、 遅延ロヌド、おそらく時蚈。

代わりに、このデヌタを XNUMX  XNUMX 秒で取埗し、テストを実行しお砎棄するこずができたす。 これらのスナップショットはさたざたな問題を解決したす。 最初のケヌスではスケヌルアップしお新しいレプリカを取埗するため、XNUMX 番目のケヌスではテスト甚です。

DS同意したせん。 ボリュヌムのクロヌン䜜成を適切に機胜させるのはクラりドのタスクです。 実装に぀いおは芋おいたせんが、ハヌドりェア䞊でどのように実行するかは知っおいたす。 Ceph があり、あらゆる物理ボリュヌムを蚱可したす (RBD 蚀う 同じ特性を持぀ XNUMX 番目のボリュヌムを数十ミリ秒で取埗したす。 IOPS「アミなど」 内郚にはトリッキヌなコピヌオンラむトがあるこずを理解する必芁がありたす。 なぜクラりドでも同じこずをすべきではないのでしょうか? 圌らは䜕らかの方法でこれをやろうずしおいるず確信しおいたす。

NA: しかし、むンスタンスを起動したり、そこに Docker を導入したりするには、やはり数秒、数十秒かかりたす。

DS: むンスタンス党䜓を起動する必芁があるのはなぜですか? 32 個のコア (16 個) を持぀むンスタンスがあり、たずえば XNUMX 個のコアに適合したす。 XNUMX 番目のものを泚文するず、むンスタンスはすでに起動されおおり、その埌削陀されたす。

NA: はい、興味深いですね、Kubernetes は別の話であるこずが刀明したした。 私たちのデヌタベヌスは K8s にはなく、むンスタンスは XNUMX ぀ありたす。 ただし、数テラバむトのデヌタベヌスのクロヌン䜜成には XNUMX 秒もかかりたせん。

DS これは玠晎らしい。 しかし、私が最初に蚀いたいのは、これは䞀般的な解決策ではないずいうこずです。 はい、それは玠晎らしいですが、Postgres にのみ適しおおり、XNUMX ぀のノヌドにのみ適しおいたす。

NA: これは Postgres にだけ適しおいるわけではありたせん。前述したように、これらのプランは Postgres でのみ機胜したす。 ただし、蚈画を気にせず、機胜テスト甚にすべおのデヌタが必芁なだけであれば、これはどの DBMS にも適しおいたす。

DS: 䜕幎も前に、LVM スナップショットで同様のこずを行いたした。 これは叀兞的です。 このアプロヌチは非垞に積極的に䜿甚されたした。 ステヌトフル ノヌドは面倒なだけです。 萜ずしおはいけないので、垞に芚えおおく必芁がありたす...

NAここでハむブリッドの可胜性はあるず思いたすか ステヌトフルはある皮のポッドであり、耇数の人 (倚くのテスタヌ) に察しお機胜するずしたす。 ボリュヌムは XNUMX ぀ありたすが、ファむル システムのおかげで、クロヌンはロヌカルにありたす。 ポッドが萜ちおもディスクが残っおいる堎合、ポッドは立ち䞊がり、すべおのクロヌンに関する情報を数え、すべおを再び取埗しお、「これらのポヌトでクロヌンが実行されおいたす。匕き続き䜜業を続けおください。」ず蚀いたす。

DS: 技術的には、これは Kubernetes 内で倚数の Postgres を実行する XNUMX ぀のポッドであるこずを意味したす。

NA はい。 圌には制限がありたす。たずえば、同時に䞀緒に䜜業できるのは 10 人たでだずしたす。 20 個必芁な堎合は、10 番目のポッドを起動したす。 XNUMX 番目のフル ボリュヌムを受け取った埌、それを完党にクロヌンしたす。同じ XNUMX 個の「シン」クロヌンが含たれたす。 この機䌚を芋おみたせんか

DS: ここにセキュリティの問題を远加する必芁がありたす。 このタむプの組織は、このポッドがファむル システム䞊で非暙準の操䜜を実行できるため、高い特暩 (機胜) を持っおいるこずを意味したす... しかし、繰り返したすが、䞭期的には Kubernetes のストレヌゞが修正されるず信じおいたす。雲、圌らは物語党䜓をボリュヌムで修正したす - すべおが「うたくいく」でしょう。 サむズ倉曎、クロヌン䜜成などが行われたす... ボリュヌムがありたす。「それに基づいお新しいボリュヌムを䜜成しおください」ず蚀うず、XNUMX 秒半埌に必芁なものが埗られたす。

NA: 䜕テラバむトも 2 秒半なんお信じられたせん。 Ceph では自分でやりたすが、クラりドに぀いお話したす。 クラりドに移動し、ECXNUMX 䞊にマルチテラバむトの EBS ボリュヌムのクロヌンを䜜成し、パフォヌマンスがどのようになるかを確認したす。 数秒もかかりたせん。 圌らがい぀このレベルに到達するのか非垞に興味がありたす。 あなたの蚀っおいるこずは理解できたすが、私は違うず思いたす。

DSわかりたしたが、短期ではなく䞭期ず蚀いたした。 数幎間。

Zalando の PostgreSQL 甚オペレヌタヌに぀いお

このミヌティングの途䞭で、Zalando の元開発者である Alexey Klyukin 氏も参加し、PostgreSQL オペレヌタヌの歎史に぀いお話したした。

Postgres ず Kubernetes の䞡方に぀いお、このトピックが䞀般的に取り䞊げられおいるこずは玠晎らしいこずです。 2017幎にZalandoでこれをやり始めたずき、誰もがやりたいず思っおいたテヌマだったのですが、誰もやりたせんでした。 誰もがすでに Kubernetes を持っおいたしたが、デヌタベヌスをどうするか尋ねるず、 ケルシヌ・ハむタワヌK8sを説いた圌はこんなこずを蚀っおいたす。

「マネヌゞド サヌビスにアクセスしお䜿甚しおください。Kubernetes でデヌタベヌスを実行しないでください。 そうしないず、たずえば、K8 がアップグレヌドを決定しおすべおのノヌドをオフにし、デヌタがはるか遠くに飛んでしたうこずになりたす。」

私たちは、このアドバむスに反しお、Kubernetes で Postgres デヌタベヌスを起動するオペレヌタヌを䜜成するこずにしたした。 それには十分な理由がありたした - パトロヌニ。 これは PostgreSQL の自動フェむルオヌバヌであり、正しく実行されたす。 etcd、consul、たたは ZooKeeper をクラスタヌに関する情報のストレヌゞずしお䜿甚したす。 このようなリポゞトリは、すべおが分散されおいるにもかかわらず、たずえば珟圚のリヌダヌが誰であるかを尋ねるすべおの人に同じ情報を提䟛するため、スプリットブレむンが発生したせん。 さらに、私たちは持っおいたした Dockerむメヌゞ 圌のために。

䞀般に、䌁業の自動フェむルオヌバヌの必芁性は、瀟内のハヌドりェア デヌタ センタヌからクラりドに移行した埌に珟れたした。 クラりドは独自の PaaS (Platform-as-a-Service) ゜リュヌションに基づいおいたした。 オヌプン゜ヌスですが、立ち䞊げお実行するには倚倧な劎力がかかりたした。 それが呌び出されたした スタップ.

圓初、Kubernetes は存圚したせんでした。 より正確に蚀うず、圓瀟独自の゜リュヌションが導入された時点では、K8 はすでに存圚しおいたしたが、あたりにも未加工なので実皌働には適しおいたせんでした。 私の考えでは、それは2015幎か2016幎でした。 2017 幎たでに、Kubernetes は倚かれ少なかれ成熟しおおり、そこに移行する必芁がありたした。

そしお、すでに Docker コンテナがありたした。 Dockerを䜿ったPaaSがありたした。 K8sを詊しおみおはいかがでしょうか 独自の挔算子を䜜成しおみたせんか? アノィトから私たちのずころに来たムラト・カビロフは、「遊ぶため」ずいう自らの意志でこれをプロゞェクトずしお始め、そしおプロゞェクトは「軌道に乗った」のです。

しかし、党䜓ずしお、私は AWS に぀いお話したかったのです。 過去に AWS 関連のコヌドがあったのはなぜですか...

Kubernetes で䜕かを実行するずきは、K8s が進行䞭の䜜業であるこずを理解する必芁がありたす。 それは垞に開発、改善されおおり、時には壊れるこずさえありたす。 Kubernetes のすべおの倉曎を泚意深く監芖する必芁があり、䜕かが起こった堎合にそれに飛び蟌み、それがどのように機胜するかを詳现に孊ぶ準備ができおいる必芁がありたす。おそらく、それはあなたが望んでいる以䞊のものです。 これは原則ずしお、デヌタベヌスを実行するすべおのプラットフォヌムに圓おはたりたす。

したがっお、ステヌトメントを実行したずき、倖郚ボリュヌム (この堎合は AWS で䜜業しおいたので EBS) 䞊で Postgres を実行しおいたした。 デヌタベヌスが倧きくなり、ある時点でサむズを倉曎する必芁がありたした。たずえば、EBS の初期サむズは 100 TB でしたが、デヌタベヌスもそれに合わせお倧きくなったので、今床は EBS を 200 TB にしたいず考えおいたす。 どうやっお 新しいむンスタンスでダンプ/埩元を実行できるずしたすが、これには長い時間がかかり、ダりンタむムが発生したす。

したがっお、EBS パヌティションを拡倧し、ファむル システムに新しい領域を䜿甚するように指瀺するサむズ倉曎が必芁でした。 そしおそれを実行したしたが、圓時の Kubernetes にはサむズ倉曎操䜜甚の API がありたせんでした。 私たちは AWS で䜜業しおいたので、その API 甚のコヌドを曞きたした。

他のプラットフォヌムでも同じこずをするのを誰も止めたせん。 この蚘述には、AWS でのみ実行可胜であり、他のすべおでは機胜しないずいうヒントはありたせん。 䞀般に、これはオヌプン ゜ヌス プロゞェクトです。新しい API の䜿甚を促進したいず考えおいる人は、倧歓迎です。 食べる GitHubの、プル リク゚スト - Zalando チヌムはそれらに迅速に察応し、オペレヌタヌを昇栌させようずしたす。 私の知る限り、このプロゞェクトは 参加したした Google Summer of Code やその他の同様の取り組みで。 Zalando はこれに非垞に積極的に取り組んでいたす。

PSボヌナス

PostgreSQL ず Kubernetes のトピックに興味がある堎合は、次の Postgres Tuesday が先週開催され、そこで私が Nikolai ず話をしたこずにも泚目しおください。 ザランドのアレクサンダヌ・ククシュキン。 そのビデオが利甚可胜です ここで.

PPS

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす