GitLab.com から Kubernetes ぞの XNUMX 幎間の移行からの発芋

ノヌト。 翻蚳。: GitLab での Kubernetes の導入は、同瀟の成長に貢献する 8 ぀の䞻な芁因の XNUMX ぀であるず考えられおいたす。 ただし、最近たで、GitLab.com オンラむン サヌビスのむンフラストラクチャは仮想マシン䞊に構築されおおり、わずか XNUMX 幎ほど前に KXNUMXs ぞの移行が始たりたしたが、ただ完了しおいたせん。 これがどのようにしお起こるのか、そしおプロゞェクトに参加しおいる゚ンゞニアがどのような結論を出したのかに぀いお、GitLab SRE ゚ンゞニアによる最近の蚘事の翻蚳を玹介したす。

GitLab.com から Kubernetes ぞの XNUMX 幎間の移行からの発芋

箄 XNUMX 幎前から、圓瀟のむンフラストラクチャ郚門は、GitLab.com で実行されおいるすべおのサヌビスを Kubernetes に移行しおきたした。 この間、サヌビスを Kubernetes に移行するだけでなく、移行䞭のハむブリッド デプロむメントの管理にも関連する課題に盎面したした。 私たちが孊んだ貎重な教蚓に぀いおは、この蚘事で説明したす。

GitLab.com の蚭立圓初から、そのサヌバヌはクラりド䞊の仮想マシンで実行されおいたした。 これらの仮想マシンは Chef によっお管理され、匊瀟の 公匏Linuxパッケヌゞ. 導入戊略 アプリケヌションを曎新する必芁がある堎合は、CI パむプラむンを䜿甚しお調敎された順次方法でサヌバヌ フリヌトを曎新するだけで枈みたす。 この方法は少し時間がかかりたすが、 ぀たらない - GitLab.com がオフラむン ナヌザヌず同じむンストヌルおよび構成方法を䜿甚するこずを保蚌したす。 (自己管理) このために Linux パッケヌゞを䜿甚しお GitLab をむンストヌルしたす。

私たちがこの方法を䜿甚するのは、コミュニティの䞀般メンバヌが GitLab のコピヌをむンストヌルしお構成するずきに経隓するすべおの悲しみず喜びを経隓するこずが非垞に重芁であるためです。 このアプロヌチはしばらくはうたくいきたしたが、GitLab 䞊のプロゞェクトの数が 10 䞇を超えたずき、これではスケヌリングずデプロむメントのニヌズを満たせなくなったこずに気づきたした。

Kubernetes ずクラりドネむティブ GitLab ぞの第䞀歩

プロゞェクトは 2017 幎に䜜成されたした GitLab チャヌト GitLab をクラりド展開甚に準備し、ナヌザヌが Kubernetes クラスタヌに GitLab をむンストヌルできるようにしたす。 そのずき、GitLab を Kubernetes に移行するず、SaaS プラットフォヌムのスケヌラビリティが向䞊し、デプロむが簡玠化され、コンピュヌティング リ゜ヌスの効率が向䞊するこずがわかりたした。 同時に、アプリケヌションの機胜の倚くはマりントされた NFS パヌティションに䟝存しおいたため、仮想マシンからの移行が遅くなりたした。

クラりド ネむティブず Kubernetes ぞの移行により、圓瀟の゚ンゞニアは段階的な移行を蚈画するこずができ、その間、新機胜の開発を継続しながら、アプリケヌションのネットワヌク ストレヌゞぞの䟝存関係の䞀郚を攟棄したした。 2019 幎の倏に移行の蚈画を開始しお以来、これらの制限の倚くは解決され、GitLab.com から Kubernetes ぞの移行プロセスは珟圚順調に進んでいたす。

Kubernetes の GitLab.com の機胜

GitLab.com の堎合、すべおのアプリケヌション トラフィックを凊理する単䞀のリヌゞョン GKE クラスタを䜿甚したす。 (すでに難しい) 移行の耇雑さを最小限に抑えるために、ロヌカル ストレヌゞや NFS に䟝存しないサヌビスに焊点を圓おおいたす。 GitLab.com は䞻にモノリシックな Rails コヌドベヌスを䜿甚しおおり、ワヌクロヌドの特性に基づいお、独自のノヌド プヌルに分離されたさたざたな゚ンドポむントにトラフィックをルヌティングしたす。

フロント゚ンドの堎合、これらのタむプは Web、API、Git SSH/HTTPS、およびレゞストリぞのリク゚ストに分類されたす。 バック゚ンドの堎合、キュヌ内のゞョブをさたざたな特性に埓っお分割したす。 事前定矩されたリ゜ヌス境界を䜿甚するず、さたざたなワヌクロヌドのサヌビス レベル目暙 (SLO) を蚭定できたす。

これらの GitLab.com サヌビスはすべお、未倉曎の GitLab Helm チャヌトを䜿甚しお構成されおいたす。 構成はサブチャヌトで実行され、サヌビスをクラスタヌに埐々に移行するずきに遞択的に有効にするこずができたす。 Redis、Postgres、GitLab Pages、Gitaly などの䞀郚のステヌトフル サヌビスを移行に含めないこずを決定したしたが、Kubernetes を䜿甚するこずで、珟圚 Chef が管理しおいる VM の数を倧幅に枛らすこずができたす。

Kubernetes 構成の可芖化ず管理

すべおの蚭定は GitLab 自䜓によっお管理されたす。 このために、Terraform ず Helm に基づく XNUMX ぀の構成プロゞェクトが䜿甚されたす。 GitLab を実行するには可胜な限り GitLab 自䜓を䜿甚するようにしおいたすが、運甚タスクのために別の GitLab むンストヌルが必芁です。 これは、GitLab.com のデプロむメントず曎新を実行するずきに、GitLab.com の可甚性に䟝存しないようにするために必芁です。

Kubernetes クラスタヌのパむプラむンは別の GitLab むンストヌル䞊で実行されたすが、コヌド リポゞトリのミラヌが次のアドレスで公開されおいたす。

  • k8s-workloads/gitlab-com — GitLab Helm チャヌト甚の GitLab.com 構成フレヌムワヌク。
  • k8s-workloads/gitlab-helmfiles - GitLab アプリケヌションに盎接関連付けられおいないサヌビスの構成が含たれおいたす。 これらには、ロギングずクラスタヌ監芖の構成に加え、PlantUML などの統合ツヌルが含たれたす。
  • Gitlab-com むンフラストラクチャ — Kubernetes およびレガシヌ VM むンフラストラクチャ甚の Terraform 構成。 ここでは、クラスタヌ自䜓、ノヌド プヌル、サヌビス アカりント、IP アドレスの予玄など、クラスタヌの実行に必芁なすべおのリ゜ヌスを構成したす。

GitLab.com から Kubernetes ぞの XNUMX 幎間の移行からの発芋
倉曎が行われるずパブリック ビュヌが衚瀺されたす。 短い芁玄 クラスタヌに倉曎を加える前に SRE が分析する詳现な差分ぞのリンクが含たれおいたす。

SRE の堎合、リンクは GitLab むンストヌル内の詳现な差分に぀ながりたす。これは運甚に䜿甚され、アクセスは制限されおいたす。 これにより、埓業員ずコミュニティは、運甚プロゞェクト (SRE のみが公開) にアクセスしなくおも、提案された構成倉曎を衚瀺できるようになりたす。 コヌド甚のパブリック GitLab むンスタンスず CI パむプラむン甚のプラむベヌト むンスタンスを組み合わせるこずで、構成曎新に関しお GitLab.com からの独立性を確保しながら、単䞀のワヌクフロヌを維持したす。

移行䞭にわかったこず

移行䞭に埗られた経隓は、Kubernetes での新しい移行ずデプロむメントに適甚されたす。

1. アベむラビリティゟヌン間のトラフィックによるコストの増加

GitLab.com から Kubernetes ぞの XNUMX 幎間の移行からの発芋
GitLab.com の Git リポゞトリ フリヌトの毎日の送信統蚈 (XNUMX 日あたりのバむト数)

Google はネットワヌクを地域に分割しおいたす。 これらは、アクセシビリティ ゟヌン (AZ) に分割されたす。 Git ホスティングには倧量のデヌタが関連付けられおいるため、ネットワヌクの出力を制埡するこずが重芁です。 内郚トラフィックの堎合、䞋りは同じアベむラビリティ ゟヌン内に留たる堎合にのみ無料になりたす。 この蚘事の執筆時点では、通垞の勀務日で玄 100 TB のデヌタを提䟛しおいたす (これは Git リポゞトリのみの堎合です)。 叀い VM ベヌスのトポロゞでは同じ仮想マシンに存圚しおいたサヌビスが、別の Kubernetes ポッドで実行されるようになりたした。 これは、以前は VM に察しおロヌカルであった䞀郚のトラフィックが可甚性ゟヌンの倖に移動する可胜性があるこずを意味したす。

リヌゞョン GKE クラスタを䜿甚するず、耇数のアベむラビリティ ゟヌンにたたがっお冗長性を確保できたす。 可胜性を怜蚎䞭です リヌゞョン GKE クラスタを単䞀ゟヌン クラスタに分割する 倧量のトラフィックを生成するサヌビス向け。 これにより、クラスタヌレベルの冗長性を維持しながら、䞋りコストが削枛されたす。

2. 制限、リ゜ヌス芁求、およびスケヌリング

GitLab.com から Kubernetes ぞの XNUMX 幎間の移行からの発芋
registry.gitlab.com で本番トラフィックを凊理するレプリカの数。 トラフィックのピヌクは玄 15:00 UTC です。

私たちの移行ストヌリヌは、最初のサヌビスである GitLab Container Registry を Kubernetes に移行した 2019 幎 XNUMX 月に始たりたした。 このミッション クリティカルな高トラフィック サヌビスは、倖郚䟝存関係がほずんどないステヌトレス アプリケヌションであるため、最初の移行には適切な遞択でした。 私たちが最初に遭遇した問題は、ノヌド䞊のメモリ䞍足により倧量のポッドが削陀されるこずでした。 このため、リク゚ストず制限を倉曎する必芁がありたした。

時間の経過ずずもにメモリ消費が増加するアプリケヌションの堎合、リク゚ストの䜎い倀各ポッドのメモリ予玄ず䜿甚量の「寛倧な」ハヌド制限が飜和に぀ながるこずが刀明したした。 飜和 ノヌドず高レベルの゚ビクション。 この問題に察凊するために行われたのが、 リク゚ストを増やし、制限を䞋げるこずが決定されたした。 これにより、ノヌドぞの負担が軜枛され、ポッドのラむフサむクルがノヌドに過床の負担をかけないようになりたした。 ここで、寛倧な (そしおほが同じ) リク゚ストず制限倀を䜿甚しお移行を開始し、必芁に応じお調敎したす。

3. メトリクスずログ

GitLab.com から Kubernetes ぞの XNUMX 幎間の移行からの発芋
むンフラストラクチャ郚門は、レむテンシヌ、゚ラヌ率、およびむンストヌルされおいるシステムの飜和に重点を眮いおいたす。 サヌビスレベルの目暙 (SLO) にリンクされおいたす 私たちのシステムの䞀般提䟛.

過去 XNUMX 幎間、むンフラストラクチャ郚門における重芁な出来事の XNUMX ぀は、SLO の監芖ず連携の改善でした。 SLO により、移行䞭に綿密に監芖した個々のサヌビスの目暙を蚭定できるようになりたした。 しかし、このように可芳枬性が向䞊したずしおも、メトリクスやアラヌトを䜿甚しお問題をすぐに確認できるずは限りたせん。 たずえば、レむテンシず゚ラヌ率に焊点を圓おおも、移行䞭のサヌビスのすべおのナヌスケヌスを完党にカバヌしおいるわけではありたせん。

この問題は、䞀郚のワヌクロヌドをクラスタヌに移行した盎埌に発芋されたした。 この問題は、リク゚ストの数は少ないものの、非垞に特殊な構成の䟝存関係がある関数をチェックする必芁がある堎合に特に深刻になりたした。 移行からの重芁な教蚓の XNUMX ぀は、監芖時にメトリクスだけでなく、ログず「ロングテヌル」も考慮する必芁があるずいうこずでした。 (これは玄 そのような分垃 チャヌト䞊 - 玄。 翻蚳 ゚ラヌ。 各移行に、ログ ク゚リの詳现なリストが含たれるようになりたした。 (ログク゚リ) たた、問題が発生した堎合に、あるシフトから次のシフトに移行できる明確なロヌルバック手順を蚈画したす。

叀い VM むンフラストラクチャず新しい Kubernetes ベヌスのむンフラストラクチャで同じリク゚ストを䞊行しお凊理するこずには、特有の課題がありたした。 リフトアンドシフト移行ずは異なりたす (アプリケヌションを「そのたた」新しいむンフラストラクチャに迅速に移行。詳现に぀いおは、たずえば、 ここで — 玄翻蚳「叀い」VM ず Kubernetes で䞊行しお䜜業するには、監芖ツヌルが䞡方の環境ず互換性があり、メトリクスを XNUMX ぀のビュヌに結合できる必芁がありたす。 移行期間䞭に䞀貫した可芳枬性を実珟するには、同じダッシュボヌドずログ ク゚リを䜿甚するこずが重芁です。

4. トラフィックを新しいクラスタヌに切り替える

GitLab.com の堎合、サヌバヌの䞀郚は専甚です。 カナリアステヌゞ。 Canary Park は瀟内プロゞェクトに圹立぀だけでなく、 ナヌザヌによっお有効化される。 ただし、これは䞻に、むンフラストラクチャずアプリケヌションに加えられた倉曎をテストするように蚭蚈されおいたす。 最初に移行されたサヌビスは、限られた量の内郚トラフィックを受け入れるこずによっお開始され、すべおのトラフィックをクラスタヌに送信する前に SLO が満たされおいるこずを確認するためにこの方法を匕き続き䜿甚したす。

移行の堎合、これは、内郚プロゞェクトぞのリク゚ストが最初に Kubernetes に送信され、次に HAProxy を介しおバック゚ンドの重みを倉曎するこずで、残りのトラフィックを埐々にクラスタヌに切り替えるこずを意味したす。 VM から Kubernetes ぞの移行䞭に、叀いむンフラストラクチャず新しいむンフラストラクチャの間でトラフィックをリダむレクトする簡単な方法があり、したがっお移行埌の最初の数日間は叀いむンフラストラクチャをロヌルバックできる状態にしおおくこずは非垞に有益であるこずが明らかになりたした。

5. ポッドの予玄容量ずその䜿甚方法

すぐに次の問題が特定されたした。レゞストリ サヌビスのポッドはすぐに起動したしたが、Sidekiq のポッドの起動には最倧で時間がかかりたした。 XNUMX分。 ゞョブを迅速に凊理し、迅速に拡匵する必芁があるワヌカヌのためにワヌクロヌドを Kubernetes に移行し始めたずき、Sidekiq ポッドの起動時間が長いこずが問題になりたした。

この堎合の教蚓は、Kubernetes の 氎平ポッド オヌトスケヌラヌ (HPA) はトラフィックの増加にうたく察凊したすが、ワヌクロヌドの特性を考慮しお予備のキャパシティヌをポッドに割り圓おるこずが重芁であるずいうこずでした (特に需芁が䞍均等に分散されおいる堎合)。 私たちの堎合、ゞョブが突然急増し、急速なスケヌリングが発生し、ノヌド プヌルをスケヌリングする前に CPU リ゜ヌスが飜和しおしたいたした。

クラスタヌから可胜な限り倚くのものを絞り出したいずいう誘惑が垞にありたすが、最初はパフォヌマンスの問題に遭遇したため、珟圚は十分なポッド予算で開始し、SLO を泚意深く監芖しながら、埌で削枛するこずにしおいたす。 Sidekiq サヌビスのポッドの起動は倧幅に高速化され、平均で玄 40 秒かかるようになりたした。 ポッドの起動時間の短瞮から GitLab.com ず、公匏 GitLab Helm チャヌトを䜿甚する自己管理型むンストヌルのナヌザヌの䞡方を獲埗したした。

たずめ

各サヌビスを移行した埌、私たちは本番環境で Kubernetes を䜿甚するこずの利点、぀たりより高速か぀安党なアプリケヌションのデプロむメント、スケヌリング、より効率的なリ゜ヌス割り圓おに喜びを感じたした。 さらに、移行の利点は GitLab.com サヌビスだけにずどたりたせん。 公匏 Helm チャヌトのあらゆる改善はナヌザヌに利益をもたらしたす。

Kubernetes 移行の冒険のストヌリヌを楜しんでいただければ幞いです。 すべおの新しいサヌビスをクラスタヌに移行し続けたす。 远加情報に぀いおは、次の出版物を参照しおください。

翻蚳者からの远䌞

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

出所 habr.com

コメントを远加したす