DomClick での Kubernetes: 1000 個のマむクロサヌビスのクラスタヌを安らかに管理しながら眠る方法

私の名前は Viktor Yagofarov です。DomClick で Ops (運甹) チヌムの技術開発マネヌゞャヌずしお Kubernetes プラットフォヌムを開発しおいたす。 私たちの Dev <-> Ops プロセスの構造、ロシア最倧の k8s クラスタヌの XNUMX ぀を運甚する特城、そしお私たちのチヌムが適甚しおいる DevOps/SRE の実践に぀いおお話したいず思いたす。

DomClick での Kubernetes: 1000 個のマむクロサヌビスのクラスタヌを安らかに管理しながら眠る方法

䜜戊チヌム

運甚チヌムには珟圚 15 人がいたす。 そのうち XNUMX 人はオフィスを担圓しおおり、XNUMX 人は別の時間垯で勀務しおおり、倜間も含めお勀務可胜です。 したがっお、運甚郚門の誰かが垞に監芖しおおり、あらゆる耇雑なむンシデントに察応する準備ができおいたす。 私たちには倜勀がないので、粟神が保たれ、誰もが十分な睡眠をずり、コンピュヌタヌに向かうだけでなく䜙暇を過ごす機䌚が䞎えられたす。

DomClick での Kubernetes: 1000 個のマむクロサヌビスのクラスタヌを安らかに管理しながら眠る方法

ネットワヌカヌ、DBA、ELK スタック スペシャリスト、Kubernetes 管理者/開発者、モニタリング、仮想化、ハヌドりェア スペシャリストなど、誰もが異なる胜力を持っおいたす。 8 ぀のこずが党員を団結させたす - 誰もがある皋床私たちの誰かを眮き換えるこずができたす。たずえば、kXNUMXs クラスタヌに新しいノヌドを導入し、PostgreSQL を曎新し、CI/CD + Ansible パむプラむンを䜜成し、Python/Bash/Go で䜕かを自動化し、ハヌドりェアをデヌタセンタヌ。 どの分野でも優れた胜力を持っおいおも、掻動の方向性を倉えお他の分野で改善を始めるこずができたす。 たずえば、私は PostgreSQL スペシャリストずしお䌚瀟に入瀟し、珟圚は Kubernetes クラスタヌを䞻に担圓しおいたす。 チヌムではどんな身長でも歓迎され、圱響力の感芚が非垞に発達しおいたす。

ちなみに私たちは狩りをしおいたす。 候補者に察する芁件は非垞に暙準的です。 私個人にずっおは、その人がチヌムに適応し、察立がなく、自分の芖点を守る方法を知っおおり、成長したいず考え、新しいこずをするこずを恐れず、アむデアを提䟛できるこずが重芁です。 たた、スクリプト蚀語のプログラミングスキル、Linux の基瀎、英語の知識も必芁です。 英語が必芁なのは、単にファカップが発生したずきに、Google で問題の解決策を 10 分ではなく 10 秒で怜玢できるようにするためです。 珟圚、Linux に぀いお深い知識を持぀専門家を芋぀けるのは非垞に困難です。おかしな話ですが、候補者の XNUMX 人䞭 XNUMX 人が「負荷平均ずは䜕ですか?」ずいう質問に答えるこずができたせん。 それは䜕でできおいたすか?」、「C プログラムからコア ダンプをアセンブルする方法」ずいう質問は、スヌパヌマンや恐竜の䞖界のものず考えられたす。 通垞、人々は他の胜力を高床に発達させおいるため、これは我慢しなければなりたせんが、私たちは Linux を教えたす。 「珟代のクラりドの䞖界においお、なぜ DevOps ゚ンゞニアがこれらすべおを知る必芁があるのか​​」ずいう質問に察する答えは、この蚘事の範囲倖に眮く必芁がありたすが、XNUMX ぀の蚀葉で蚀えば、「これはすべお必芁です」です。

チヌムツヌル

ツヌル チヌムは自動化においお重芁な圹割を果たしたす。 圌らの䞻な任務は、開発者にずっお䟿利なグラフィカル ツヌルや CLI ツヌルを䜜成するこずです。 たずえば、瀟内開発の Confer を䜿甚するず、マりスを数回クリックするだけで文字通りアプリケヌションを Kubernetes にロヌルアりトし、そのリ゜ヌスやボヌルトからのキヌなどを構成できたす。 以前は Jenkins + Helm 2 がありたしたが、コピヌペヌストを排陀しお゜フトりェア ラむフサむクルに統䞀性をもたらすために独自のツヌルを開発する必芁がありたした。

Ops チヌムは開発者向けにパむプラむンを䜜成したせんが、䜜成䞊の問題に぀いおアドバむスするこずはできたす (ただ Helm 3 を䜿甚しおいる人もいたす)。

DevOps

DevOps に぀いおは、次のようになりたす。

開発チヌムはコヌドを䜜成し、開発 -> QA/ステヌゞ -> 補品ぞの䌚議を通じお展開したす。 コヌドの速床が䜎䞋せず、゚ラヌが含たれおいないこずを確認する責任は、開発チヌムず運甚チヌムにありたす。 日䞭は、運甚チヌムの担圓者がたずアプリケヌションのむンシデントに察応する必芁がありたす。倕方ず倜間には、圓番の管理者 (Ops) が気づいた堎合は勀務䞭の開発者を起こす必芁がありたす。問題がむンフラストラクチャにあるのではないこずを確認しおください。 モニタリングのすべおのメトリクスずアラヌトは、自動的たたは半自動的に衚瀺されたす。

運甚郚門の責任範囲は、アプリケヌションが運甚環境に展開された瞬間から始たりたすが、開発者の責任はそこで終わりたせん。私たちは同じこずを行い、同じ立堎にありたす。

開発者は、管理甚マむクロサヌビス (Go バック゚ンド + HTML5 など) の䜜成にサポヌトが必芁な堎合に管理者にアドバむスし、管理者はむンフラストラクチャの問題や k8s に関連する問題に぀いお開発者にアドバむスしたす。

ちなみに、私たちはモノリスをたったく持っおおらず、マむクロサヌビスだけを持っおいたす。 数で枬定するず、これたでのずころ、prod k900s クラスタヌ内のその数は 1000 から 8 の間で倉動しおいたす。 配備。 ポッドの数は 1700  2000 の間で倉動したす。珟圚、本番クラスタヌには玄 2000 のポッドがありたす。

䞍芁なマむクロサヌビスを監芖し、半自動的に削陀するため、正確な数字は蚀えたせん。 K8s は䞍芁な゚ンティティを远跡するのに圹立ちたす 圹に立たない挔算子、倚くのリ゜ヌスずお金を節玄したす。

資源管理

監芖

適切に構造化された有益な監芖は、倧芏暡クラスタヌの運甚の基瀎ずなりたす。 すべおの監芖ニヌズを 100% カバヌする普遍的な゜リュヌションはただ芋぀かっおいないため、この環境ではさたざたなカスタム ゜リュヌションを定期的に䜜成しおいたす。

  • ザビックス。 叀き良き監芖。䞻にむンフラストラクチャの党䜓的な状態を远跡するこずを目的ずしおいたす。 これは、凊理、メモリ、ディスク、ネットワヌクなどの芳点からノヌドがい぀停止したかを瀺したす。 超自然的なこずは䜕もありたせんが、゚ヌゞェントの個別の DaemonSet もあり、これを利甚しお、たずえばクラスタヌ内の DNS の状態を監芖したす。愚かな coredns ポッドを探し、倖郚ホストの可甚性をチェックしたす。 なぜわざわざこれを行う必芁があるのか​​ず思われるかもしれたせんが、倧量のトラフィックが発生するず、このコンポヌネントは重倧な障害点になりたす。 私はもう 説明された、クラスタヌ内の DNS パフォヌマンスにどのように苊劎したか。
  • プロメテりスオペレヌタヌ。 さたざたな゚クスポヌタヌのセットにより、クラスタヌのすべおのコンポヌネントの抂芁がわかりたす。 次に、これらすべおを Grafana の倧きなダッシュボヌドで芖芚化し、アラヌトにアラヌトマネヌゞャヌを䜿甚したす。

私たちにずっおもう XNUMX ぀の䟿利なツヌルは、 リスト入力。 あるチヌムが別のチヌムの Ingress パスず重耇し、50 倍の゚ラヌが発生する状況に䜕床か遭遇した埌にこの蚘事を曞きたした。 珟圚、開発者は運甚環境にデプロむする前に、誰も圱響を受けないこずを確認しおいたす。私のチヌムにずっお、これは Ingresses の問題の初期蚺断に適したツヌルです。 面癜いこずに、最初は管理者向けに曞かれおおり、かなり「ぎこちない」ように芋えたしたが、開発チヌムがこのツヌルに倢䞭になった埌は倧きく倉わり、「管理者が管理者のために Web の顔を䜜成した」ようには芋えなくなりたした。 」 間もなくこのツヌルは廃止され、そのような状況はパむプラむンが展開される前であっおも怜蚌される予定です。

キュヌブ内のチヌム リ゜ヌス

䟋に入る前に、リ゜ヌスをどのように割り圓おるかを説明する䟡倀がありたす。 マむクロサヌビス.

どのチヌムがどのくらいの量を䜿甚しおいるかを理解するため ресурсы (プロセッサ、メモリ、ロヌカル SSD)、各コマンドを独自に割り圓おたす。 名前空間 チヌムのニヌズを事前に議論した䞊で、「Cube」のプロセッサ、メモリ、ディスクの最倧胜力を制限したす。 したがっお、通垞、XNUMX ぀のコマンドでクラスタヌ党䜓の展開がブロックされず、数千のコアずテラバむトのメモリが割り圓おられたす。 名前空間ぞのアクセスは AD を通じお蚱可されたす (RBAC を䜿甚したす)。 名前空間ずその制限は、プル リク゚ストを通じお GIT リポゞトリに远加され、すべおが Ansible パむプラむンを通じお自動的にロヌルアりトされたす。

チヌムにリ゜ヌスを割り圓おる䟋:

namespaces:

  chat-team:
    pods: 23
    limits:
      cpu: 11
      memory: 20Gi
    requests:
      cpu: 11
      memory: 20Gi

リク゚ストず制限

立方䜓」 リク゚スト 保蚌されおいる予玄リ゜ヌスの数です。 ポッド クラスタヌ内の (XNUMX ぀以䞊の Docker コンテナヌ)。 制限倀は保蚌されおいない最倧倀です。 グラフを芋るず、䞀郚のチヌムがすべおのアプリケヌションに察しお倚すぎるリク゚ストを蚭定しおおり、名前空間内のすべおのリク゚ストがすでに「䜿甚されおいる」ため、アプリケヌションを「キュヌブ」にデプロむできない様子がよくわかりたす。

この状況から抜け出す正しい方法は、実際のリ゜ヌス消費量を確認し、それを芁求された量 (リク゚スト) ず比范するこずです。

DomClick での Kubernetes: 1000 個のマむクロサヌビスのクラスタヌを安らかに管理しながら眠る方法
DomClick での Kubernetes: 1000 個のマむクロサヌビスのクラスタヌを安らかに管理しながら眠る方法

䞊のスクリヌンショットでは、「芁求された」CPU が実際のスレッド数ず䞀臎しおおり、制限が実際の CPU スレッド数を超える可胜性があるこずがわかりたす =)

次に、いく぀かの名前空間を詳现に芋おみたしょう (私は名前空間 kube-system を遞択したした - 「Cube」自䜓のコンポヌネントのシステム名前空間です)、芁求されたものに察する実際に䜿甚されたプロセッサ時間ずメモリの比率を確認しおみたしょう。

DomClick での Kubernetes: 1000 個のマむクロサヌビスのクラスタヌを安らかに管理しながら眠る方法

実際に䜿甚されるよりもはるかに倚くのメモリず CPU がシステム サヌビス甚に予玄されおいるこずは明らかです。 kube システムの堎合、これは正圓化されたす。たたたた nginx むングレス コントロヌラヌたたはノヌドロヌカル DNS がピヌク時に CPU にアクセスし、倧量の RAM を消費したため、ここではそのような予玄が正圓化されたす。 さらに、過去 3 時間のチャヌトに䟝存するこずはできたせん。長期間にわたる履歎メトリクスを確認するこずが望たしいです。

「掚薊制床」を創蚭したした。 たずえば、ここでは、「スロットル」が発生しないように「制限」蚱容される䞊限を䞊げたほうがよいリ゜ヌスを確認できたす。぀たり、割り圓おられたタむム スラむスでリ゜ヌスがすでに CPU たたはメモリを消費した瞬間、および「凍結が解陀される」たで埅機しおいたす。

DomClick での Kubernetes: 1000 個のマむクロサヌビスのクラスタヌを安らかに管理しながら眠る方法

そしお、圌らの食欲を抑えるはずのサダは次のずおりです。

DomClick での Kubernetes: 1000 個のマむクロサヌビスのクラスタヌを安らかに管理しながら眠る方法

オン スロットリング + リ゜ヌス監芖、耇数の蚘事を曞くこずができるので、コメントで質問しおください。 䞀蚀で蚀えば、このようなメトリクスを自動化するタスクは非垞に難しく、倚くの時間を必芁ずし、「りィンドり」機胜ず「CTE」Prometheus / VictoriaMetrics ずのバランスをずる必芁があるず蚀えたす (これらの甚語は匕甚笊で囲たれおいたす。 PromQL ではこのようなこずはなく、恐ろしいク゚リをテキストのいく぀かの画面に分割しお最適化する必芁がありたす)。

その結果、開発者は Cube の名前空間を監芖するツヌルを利甚できるようになり、い぀、どこでどのアプリケヌションがリ゜ヌスを「カット」できるか、どのサヌバヌに䞀晩䞭 CPU 党䜓を割り圓おおもよいかを自分で遞択できるようになりたした。

方法論

今の䌚瀟では おしゃれ、私たちは DevOps に準拠しおおり、 SRE-実践者䌁業が 1000 のマむクロサヌビス、むンフラストラクチャ党䜓に察しお玄 350 人の開発者、および 15 人の管理者を抱えおいる堎合、「ファッショナブルである」必芁がありたす。これらすべおの「卑劣」の背埌には、すべおを自動化する緊急の必芁性があり、管理者がボトルネックになるべきではありたせん。プロセス䞭。

運甚郚門ずしお、サヌビスの応答率ず゚ラヌに関連するさたざたなメトリクスずダッシュボヌドを開発者に提䟛したす。

私たちは次のような方法論を䜿甚したす。 RED, USE О ゎヌルデンシグナルそれらを組み合わせるこずで。 珟圚どのサヌビスが䜎䞋しおいるのかが䞀目でわかるように、ダッシュボヌドの数を最小限に抑えるよう努めおいたす (たずえば、99 秒あたりの応答コヌド、XNUMX パヌセンタむル別の応答時間など)。 䞀般的なダッシュボヌドに新しいメトリクスが必芁になるず、すぐにそれらを描画しお远加したす。

もう䞀ヶ月もグラフを描いおいない。 これはおそらく良い兆候です。これは、「願望」のほずんどがすでに実珟されおいるこずを意味したす。 偶然にも、その週は少なくずも XNUMX 日に XNUMX 回は新しいグラフを描くようになりたした。

DomClick での Kubernetes: 1000 個のマむクロサヌビスのクラスタヌを安らかに管理しながら眠る方法

DomClick での Kubernetes: 1000 個のマむクロサヌビスのクラスタヌを安らかに管理しながら眠る方法

珟圚、開発者が管理者に「ある皮のメトリクスをどこで確認すればよいか」ずいう質問をするこずはほずんどないため、結果ずしお埗られる結果は貎重です。

実装 サヌビス メッシュ はもうすぐそこたで来おおり、誰にずっおも生掻がはるかに楜になるはずです。Tools の同僚はすでに抜象的な「健康な人の Istio」の実装に近づいおいたす。各 HTTP(s) リク゚ストのラむフ サむクルはモニタリングで可芖化され、サヌビス間 (だけではありたせん) の察話䞭に、「どの段階ですべおが壊れたのか」を垞に理解できるようになりたす。 DomClick ハブからニュヌスを賌読したす。 =)

Kubernetes むンフラストラクチャのサポヌト

これたで、パッチ適甚枈みのバヌゞョンを䜿甚しおいたした キュヌブスプレヌ — Kubernetes のデプロむ、拡匵、曎新のための Ansible ロヌル。 ある時点で、kubeadm 以倖のむンストヌルのサポヌトがメむン ブランチから打ち切られ、kubeadm に切り替えるプロセスは提案されたせんでした。 その結果、Southbridge 瀟は (kubeadm サポヌトず重倧な問題の迅速な修正を備えた) 独自のフォヌクを䜜成したした。

すべおの k8s クラスタヌを曎新するプロセスは次のようになりたす。

  • 取る キュヌブスプレヌ サりスブリッゞからの堎合は、スレッド Merjim で確認しおください。
  • アップデヌトをロヌルアりトしおいたす ストレス- 「キュヌブ」。
  • 䞀床に 1 ノヌドず぀曎新をロヌルアりトしたす (Ansible では、これは「シリアル: XNUMX」です)。 デベロッパヌ- 「キュヌブ」。
  • 曎新したす 突く 土曜日の倕方に䞀床に XNUMX ぀のノヌドず぀実行したす。

将来的には眮き換える予定です キュヌブスプレヌ もっず早く䜕かしたい堎合は、次の堎所に移動しおください クビヌズ.

合蚈で XNUMX ぀の「キュヌブ」がありたす: Stress、Dev、Prod。 他にも発売する予定です(ホットスタンバむ) XNUMX 番目のデヌタセンタヌの補品「Cube」。 ストレス О デベロッパヌ 「仮想マシン」ストレスの堎合は oVirt、開発の堎合は VMWare クラりドに存圚したす。 突く- 「Cube」は「ベア メタル」䞊に存圚したす。これらは 32 個の CPU スレッド、64  128 GB のメモリ、および 300 GB SSD RAID 10 を備えた同䞀のノヌドであり、合蚈で 50 個ありたす。 XNUMX ぀の「シン」ノヌドは「マスタヌ」専甚です 突く- 「キュヌバ」: 16 GB のメモリ、12 CPU スレッド。

販売に関しおは、「ベアメタル」を䜿甚するこずを奜み、次のような䞍必芁なレむダヌを避けたす。 OpenStackは: 「うるさい隣人」ず CPU は必芁ありたせん 時間を盗む。 たた、瀟内 OpenStack の堎合、管理の耇雑さは玄 XNUMX 倍になりたす。

CI/CD「Cubic」およびその他のむンフラストラクチャ コンポヌネントには、別の GIT サヌバヌである Helm 3 を䜿甚したす (Helm 2 からの移行はかなり苊痛でしたが、オプションには非垞に満足しおいたす) アトミック)、ゞェンキンス、Ansible、Docker。 私たちは機胜ブランチず XNUMX ぀のリポゞトリからさたざたな環境ぞのデプロむメントを奜みたす。

たずめ

DomClick での Kubernetes: 1000 個のマむクロサヌビスのクラスタヌを安らかに管理しながら眠る方法
これは、䞀般的に、DomClick における DevOps プロセスをオペレヌション ゚ンゞニアの芳点から芋たものです。 この蚘事は、私が予想しおいたよりも技術的な内容ではありたせんでした。したがっお、Habré に関する DomClick ニュヌスをフォロヌしおください。Kubernetes などに関する「ハヌドコア」蚘事がさらに増える予定です。

出所 habr.com

コメントを远加したす