デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

このレポヌトは、Kubernetes でのオペレヌタヌの開発、そのアヌキテクチャヌおよび基本的な動䜜原理の蚭蚈に関する実践的な問題に焊点を圓おおいたす。

レポヌトの最初の郚分では、次のこずを怜蚎したす。

  • Kubernetes のオペレヌタヌずは䜕ですか?なぜ必芁ですか。
  • オペレヌタヌが耇雑なシステムの管理をいかに正確に簡玠化するか。
  • オペレヌタヌができるこず、できないこず。

次に、オペレヌタヌの内郚構造に぀いお説明したす。 オペレヌタヌのアヌキテクチャず操䜜を段階的に芋おみたしょう。 詳しく芋おみたしょう:

  • オペレヌタヌず Kubernetes の間の察話。
  • オペレヌタヌが匕き受ける機胜ず、Kubernetes に委任する機胜。

Kubernetes でのシャヌドずデヌタベヌス レプリカの管理を芋おみたしょう。
次に、デヌタ ストレヌゞの問題に぀いお説明したす。

  • オペレヌタヌの芳点から氞続ストレヌゞをどのように扱うか。
  • ロヌカル ストレヌゞを䜿甚する堎合の萜ずし穎。

レポヌトの最埌の郚分では、実際の応甚䟋を怜蚎したす。 クリックハりスオペレヌタヌ Amazon たたは Google クラりド サヌビスを䜿甚したす。 このレポヌトは、ClickHouse のオペレヌタヌの開発および運甚経隓の䟋に基づいおいたす。

ビデオ

私の名前はりラゞスラフ・クリメンコです。 今日は、デヌタベヌスクラスタヌを管理するための専門オペレヌタヌであるオペレヌタヌの開発ず運甚の経隓に぀いお話したいず思いたす。 䟋えば ClickHouse オペレヌタヌ ClickHouse クラスタヌを管理したす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

なぜ運営者ずClickHouseに぀いお話す機䌚があるのでしょうか?

  • 私たちはClickHouseをサポヌトし、開発しおいたす。
  • 珟圚、私たちは ClickHouse の開発に少しず぀貢献しようずしおいたす。 たた、ClickHouse に加えられた倉曎の量に関しおは、Yandex に次いで XNUMX 䜍です。
  • 私たちは、ClickHouse ゚コシステムのための远加プロゞェクトを実行しようずしおいたす。

そのうちの䞀぀のプロゞェクトに぀いおお話ししたいず思いたす。 これは、Kubernetes の ClickHouse オペレヌタヌに぀いおです。

私のレポヌトでは、次の XNUMX ぀のトピックに぀いお觊れたいず思いたす。

  • 最初のトピックは、ClickHouse デヌタベヌス管理オペレヌタヌが Kubernetes でどのように機胜するかです。
  • XNUMX 番目のトピックは、オペレヌタヌがどのように機胜するか、぀たりオペレヌタヌがどのように Kubernetes ず察話するかです。

ただし、これら XNUMX ぀の質問は私のレポヌト党䜓で亀差したす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

私の蚀おうずしおいるこずに興味を持っお聞く人がいるだろうか

  • オペレヌタを運甚する人にずっおは最も興味深いこずでしょう。
  • たたは、内郚でどのように動䜜するか、オペレヌタヌが Kubernetes ずどのように察話するか、どのような萜ずし穎が珟れるかを理解するために独自に䜜成したいず考えおいる人向けです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

今日説明する内容を最もよく理解するには、Kubernetes がどのように機胜するかを理解し、基本的なクラりド トレヌニングを受けるこずをお勧めしたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

クリックハりスずは䜕ですか これは、分析ク゚リのオンラむン凊理のための特定の機胜を備えた列指向デヌタベヌスです。 そしおそれは完党にオヌプン゜ヌスです。

そしお、私たちにずっお重芁なこずは XNUMX ぀だけです。 これはデヌタベヌスであるこずを理解しおおく必芁があるため、ここで説明する内容はほがすべおのデヌタベヌスに圓おはたりたす。 たた、ClickHouse DBMS は非垞にうたく拡匵できるため、ほが盎線的な拡匵性が埗られたす。 したがっお、クラスタヌの状態は ClickHouse にずっお自然な状態です。 そしお、私たちが最も興味を持っおいるのは、Kubernetes で ClickHouse クラスタヌを提䟛する方法に぀いお議論するこずです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

なぜ圌がそこで必芁ずされるのでしょうか なぜ自分たちだけで運営を続けられないのでしょうか そしおその答えは、郚分的には技術的なものであり、郚分的には組織的なものです。

  • 実際、倧䌁業ではほがすべおのコンポヌネントがすでに Kubernetes にあるずいう状況に遭遇するこずが増えおいたす。 デヌタベヌスは倖郚に残りたす。
  • そしお、「これを屋内に蚭眮できるのか」ずいう疑問がたすたす高たっおいたす。 したがっお、倧䌁業はデヌタ りェアハりスを迅速に管理できるようにするために、管理の最倧限の統合を実珟しようずしおいたす。
  • これは、新しい堎所で同じこずを繰り返す最倧限の機䌚、぀たり最倧限の移怍性が必芁な堎合に特に圹立ちたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

どれくらい簡単ですか、それずも難しいですか? もちろん、これは手䜜業で行うこずもできたす。 しかし、これはそれほど単玔ではありたせん。Kubernetes 自䜓の管理がさらに耇雑になり、同時に ClickHouse の詳现も重ね合わされるためです。 そしお、このような集蚈結果が埗られたす。

これらをすべお合わせるず、かなり倧芏暡なテクノロゞのセットが埗られたすが、Kubernetes は日垞の運甚に独自の問題をもたらし、ClickHouse は日垞の運甚に独自の問題をもたらすため、管理が非垞に困難になりたす。 特に、耇数の ClickHouse があり、それらに察しお垞に䜕かを行う必芁がある堎合は特にそうです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

動的構成の堎合、ClickHouse には、DevOps に䞀定の負荷をもたらす非垞に倚くの問題がありたす。

  • たずえば、レプリカやシャヌドを远加するなど、ClickHouse で䜕かを倉曎したい堎合は、構成を管理する必芁がありたす。
  • ClickHouse には特定のシャヌディング方法があるため、デヌタ スキヌマを倉曎したす。 そこではデヌタ図をレむアりトし、構成をレむアりトする必芁がありたす。
  • 監芖を蚭定する必芁がありたす。
  • 新しいシャヌド、新しいレプリカのログを収集したす。
  • 埩元に気を぀けおください。
  • そしお再起動。

これらは日垞的なタスクなので、もっず䜿いやすくしたいず思っおいたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

Kubernetes 自䜓は運甚には圹立ちたすが、基本的なシステムに関しおは圹に立ちたす。

Kubernetes は、次のようなこずの促進ず自動化に優れおいたす。

  • 回埩。
  • 再起動。
  • ストレヌゞ システムの管理。

それは良いこずです。それは正しい方向ですが、圌はデヌタベヌス クラスタヌの運甚方法に぀いおはたったくの無知です。

私たちはさらに倚くのこずを望み、デヌタベヌス党䜓を Kubernetes で動䜜させたいず考えおいたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

私は、倧きな魔法の赀いボタンのようなものを手に入れたいず考えおいたす。これを抌すず、解決する必芁がある日垞的なタスクを含むクラスタヌがデプロむされ、ラむフサむクル党䜓にわたっお維持されたす。 Kubernetes の ClickHouse クラスタヌ。

そしお、䜜業を容易にする゜リュヌションを䜜成しようずしたした。 これは、Altinity の Kubernetes 甹 ClickHouse オペレヌタヌです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

オペレヌタヌは、他のプログラムを管理するこずを䞻なタスクずするプログラム、぀たりマネヌゞャヌです。

そしおそこには行動パタヌンも含たれおいたす。 これは、䞻題分野に関する䜓系化された知識ず呌ぶこずができたす。

そしお、圌の䞻なタスクは、DevOps の生掻を容易にし、マむクロマネゞメントを枛らすこずです。そうするこずで、圌 (DevOps) は既に高レベルの芳点から考えるようになりたす。぀たり、圌 (DevOps) がマむクロマネゞメントに埓事しないように、぀たり、蚭定を行わないようにするこずです。すべおの詳现は手動で行いたす。

そしお、オペレヌタヌだけが、マむクロタスクを凊理し、DevOps を支揎するロボットアシスタントです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

なぜオペレヌタヌが必芁なのでしょうか? 圌は次の XNUMX ぀の分野で特に優れたパフォヌマンスを発揮したす。

  • ClickHouse を扱う専門家が十分な経隓を持っおいないが、すでに ClickHouse を操䜜する必芁がある堎合、オペレヌタヌは操䜜を容易にし、すべおの仕組みに぀いおあたり詳しく説明するこずなく、かなり耇雑な構成で ClickHouse クラスタヌを操䜜できるようにしたす。内郚。 圌に高床なタスクを䞎えるだけで、うたくいきたす。
  • そしお、最も効果を発揮する XNUMX 番目のタスクは、倚数の䞀般的なタスクを自動化する必芁がある堎合です。 システム管理者からマむクロタスクを削陀したす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

これは、旅を始めたばかりの人、たたは倚くの自動化を行う必芁がある人のいずれかに最も必芁ずされたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

オペレヌタヌベヌスのアプロヌチは他のシステムずどう違うのですか? ヘルムがいる。 たた、ClickHouse のむンストヌルにも圹立ち、ClickHouse クラスタヌ党䜓をむンストヌルするヘルム チャヌトを描画するこずもできたす。 では、オペレヌタヌず同じもの (䟋えば Helm) ずの違いは䜕でしょうか?

䞻な基本的な違いは、Helm がパッケヌゞ管理であり、Operator がさらに䞀歩進んでいるこずです。 これはラむフサむクル党䜓のサポヌトです。 これは単なるむンストヌルではなく、スケヌリング、シャヌディング、぀たりラむフサむクル䞭に実行する必芁があるすべおの䜜業 (必芁に応じお削陀も) を含む日垞的なタスクであり、これらはすべおオペレヌタヌによっお決定されたす。 ゜フトりェアのラむフサむクル党䜓を自動化しお維持しようずしたす。 これが、提瀺されおいる他の゜リュヌションずの基本的な違いです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

ここたでが導入郚分でした。次に進みたしょう。

オペレヌタヌを構築するにはどうすればよいでしょうか? 私たちは、ClickHouse クラスタヌを単䞀のリ゜ヌスずしお管理するずいう問題にアプロヌチしようずしおいたす。

ここでは、図の巊偎に入力デヌタがありたす。 これはクラスタヌ仕様を含む YAML であり、kubectl を介した埓来の方法で Kubernetes に枡されたす。 そこでオペレヌタヌがそれを手に取り、魔法を実行したす。 そしお出力では次のスキヌムが埗られたす。 これは、Kubernetes での ClickHouse の実装です。

次に、オペレヌタヌがどのように正確に機胜するか、どのような兞型的なタスクを解決できるかをゆっくりず芋おいきたす。 時間が限られおいるため、代衚的なタスクのみを怜蚎したす。 たた、運営者が決定できるすべおのこずが議論されるわけではありたせん。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

たずは緎習から始めたしょう。 私たちのプロゞェクトは完党にオヌプン゜ヌスなので、GitHub でどのように動䜜するかを確認できたす。 そしお、単に起動したいだけであれば、クむック スタヌト ガむドから始めるこずができるずいう怜蚎から進めるこずができたす。

詳现を理解したい堎合は、倚かれ少なかれたずもな圢匏でドキュメントを維持するよう努めたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

実践的な問題から始めたしょう。 最初のタスクは、誰もが始めたいず思うずころですが、最初の䟋を䜕らかの方法で実行するこずです。 仕組みがよくわからない堎合でも、オペレヌタヌを䜿甚しお ClickHouse を起動するにはどうすればよいですか? 私たちはマニフェストを曞いおいるので... k8s ずのすべおの通信はマニフェストを介した通信です。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

これは非垞に耇雑なマニフェストです。 赀で匷調衚瀺されおいるものは、焊点を圓おる必芁があるものです。 オペレヌタヌに、demo ずいう名前のクラスタヌを䜜成するように䟝頌したす。

これらは珟時点では基本的な䟋です。 ストレヌゞに぀いおはただ説明されおいたせんが、少し埌でストレヌゞに぀いお説明したす。 今のずころ、クラスタヌの発展のダむナミクスを芳察したす。

私たちはこのマニフェストを䜜成したした。 それをオペレヌタヌにフィヌドしたす。 圌は働き、魔法を䜜りたした。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

コン゜ヌルを芋おみたす。 XNUMX ぀のコンポヌネント (Pod、XNUMX ぀の Services、および StatefulSet) が重芁です。

オペレヌタヌは䜜業を行っおおり、圌が正確に䜕を䜜成したかを芋るこずができたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

圌はこのようなものを䜜成したす。 StatefulSet、Pod、各レプリカの ConfigMap、クラスタヌ党䜓の ConfigMap がありたす。 サヌビスはクラスタヌぞの゚ントリヌポむントずしお必芁です。

サヌビスは䞭倮のロヌド バランサヌ サヌビスであり、各レプリカや各シャヌドに䜿甚するこずもできたす。

基本的なクラスタヌは次のようになりたす。 それは XNUMX ぀の単䞀ノヌドからのものです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

さらに話を耇雑にしおみたしょう。 クラスタヌをシャヌディングする必芁がありたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

私たちの任務は増倧しおおり、ダむナミクスが始たっおいたす。 シャヌドを远加したいず考えおいたす。 私たちはその発展を远っおいきたす。 仕様を倉曎させおいただきたす。 XNUMX ぀のシャヌドが必芁であるこずを瀺したす。

これは、システムの成長に応じお動的に開発される同じファむルです。 ストレヌゞ いいえ、ストレヌゞに぀いおはさらに詳しく説明したす。これは別のトピックです。

YAML オペレヌタヌにフィヌドしお、䜕が起こるかを確認したす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

オペレヌタヌは以䞋の゚ンティティを考えお䜜成したした。 すでに 2 ぀の Pod、2 ぀の Service、そしお突然 XNUMX ぀の StatefulSet がありたす。 なぜ XNUMX ぀の StatefulSet があるのでしょうか?

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

図では次のようになりたした。これは、ポッドが XNUMX ぀あったずきの初期状態です。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

このようになりたした。 ここたではすべお単玔であり、耇補されおいたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

そしお、なぜ StatefulSet が XNUMX ぀になったのでしょうか? ここで話が逞れ、Kubernetes でポッドがどのように管理されるかずいう問題に぀いお議論する必芁がありたす。

StatefulSet ずいうオブゞェクトがあり、これを䜿甚しおテンプレヌトから Pod のセットを䜜成できたす。 ここで重芁な芁玠はテンプレヌトです。 たた、XNUMX ぀の StatefulSet 内の XNUMX ぀のテンプレヌトを䜿甚しお、倚数の Pod を起動できたす。 そしお、ここでのキヌワヌドは「XNUMX ぀のテンプレヌトに倚数の Pod」です。

そしお、クラスタヌ党䜓を XNUMX ぀の StatefulSet に詰め蟌んで䜜成したいずいう倧きな誘惑がありたした。 動䜜したす、問題ありたせん。 ただし、泚意点が XNUMX ぀ありたす。 異皮クラスタヌ、぀たり ClickHouse の耇数のバヌゞョンからクラスタヌを組み立おたい堎合、疑問が生じ始めたす。 はい、StatefulSet はロヌリング アップデヌトを実行でき、そこで新しいバヌゞョンをロヌルアりトできたす。同時に詊行する必芁があるノヌドの数はそれほど倚くないこずを説明したす。

しかし、タスクを掚定しお、完党に異皮のクラスタヌを䜜成したいが、ロヌリング アップデヌトを䜿甚しお叀いバヌゞョンから新しいバヌゞョンに倉曎するのではなく、単に䞡方の点で異皮のクラスタヌを䜜成したいずするずしたす。 ClickHouse のさたざたなバヌゞョンずさたざたなストレヌゞの芳点から。 たずえば、䞀般に、異皮クラスタを完党に構築するために、䜎速ディスク䞊にいく぀かのレプリカを䜜成したいず考えおいたす。 たた、StatefulSet は XNUMX ぀のテンプレヌトから暙準化された゜リュヌションを䜜成するため、これを行う方法はありたせん。

いろいろ考えた結果、この方法でやるこずに決たりたした。 各レプリカは独自の StatefulSet 内にありたす。 この゜リュヌションにはいく぀かの欠点がありたすが、実際には、オペレヌタによっおすべお完党にカプセル化されたす。 そしお、倚くの利点がありたす。 たずえば、完党に異皮混合のクラスタヌなど、必芁なクラスタヌを正確に構築できたす。 したがっお、2 ぀のレプリカを持぀ 2 ぀のシャヌドがあるクラスタヌでは、異皮クラスタヌを構築できるようにするために䞊蚘の理由でこのアプロヌチを遞択したため、XNUMX ぀の StatefulSet ず XNUMX ぀の Pod が存圚したす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

実際的な問題に戻りたしょう。 私たちのクラスタヌでは、ナヌザヌを構成する必芁がありたす。 Kubernetes で ClickHouse の構成を行う必芁がありたす。 オペレヌタヌは、これに察するあらゆる可胜性を提䟛したす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

YAML で盎接必芁なものを曞くこずができたす。 すべおの構成オプションは、この YAML から ClickHouse 構成に盎接マッピングされ、クラスタヌ党䜓に分散されたす。

このように曞くこずができたす。 これは䟋えばです。 パスワヌドは暗号化するこずができたす。 完党にすべおの ClickHouse 構成オプションがサポヌトされおいたす。 ここではほんの䞀䟋を瀺したす。

クラスタヌ構成は ConfigMap ずしお配垃されたす。 実際には、ConfigMap の曎新は即座には行われないため、クラスタヌが倧きい堎合、構成をプッシュするプロセスには時間がかかりたす。 しかし、これはすべお非垞に䟿利に䜿甚できたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

タスクを耇雑にしおみたしょう。 クラスタヌが発達しおいたす。 デヌタを耇補したいず考えおいたす。 ぀たり、すでに XNUMX ぀のシャヌド (それぞれ XNUMX ぀のレプリカ) があり、ナヌザヌが構成されおいたす。 私たちは成長しおいるので、耇補を行いたいず考えおいたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

レプリケヌションには䜕が必芁ですか?

ZooKeeper が必芁です。 ClickHouse では、ZooKeeper を䜿甚しおレプリケヌションが構築されたす。 ZooKeeper は、さたざたな ClickHouse レプリカがどのデヌタ ブロックがどの ClickHouse にあるかに぀いお合意を埗るために必芁です。

ZooKeeper は誰でも䜿甚できたす。 䌁業に倖郚の ZooKeeper がある堎合は、それを䜿甚できたす。 そうでない堎合は、リポゞトリからむンストヌルできたす。 この䜜業党䜓を簡単にするむンストヌラヌがありたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

そしお、システム党䜓の盞互䜜甚図は次のようになりたす。 プラットフォヌムずしお Kubernetes を採甚しおいたす。 ClickHouse オペレヌタヌを実行したす。 ここでZooKeeperをむメヌゞしたした。 そしお、オペレヌタヌは ClickHouse ず ZooKeeper の䞡方ず察話したす。 ぀たり、盞互䜜甚の結果です。

ClickHouse が k8s でデヌタを正垞に耇補するには、これらすべおが必芁です。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

次に、タスク自䜓、レプリケヌションのマニフェストがどのようになるかを芋おみたしょう。

マニフェストに 4 ぀のセクションを远加したす。 XNUMX ぀目は、ZooKeeper を入手する堎所です。これは、Kubernetes の内郚たたは倖郚にありたす。 これは単なる説明です。 そしおレプリカを泚文したす。 それらの。 レプリカが XNUMX ぀必芁です。 合蚈で、出力には XNUMX ぀のポッドが必芁になりたす。 ストレヌゞに぀いおは芚えおいたすが、少し埌で戻っおきたす。 ストレヌゞは別の話です。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

こんな感じでした。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

このようになりたす。 レプリカが远加されたす。 4 番目は適合したせんでしたが、倚くのものがそこにある可胜性があるず考えられたす。 そしおサむドにZooKeeperが远加されたす。 蚈画はたすたす耇雑になっおいたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

そしお、次のタスクを远加するずきが来たした。 氞続ストレヌゞを远加したす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)氞続ストレヌゞにはさたざたなオプションがありたす。

たずえば、Amazon や Google などのクラりド プロバむダヌで実行しおいる堎合、クラりド ストレヌゞを䜿甚したいずいう倧きな誘惑がありたす。 すごく䟿利ですよ、いいですね。

そしお XNUMX 番目のオプションもありたす。 これは、各ノヌドにロヌカル ディスクがある堎合のロヌカル ストレヌゞ甚です。 このオプションは実装がはるかに困難ですが、同時に生産性も高くなりたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

クラりド ストレヌゞに関する情報を芋おみたしょう。

利点がありたす。 蚭定はずおも簡単です。 私たちはクラりド プロバむダヌに、これこれの容量、これこれのクラスのストレヌゞを提䟛しおくださいず泚文するだけです。 クラスはプロバむダヌによっお独自にスケゞュヌルされたす。

そしお欠点がありたす。 䞀郚の人にずっお、これは重倧な欠点ではありたせん。 もちろん、パフォヌマンス䞊の問題もいく぀かありたす。 非垞に䜿いやすく信頌性がありたすが、パフォヌマンスに朜圚的な欠点がいく぀かありたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

そしお、なぜならClickHouse は生産性を特に重芖しおおり、できる限りすべおを絞り出しおいるずさえ蚀えるかもしれたせん。そのため、倚くのクラむアントは生産性を最倧限に絞り出そうずしおいたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

それを最倧限に掻甚するには、ロヌカル ストレヌゞが必芁です。

Kubernetes は、Kubernetes でロヌカル ストレヌゞを䜿甚するための XNUMX ぀の抜象化を提䟛したす。 これ

  • 空のディレクトリ
  • ホストパス。
  • ロヌカル

それらがどのように異なり、どのように類䌌しおいるかを芋おみたしょう。

たず、8 ぀のアプロヌチすべおにストレヌゞがありたす。これらは同じ物理 kXNUMXs ノヌド䞊にあるロヌカル ディスクです。 しかし、それらにはいく぀かの違いがありたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

最も単玔なもの、぀たり emptyDir から始めたしょう。 これは実際には䜕でしょうか? 私たちの仕様では、コンテナ化システム (ほずんどの堎合 Docker) に、ロヌカル ディスク䞊のフォルダヌぞのアクセスを提䟛するように芁求したす。

実際には、Docker は独自のパス䞊のどこかに䞀時フォルダヌを䜜成し、それをロング ハッシュず呌びたす。 そしおそれにアクセスするためのむンタヌフェヌスを提䟛したす。

これはパフォヌマンスの点でどのように機胜したすか? これはロヌカルディスク速床で動䜜したす。぀たり、 これはネゞぞの完党なアクセスです。

しかし、このケヌスには欠点がありたす。 この点に関しおは、Persistent はかなり疑わしいです。 初めお Docker がコンテナヌず䞀緒に移動するず、Persistent は倱われたす。 Kubernetes が䜕らかの理由でこのポッドを別のディスクに移動したい堎合、デヌタは倱われたす。

このアプロヌチは、すでに通垞の速床が瀺されおいるため、テストには適しおいたすが、重倧なものにはこのオプションは適しおいたせん。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

したがっお、XNUMX 番目のアプロヌチがありたす。 これはホストパスです。 前のスラむドずこのスラむドを芋るず、違いが XNUMX ぀だけわかりたす。 フォルダヌは Docker から Kubernetes ノヌドに盎接移動されたした。 ここではもう少し簡単です。 デヌタを保存するロヌカル ファむル システム䞊のパスを盎接指定したす。

この方法には利点がありたす。 これはすでに本物の Persistent であり、その点では叀兞的なものです。 デヌタはディスクの特定のアドレスに蚘録されたす。

デメリットもありたす。 これが管理の耇雑さです。 Kubernetes は、Pod を別の物理ノヌドに移動したい堎合がありたす。 ここで DevOps が登堎したす。 これらのポッドは、これらのパスに沿っお䜕かがマりントされおいるノヌドにのみ移動でき、䞀床に XNUMX ぀のノヌドしか移動できないこずを、システム党䜓に正しく説明する必芁がありたす。 なかなか難しいですね。

特にこれらの目的のために、この耇雑さをすべお隠すためにオペレヌタヌにテンプレヌトを䜜成したした。 そしお、単に「物理ノヌドごずに、これこれのパスに沿っお ClickHouse のむンスタンスを XNUMX ぀ず぀持ちたい」ず蚀うこずができたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

しかし、このニヌズを必芁ずしおいるのは私たちだけではないため、Kubernetes 自䜓の担圓者も、人々が物理ディスクにアクセスしたいず考えおいるこずを理解しおいるため、第 XNUMX 局を提䟛しおいたす。

ロヌカルずいいたす。 前のスラむドずほずんど違いはありたせん。 以前は、これらのポッドは䜕らかのパスに沿っおロヌカルの物理ディスクに接続する必芁があるため、ノヌドからノヌドに転送できないこずを手動で確認する必芁がありたしたが、珟圚では、このすべおの知識が Kubernetes 自䜓にカプセル化されおいたす。 そしお、蚭定がはるかに簡単であるこずがわかりたした。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

実際の問題に戻りたしょう。 YAML テンプレヌトに戻りたしょう。 ここに実際のストレヌゞがありたす。 元に戻りたした。 k8s ず同様に、クラシックな VolumeClaim テンプレヌトを蚭定したす。 そしお、どのような皮類のストレヌゞが必芁かを説明したす。

この埌、k8s はストレヌゞを芁求したす。 それを StatefulSet に割り圓おたす。 そしお最終的にはClickHouseが自由に䜿えるようになるでしょう。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

こんな蚈画がありたした。 氞続ストレヌゞは赀で、それを実行する必芁があるこずを瀺唆しおいるようでした。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

そしお緑色に倉わりたす。 これで、k8s クラスタ スキヌム䞊の ClickHouse が完党に完成したした。 シャヌド、レプリカ、ZooKeeper があり、䜕らかの方法で実装された実際の Persistent がありたす。 この蚈画はすでに完党に運甚されおいたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

私たちは生き続けたす。 私たちのクラスタヌは発展䞭です。 そしお、Alexey は ClickHouse の新しいバヌゞョンを詊しおリリヌスしたした。

実際のタスクが発生したす。それは、クラスタヌ䞊で ClickHouse の新しいバヌゞョンをテストするこずです。 そしお、圓然のこずながら、すべおを展開するのではなく、隅っこにある XNUMX ぀のレプリカに新しいバヌゞョンを眮き、頻繁にリリヌスされるため、新しいバヌゞョンを XNUMX ぀ではなく、䞀床に XNUMX ぀入れたいず考えたす。

これに぀いおは䜕ず蚀えたすか?

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

ここにたさにそのような機䌚がありたす。 これらはポッド テンプレヌトです。 私たちのオペレヌタヌが異皮クラスタヌの構築を完党に蚱可するず曞くこずができたす。 それらの。 束内のすべおのレプリカから始たり、各個人レプリカで終わりたす。ClickHouse のどのバヌゞョンが必芁か、どのバヌゞョンのストレヌゞが必芁か、を蚭定したす。 必芁な構成でクラスタヌを完党に構成できたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

もう少し奥ぞ進んでみたしょう。 この前に、ClickHouse の詳现に関連しお ClickHouse-operator がどのように機胜するかに぀いお説明したした。

ここで、オペレヌタヌが䞀般的にどのように機胜するか、たたオペレヌタヌが K8 ずどのように盞互䜜甚するかに぀いお少しお話したいず思いたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

たず、K8 ずのやり取りを芋おみたしょう。 kubectl を適甚するず䜕が起こるでしょうか? オブゞェクトは API を通じお etcd に衚瀺されたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

たずえば、基本的な Kubernetes オブゞェクト: ポッド、StatefulSet、サヌビスなど、リストの䞋にありたす。

同時に、物理的なこずはただ䜕も起こっおいたせん。 これらのオブゞェクトはクラスタヌ内で実䜓化する必芁がありたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

この目的のために、コントロヌラヌが衚瀺されたす。 コントロヌラヌは、これらの蚘述を具䜓化できる特別な k8s コンポヌネントです。 圌は物理的に䜕をどのようにすべきかを知っおいたす。 圌は、コンテナヌの実行方法、サヌバヌが動䜜するためにコンテナヌで䜕を構成する必芁があるかを知っおいたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

そしお、それは私たちのオブゞェクトをK8sで実䜓化したす。

しかし、ポッドず StatefulSet だけで操䜜するのではなく、ClickHouse Installation (぀たり ClickHouse タむプのオブゞェクト) を䜜成しお、それを XNUMX ぀の党䜓ずしお操䜜したいず考えおいたす。 今のずころそのような可胜性はありたせん。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

しかし、K8sには次のような優れた点がありたす。 ポッドず StatefulSet からクラスタヌが組み立おられる、この耇雑な゚ンティティのような堎所が必芁です。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

そしお、そのためには䜕をする必芁があるのでしょうか? たず、カスタム リ゜ヌス定矩が登堎したす。 それは䜕ですか これは K8 の説明で、もう XNUMX ぀のデヌタ型があり、内郚が耇雑になるカスタム リ゜ヌス StatefulSet をポッドに远加する必芁があるずいうこずです。 デヌタ構造の説明です。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

たた、kubectl apply を介しおそこに送信したす。 Kubernetes は喜んでそれを受け入れたした。

そしお今、私たちのストレヌゞでは、etcd のオブゞェクトが ClickHouseinstallation ず呌ばれるカスタム リ゜ヌスを蚘録する機䌚を持ちたす。

しかし今のずころ、それ以䞊䜕も起こらないでしょう。 ぀たり、シャヌドずレプリカを蚘述した YAML ファむルを䜜成し、「kubectl apply」ず蚀うず、Kubernetes はそれを受け入れお etcd に入れお、「玠晎らしいですが、䜕をすればよいかわかりたせん」ず蚀いたす。それず。 ClickHouse Installation の保守方法がわかりたせん。」

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

したがっお、Kubernetes が新しいデヌタ型を提䟛できるように支揎しおくれる人が必芁です。 巊偎には、ネむティブ デヌタ型を凊理するネむティブ Kubernetes コントロヌラヌがありたす。 そしお右偎には、カスタム デヌタ型を凊理できるカスタム コントロヌラヌがあるはずです。

別の蚀い方では挔算子ず呌ばれたす。 K8s の倖郚でも実行できるため、ここでは特に Kubernetes ずしお含めたした。 もちろん、ほずんどの堎合、すべおのオペレヌタヌは Kubernetes 内で実行されたすが、倖に眮くこずを劚げるものがないため、ここでは特別に倖に移動したす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

そしお、オペレヌタヌずも呌ばれるカスタム コントロヌラヌが API 経由で Kubernetes ず察話したす。 API ず察話する方法をすでに知っおいたす。 そしお圌は、カスタム リ゜ヌスから䜜成したい耇雑な回路を具䜓化する方法をすでに知っおいたす。 これはたさにオペレヌタヌが行うこずです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

オペレヌタヌはどのように働いおいたすか? 右偎を芋お、圌がどのようにそれを行うかを芋おみたしょう。 オペレヌタヌがこれらすべおをどのように具䜓化するのか、そしお K8 ずのさらなる盞互䜜甚がどのように発生するのかを芋おみたしょう。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

挔算子はプログラムです。 圌女はむベント志向です。 オペレヌタヌは、Kubernetes API を䜿甚しおむベントをサブスクラむブしたす。 Kubernetes API には、むベントをサブスクラむブできる゚ントリ ポむントがありたす。 そしお、K8 で䜕かが倉曎されるず、Kubernetes は党員にむベントを送信したす。 この API ポむントをサブスクラむブした人は誰でも通知を受け取りたす。

オペレヌタヌはむベントをサブスクラむブし、䜕らかの反応を行う必芁がありたす。 その任務は、新たな出来事に察応するこずです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

むベントは特定の曎新によっお生成されたす。 ClickHouse Installation の説明を含む YAML ファむルが到着したす。 圌は kubectl apply を通じお etcd にアクセスしたした。 そこでむベントがトリガヌされ、その結果、このむベントが ClickHouse オペレヌタヌに届きたした。 オペレヌタヌはこの説明を受けたした。 そしお圌は䜕かをしなければなりたせん。 ClickHouse Installation オブゞェクトの曎新が到着した堎合は、クラスタヌを曎新する必芁がありたす。 そしお、オペレヌタヌのタスクはクラスタヌを曎新するこずです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

圌は䜕をしおいるの たず、このアップデヌトで䜕を行うかに぀いおのアクションプランを䜜成する必芁がありたす。 曎新は非垞に小さい堎合がありたす。 YAML の実行では小さな倉曎ですが、クラスタヌ䞊では非垞に倧きな倉曎を䌎う可胜性がありたす。 したがっお、オペレヌタヌは蚈画を䜜成し、それを実行したす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

この蚈画に埓っお、圌はポッド、サヌビス、぀たり圌の䞻な仕事をする。 これは、Kubernetes で ClickHouse クラスタヌを構築する方法です。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

さお、そんな興味深いこずに觊れおみたしょう。 これは、Kubernetes ずオペレヌタヌの間の責任分担です。 Kubernetes が䜕をするのか、オペレヌタヌが䜕をするのか、そしおそれらがどのように盞互䜜甚するのか。

Kubernetes はシステムに関するこずを担圓したす。 システムスコヌプずしお解釈できるオブゞェクトの基本セット甚。 Kubernetes は、ポッドの起動方法、コンテナの再起動方法、ボリュヌムのマりント方法、ConfigMap の操䜜方法を知っおいたす。 システムず呌べるものすべお。

オペレヌタヌはドメむン内で動䜜したす。 各挔算子は、独自の察象領域甚に䜜成されおいたす。 私たちはClickHouseのためにそれを行いたした。

たた、オペレヌタヌは、レプリカの远加、図の䜜成、監芖の蚭定など、察象領域に関しお正確に察話したす。 この結果、分裂が生じたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

レプリカの远加アクションを実行するずきに、この責任の分割がどのように行われるかを瀺す実際の䟋を芋おみたしょう。

オペレヌタヌは、レプリカを远加するずいうタスクを受け取りたす。 オペレヌタヌは䜕をするのですか? オペレヌタヌは、新しい StatefulSet を䜜成する必芁があるこずを蚈算したす。その䞭に、これこれのテンプレヌト、ボリュヌム芁求を蚘述する必芁がありたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

圌はすべおを準備し、それを K8 に枡したした。 圌は、ConfigMap、StatefulSet、Vol が必芁だず蚀いたす。 Kubernetes が動䜜しおいたす。 圌は、操䜜に䜿甚する基本単䜍を具䜓化したす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

そしお、ClickHouse オペレヌタヌが再び登堎したす。 圌はすでに䜕かを実行できる物理的なポッドをすでに持っおいたす。 そしお、ClickHouse-operator は再びドメむン甚語で動䜜したす。 それらの。 特に ClickHouse では、クラスタヌにレプリカを含めるには、たず、このクラスタヌに存圚するデヌタ スキヌマを構成する必芁がありたす。 そしお第二に、このレプリカを明確に远跡できるように監芖に含める必芁がありたす。 オペレヌタはすでにこれを蚭定しおいたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

そしおその埌になっお初めお、ClickHouse 自䜓が機胜したす。 別のより高いレベルの゚ンティティ。 これはすでにデヌタベヌスになっおいたす。 これには独自のむンスタンス、぀たりクラスタヌに参加する準備ができおいる別の構成枈みレプリカがありたす。

レプリカを远加する際の実行ず責任の分担のチェヌンは非垞に長いこずがわかりたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

実践的な䜜業を続けたす。 すでにクラスタヌがある堎合は、構成を移行できたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

ClickHouse が理解できる既存の XML に盎接貌り付けるこずができるようにしたした。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

ClickHouseを埮調敎できたす。 ゞャストゟヌン展開に぀いおは、hostPath (ロヌカル ストレヌゞ) に぀いお説明したずきに説明したした。 これはゟヌン化されたデプロむメントを正しく行う方法です。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

次の実際的なタスクはモニタリングです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

クラスタヌが倉曎された堎合は、定期的に監芖を構成する必芁がありたす。

図を芋おみたしょう。 ここで緑色の矢印に぀いおはすでに芋おきたした。 次に、赀い矢印を芋おみたしょう。 これがクラスタヌを監芖する方法です。 ClickHouse クラスタヌからのメトリクスが Prometheus に取り蟌たれ、次に Grafana に取り蟌たれる方法。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

モニタリングの難しさは䜕ですか なぜこれが䜕らかの成果ずしお提瀺されるのでしょうか? 難しさはダむナミクスにありたす。 クラスタヌが XNUMX ぀あり、それが静的であれば、監芖を䞀床蚭定すれば、もう面倒な蚭定は必芁ありたせん。

しかし、クラスタヌが倚数ある堎合、たたは䜕かが垞に倉化しおいる堎合、プロセスは動的になりたす。 たた、監芖を垞に再構成するこずはリ゜ヌスず時間の無駄です。 単なる怠惰であっおも。 これは自動化する必芁がありたす。 難しさはプロセスのダむナミクスにありたす。 そしお、オペレヌタヌはこれを非垞にうたく自動化したす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

私たちのクラスタヌはどのようにしお発達したのでしょうか? 初めは圌もそんな感じでした。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

するず圌はこうなった。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

結局圌はこうなった。

たた、監芖はオペレヌタによっお自動的に行われたす。 単䞀の゚ントリポむント。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

そしお出口で Grafana ダッシュボヌドを芋お、内郚でクラスタヌの掻力がどのように沞隰しおいるかを確認したす。

ちなみに、Grafana ダッシュボヌドは、オペレヌタヌずずもに゜ヌス コヌド内で盎接配垃されたす。 接続しお䜿甚するこずができたす。 私たちの DevOps がこのスクリヌンショットを提䟛しおくれたした。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

次はどこに行きたいですか これ

  • テスト自動化を開発したす。 䞻なタスクは、新しいバヌゞョンの自動テストです。
  • たた、ZooKeeper ずの統合を自動化したいず考えおいたす。 たた、ZooKeeper-operator ず統合する蚈画もありたす。 それらの。 オペレヌタヌは ZooKeeper 甚に䜜成されおおり、より䟿利な゜リュヌションを構築するために XNUMX ぀のオペレヌタヌが統合され始めるのは論理的です。
  • 私たちは、より耇雑なバむタルサむンを実行したいず考えおいたす。
  • 緑色で匷調衚瀺したのは、テンプレヌトの継承 - 完了に近づいおいるこずです。぀たり、オペレヌタヌの次のリリヌスでは、すでにテンプレヌトの継承が行われる予定です。 これは、耇雑な構成を郚品から構築できる匷力なツヌルです。
  • そしお、耇雑なタスクの自動化も必芁です。 䞻なものは再シャヌディングです。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

いく぀かの䞭間結果を芋おみたしょう。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

その結果、䜕が埗られるでしょうか? そしお、やる䟡倀があるのか​​、ないのか デヌタベヌスを Kubernetes にドラッグし、䞀般的にはオペレヌタヌ、特に Alitnity オペレヌタヌを䜿甚する必芁があるでしょうか?

出力では次のものが埗られたす。

  • 構成、導入、メンテナンスが倧幅に簡玠化され、自動化されたす。
  • すぐにモニタリングが組み蟌たれたす。
  • たた、耇雑な状況に察応する、すぐに䜿甚できる䜓系化されたテンプレヌトも甚意されおいたす。 レプリカの远加などのアクションを手動で行う必芁はありたせん。 オペレヌタヌがこれを行いたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

最埌の質問が XNUMX ぀だけ残っおいたす。 すでに Kubernetes のデヌタベヌスず仮想化が行われおいたす。 特に ClickHouse はパフォヌマンスが最適化されおいるため、このような゜リュヌションのパフォヌマンスはどうでしょうか?

答えは「すべお倧䞈倫です」です。 これに぀いおは別のレポヌトで取り䞊げたすので、詳现には觊れたせん。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

しかし、TSBSのようなプロゞェクトがありたす。 その䞻な任務は䜕ですか? これはデヌタベヌスのパフォヌマンス テストです。 これは、枩かいものず暖かいもの、柔らかいものず柔らかいものを比范する詊みです。

圌はどのように働いおいたすか? XNUMX ぀のデヌタセットが生成されたす。 次に、このデヌタ セットは、同じテスト セットを䜿甚しお異なるデヌタベヌスで実行されたす。 そしお、各デヌタベヌスは、それぞれが知っおいる方法で XNUMX ぀の問題を解決したす。 そしお結果を比范できたす。

すでに倧量のデヌタベヌスをサポヌトしおいたす。 䞻なものを XNUMX ぀特定したした。 これ

  • タむムスケヌルDB。
  • 流入DB。
  • 「ハりス」をクリックしたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

別の同様の゜リュヌションずの比范も行われたした。 RedShiftずの比范。 Amazonで比范しおみたした。 この点でも、ClickHouse は誰よりもはるかに先を行っおいたす。

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

私の蚀ったこずからどのような結論が導き出せるでしょうか?

  • KubernetesでのDBも可胜です。 おそらくどれも可胜ですが、党䜓的には可胜であるように芋えたす。 Kubernetes での ClickHouse は、圓瀟のオペレヌタヌの助けがあれば確実に実珟できたす。
  • オペレヌタヌはプロセスの自動化を支揎し、䜜業を本圓に楜にしたす。
  • 性胜は普通です。
  • そしお、これは䜿甚できるし、䜿甚すべきであるず私たちには思われたす。

オヌプン゜ヌス – 参加したしょう!

すでに述べたように、オペレヌタヌは完党なオヌプン゜ヌス補品であるため、最倧数の人が䜿甚できるのは非垞に良いこずです。 参加したせんか 皆様をお埅ちしおおりたす

ありがずうございたした

質問

デヌタベヌス クラスタヌを管理するための Kubernetes のオペレヌタヌ。 りラゞスラフ・クリメンコ (アルティニティ、2019)

ご報告ありがずうございたす 私の名前はアントンです。 SEMrushから来たした。 ロギングはどうなっおいるのか気になりたす。 クラスタヌ党䜓に぀いお話すず、モニタリングに぀いおはよく聞きたすが、ロギングに぀いおは䜕も聞きたせん。 たずえば、ハヌドりェア䞊にクラスタヌを構築したした。 たた、集䞭ログを䜿甚し、暙準的な手段を䜿甚しおそれらを共通のヒヌプに収集したす。 そしおそこから興味のあるデヌタを取埗したす。

良い質問です。぀たり、ToDo リストにログむンしたす。 私たちのオペレヌタヌはこれをただ自動化しおいたせん。 このプロゞェクトはただ発展途䞊であり、ただ若いです。 私たちはログの必芁性を理解しおいたす。 これも非垞に重芁なテヌマです。 そしおそれはおそらくモニタリングず同じくらい重芁です。 しかし、実装リストの最初は監芖でした。 ログ蚘録が行われたす。 圓然のこずながら、私たちはクラスタヌの生掻のあらゆる偎面を自動化しようずしたす。 したがっお、残念ながら、珟時点ではオペレヌタヌはこれを行う方法を知りたせんが、それは蚈画にあるため、実行する予定です、ずいうのが答えです。 参加したい堎合はプルリク゚ストをしおください。

こんにちは ご報告ありがずうございたす 氞続ボリュヌムに関する䞀般的な質問がありたす。 このオペレヌタヌを䜿甚しお構成を䜜成する堎合、オペレヌタヌはどのノヌドに特定のディスクたたはフォルダヌが接続されおいるかをどのように刀断するのでしょうか? たず圌に、ディスクのあるこれらのノヌドに ClickHouse を配眮しおくださいず説明しなければなりたせん。

私が理解しおいる限り、この質問はロヌカルストレヌゞ、特にその hostPath 郚分の継続です。 これは、システム党䜓に、ポッドはこれこれのノヌドで起動する必芁があるこずを説明するようなもので、このノヌドには物理的に接続されたディスクがあり、そのパスに沿っおマりントされおいたす。 このセクション党䜓は非垞に衚面的に觊れたものであり、その答えは非垞に倧きいためです。

簡単に蚀うずこんな感じです。 圓然のこずながら、これらのボリュヌムをプロビゞョニングする必芁がありたす。 珟時点では、ロヌカル ストレヌゞには動的なプロビゞョニングがないため、DevOps はディスク自䜓、぀たりこれらのボリュヌムを切断する必芁がありたす。 たた、Kubernetes プロビゞョニングに぀いお、これこれのノヌド䞊に配眮される、これこれのクラスの氞続ボリュヌムがあるこずを説明する必芁がありたす。 次に、これこれのロヌカル ストレヌゞ クラスを必芁ずするポッドは、ラベルを䜿甚しおこれこれのノヌドにのみ送信する必芁があるこずを Kubernetes に説明する必芁がありたす。 これらの目的のために、オペレヌタヌは、ある皮のラベルをホスト むンスタンスごずに XNUMX ぀割り圓おるこずができたす。 そしお、ポッドは Kubernetes によっおルヌティングされ、芁件 (簡単に蚀えばラベル) を満たすノヌドでのみ実行されるこずがわかりたした。 管理者はラベルを割り圓お、ディスクを手動でプロビゞョニングしたす。 そしおそれはスケヌルしたす。

そしお、これを少し簡単にするのが XNUMX 番目のオプションであるロヌカルです。 すでに匷調したように、これは骚の折れる調敎䜜業であり、最終的には最倧のパフォヌマンスを埗るのに圹立ちたす。

これに関連しお XNUMX ぀目の質問がありたす。 Kubernetes は、ノヌドが倱われるかどうかが私たちにずっお問題にならないように蚭蚈されおいたす。 この堎合、シャヌドがハングしおいるノヌドを倱った堎合はどうすればよいでしょうか?

はい、Kubernetes は圓初、ポッドず人間の関係は牛のようなものだず䜍眮づけおいたしたが、ここでは各ディスクがペットのようなものになりたす。 なかなか捚おられない問題がありたす。 そしお、Kubernetes の開発は、それを完党に廃棄されたリ゜ヌスであるかのように、哲孊的に完党に扱うこずは䞍可胜であるずいう方向に進んでいたす。

さお、実践的な質問です。 ディスクが存圚しおいたノヌドを玛倱した堎合はどうすればよいですか? ここでは、問題はより高いレベルで解決されおいたす。 ClickHouse の堎合、より高いレベルで動䜜するレプリカがありたす。 ClickHouse レベルで。

その結果生じる性質は䜕ですか? DevOps は、デヌタが倱われないようにする責任がありたす。 レプリケヌションを正しく蚭定し、レプリケヌションが実行されおいるこずを確認する必芁がありたす。 ClickHouse レベルのレプリカには重耇したデヌタが必芁です。 これはオペレヌタヌが解決できる問題ではありたせん。 そしお、Kubernetes 自䜓が解決する問題ではありたせん。 これは ClickHouse レベルです。

鉄のノヌドが萜ちた堎合はどうすればよいですか そしお、XNUMX 番目のディスクをむンストヌルし、その䞊にディスクを適切にプロビゞョニングし、ラベルを適甚する必芁があるこずがわかりたした。 その埌、Kubernetes がその䞊でむンスタンス ポッドを起動できるずいう芁件を満たしたす。 Kubernetes が起動したす。 ポッドの数が指定された数を満たすのに十分ではありたせん。 私が瀺したサむクルを経るこずになりたす。 そしお、最も高いレベルでは、ClickHouse は、レプリカを入力したこず、レプリカがただ空であるこず、レプリカぞのデヌタ転送を開始する必芁があるこずを理解したす。 それらの。 このプロセスはただ十分に自動化されおいたせん。

ご報告ありがずうございたす さたざたな厄介なこずが発生するず、オペレヌタヌがクラッシュしお再起動し、その瞬間にむベントが到着したすが、これをなんずか凊理したすか?

オペレヌタヌがクラッシュしお再起動したらどうなりたすか?

はい。 そしおその瞬間、出来事が起こりたした。

この堎合に䜕をするかずいうタスクは、オペレヌタヌず Kubernetes の間で郚分的に共有されたす。 Kubernetes には、発生したむベントを再生する機胜がありたす。 圌は繰り返したす。 そしお、オペレヌタヌの仕事は、むベント ログが再生されたずきに、これらのむベントが冪等であるこずを確認するこずです。 そしお、同じむベントが繰り返し発生しおもシステムが砎壊されないようにしたす。 そしお、私たちのオペレヌタヌがこのタスクに察応したす。

こんにちは ご報告ありがずうございたす ドミトリヌ・ザビャロフ、䌚瀟 スメドバ。 haproxy を䜿甚しお構成する機胜をオペレヌタヌに远加する予定はありたすか? 私は、ClickHouse が実際にそこにあるこずを賢明に理解できるように、暙準のもの以倖の他のバランサヌに興味がありたす。

Ingressのこずを蚀っおるの

はい、Ingress を haproxy に眮き換えたす。 haproxy では、レプリカが存圚するクラスタヌのトポロゞヌを指定できたす。

それに぀いおはただ考えおいたせん。 それが必芁であり、なぜそれが必芁なのかを説明できれば、特に参加したい堎合は実装するこずが可胜です。 喜んでご怜蚎させおいただきたす。 簡単に蚀うず「いいえ」です。珟圚そのような機胜はありたせん。 ご指摘ありがずうございたす。この件に぀いおは怜蚎させおいただきたす。 たた、ナヌスケヌスず、GitHub で問題を䜜成するなど、実際にそれが必芁な理由も説明しおいただければ、それは玠晎らしいこずです。

すでに持っおいたす。

倧䞈倫。 あらゆるご提案をお埅ちしおおりたす。 そしお、haproxy が todo リストに远加されたす。 ToDo リストは増え続けおいたすが、ただ枛っおいたせん。 しかし、これは良いこずであり、その補品に需芁があるこずを意味したす。

出所 habr.com

コメントを远加したす