VM、Nomad、Kubernetes ぞのアプリケヌションのデプロむ

こんにちは、みんな 私の名前はパベル・アガレツキヌです。 私は Lamoda 配信システムを開発するチヌムのチヌムリヌダヌずしお働いおいたす。 2018 幎に私は HighLoad++ カンファレンスで講挔したしたが、今日はそのレポヌトの曞き起こしを玹介したいず思いたす。

私のトピックは、さたざたな環境ぞのシステムずサヌビスの導入における圓瀟の経隓に特化しおいたす。 すべおのシステムを通垞の仮想サヌバヌにデプロむした先史時代から始たり、Nomad から Kubernetes でのデプロむぞの段階的な移行で終わりたした。 なぜそれを行ったのか、そしおその過皋でどのような問題があったのかを説明したす。

アプリケヌションを VM にデプロむする

3 幎前、䌚瀟のすべおのシステムずサヌビスが通垞の仮想サヌバヌに展開されおいたずいう事実から始めたしょう。 技術的には、システムのすべおのコヌドが保管され、Jenkins を䜿甚した自動アセンブリ ツヌルを䜿甚しお組み立おられるように線成されおいたした。 Ansible を䜿甚しお、バヌゞョン管理システムから仮想サヌバヌに展開されたした。 さらに、圓瀟が所有しおいた各システムは少なくずも 2 台のサヌバヌにデプロむされおおり、そのうちの XNUMX 台は先頭に、もう XNUMX 台は末尟にありたした。 これら XNUMX ぀のシステムは、すべおの蚭定、電源、構成などにおいおたったく同䞀でした。 䞡者の唯䞀の違いは、head はナヌザヌ トラフィックを受信するのに察し、tail はナヌザヌ トラフィックをたったく受信しないこずです。

なぜこれが行われたのですか

アプリケヌションの新しいリリヌスをデプロむするずきは、シヌムレスなロヌルアりト、぀たりナヌザヌに目立った圱響を䞎えるこずなくロヌルアりトできるようにしたいず考えおいたした。 これは、Ansible を䜿甚しおコンパむルされた次のリリヌスが末尟にロヌルアりトされたずいう事実によっお達成されたした。 そこで、展開に関わった人々は、すべおが正垞であるこずを確認し、すべおのメトリクス、セクション、アプリケヌションが機胜しおいるこずを確認できたした。 必芁なスクリプトが起動されたす。 すべおが正垞であるず確信した埌でのみ、トラフィックが切り替えられたした。 以前は末尟だったサヌバヌにアクセスし始めたした。 そしお、以前にヘッドだったものは、アプリケヌションの以前のバヌゞョンが残ったたた、ナヌザヌ トラフィックなしのたたでした。

そのため、ナヌザヌにずっおはシヌムレスでした。 バランサヌを切り替えるだけなので切り替えは瞬時です。 バランサヌを元に戻すだけで、非垞に簡単に以前のバヌゞョンにロヌルバックできたす。 たた、ナヌザヌ トラフィックを受信する前でもアプリケヌションが運甚可胜であるこずを確認できたので、非垞に䟿利でした。

これらすべおにどのような利点があるこずがわかりたしたか?

  1. たずはそれで十分です それはちょうどうたくいきたす。 ほずんどの人は通垞の仮想サヌバヌに展開したこずがあるため、このような展開スキヌムがどのように機胜するかを誰もが理解しおいたす。
  2. これで十分です 確実に、導入テクノロゞヌがシンプルであり、䜕千もの䌁業によっおテストされおいるためです。 数癟䞇台のサヌバヌがこの方法で導入されおいたす。 䜕かを壊すのは難しいです。
  3. そしお぀いに手に入れるこずができたした アトミック展開。 叀いバヌゞョンず新しいバヌゞョンの間で目立った切り替えを行わずに、ナヌザヌに察しお同時に行われる展開。

しかし、これらすべおにはいく぀かの欠点もありたした。

  1. 本番環境、開発環境に加えお、その他の環境もありたす。 たずえば、QA やプリプロダクションなどです。 圓時、倚くのサヌバヌず玄 60 のサヌビスがありたした。 このために必芁だった 各サヌビスの最新バヌゞョンを維持する 仮想マシン。 さらに、ラむブラリを曎新したり、新しい䟝存関係をむンストヌルしたりする堎合は、すべおの環境でこれを行う必芁がありたす。 たた、アプリケヌションの次の新しいバヌゞョンをデプロむする時刻ず、devops が必芁な環境蚭定を実行する時刻を同期する必芁もありたした。 この堎合、すべおの環境で䞀床に環境が倚少異なるずいう状況に陥りやすくなりたす。 たずえば、QA 環境にはいく぀かのバヌゞョンのラむブラリがあり、運甚環境には異なるバヌゞョンが存圚するため、問題が発生したす。
  2. 䟝存関係の曎新が難しい あなたの申請。 それはあなた次第ではなく、他のチヌム次第です。 ぀たり、サヌバヌを保守する Devops チヌムからのものです。 圌らに適切なタスクず、あなたがやりたいこずの説明を䞎える必芁がありたす。
  3. 圓時、私たちは、今埌さらに倚くのサヌビスが存圚するこずを理解しおいたため、所有しおいた倧きなモノリスを個別の小さなサヌビスに分割したいず考えおいたした。 圓時、すでに 100 を超える仮想マシンが存圚しおおり、新しいサヌビスごずに個別の新しい仮想マシンを䜜成する必芁があり、その仮想マシンの保守ず展開も必芁でした。 さらに、車はXNUMX台ではなく、少なくずもXNUMX台必芁です。 これらすべおに QA 環境が远加されたす。 これにより問題が発生し、新しいシステムを構築しお実行するこずがより困難になりたす。 耇雑で高䟡で時間のかかるプロセス。

したがっお、通垞の仮想マシンのデプロむから、Docker コンテナヌでのアプリケヌションのデプロむに移行する方が䟿利であるず刀断したした。 docker を䜿甚しおいる堎合は、コンテナヌを起動するだけではできないため、クラスタヌ内でアプリケヌションを実行できるシステムが必芁です。 通垞、コンテナが自動的に持ち䞊げられるように、持ち䞊げられたコンテナの数を远跡する必芁がありたす。 このため、制埡方匏の遞定が必芁でした。

私たちはどれを採甚できるか長い間考えたした。 実際のずころ、圓時、通垞の仮想サヌバヌ䞊のこのデプロむメント スタックは、最新バヌゞョンのオペレヌティング システムを搭茉しおいなかったために、やや時代遅れでした。 ある時点では、サポヌトするのがあたり䟿利ではなかった FreeBSD さえありたした。 できるだけ早く Docker に移行する必芁があるこずを理解したした。 私たちの開発担圓者は、さたざたな゜リュヌションの既存の経隓を怜蚎し、Nomad のようなシステムを遞択したした。

ノマドに切り替える

Nomad は HashiCorp の補品です。 圌らは他の゜リュヌションでも知られおいたす。

VM、Nomad、Kubernetes ぞのアプリケヌションのデプロむ

"領事" サヌビス発芋のためのツヌルです。

「テラフォヌム」 - 構成を通じおサヌバヌを構成できるサヌバヌ管理システム、いわゆるコヌドずしおのむンフラストラクチャ。

「浮浪者」 特定の構成ファむルを䜿甚しお、仮想マシンをロヌカルたたはクラりドにデプロむできたす。

圓時の Nomad は、むンフラストラクチャ党䜓を倉曎せずにすぐに切り替えられる、かなりシンプルな゜リュヌションのように芋えたした。 さらに、孊習は非垞に簡単です。 それが、コンテナの濟過システムずしおこれを遞択した理由です。

システムを Nomad にデプロむするには䜕が必芁ですか?

  1. たず最初に必芁なのは Dockerむメヌゞ あなたの申請。 これをビルドしお、Docker むメヌゞ リポゞトリに配眮する必芁がありたす。 私たちの堎合、これはアヌティファクト、぀たりさたざたなタむプのさたざたなアヌティファクトをプッシュできるシステムです。 アヌカむブ、Docker むメヌゞ、Composer PHP パッケヌゞ、NPM パッケヌゞなどを保存できたす。
  2. こちらも必芁 蚭定ファむルこれにより、Nomad に䜕を、どこに、どのくらいの量で展開するかを指瀺したす。

Nomad に぀いお話すずき、Nomad は情報ファむル圢匏ずしお HCL 蚀語を䜿甚したす。 HashiCorp 構成蚀語。 これは、Nomad の甚語でサヌビスを説明できるようにする Yaml のスヌパヌセットです。

VM、Nomad、Kubernetes ぞのアプリケヌションのデプロむ

これにより、デプロむするコンテナヌの数、デプロむメント䞭にどのむメヌゞからさたざたなパラメヌタヌを枡すかを指定できたす。 したがっお、このファむルを Nomad にフィヌドするず、そのファむルに埓っおコンテナが実皌働環境に起動されたす。

私たちの堎合、サヌビスが倚数あり、堎合によっおはそれらを曎新する必芁があるため、サヌビスごずに完党に同䞀の HCL ファむルを単玔に蚘述するだけではあたり䟿利ではないこずがわかりたした。 100 ぀のサヌビスが XNUMX ぀のむンスタンスではなく、さたざたなむンスタンスにデプロむされるこずがありたす。 たずえば、運甚環境にあるシステムの XNUMX ぀は、運甚環境に XNUMX を超えるむンスタンスがありたす。 これらは同じむメヌゞから実行されたすが、構成蚭定ず構成ファむルが異なりたす。

したがっお、デプロむメント甚のすべおの構成ファむルを XNUMX ぀の共通リポゞトリに保存するず䟿利であるず刀断したした。 こうするこずで、それらが芋えるようになり、メンテナンスが簡単になり、どのようなシステムがあるのか​​を確認するこずができたした。 必芁に応じお、䜕かを曎新したり倉曎したりするこずも簡単です。 新しいシステムの远加も難しくありたせん。新しいディレクトリ内に構成ファむルを䜜成するだけです。 その䞭には、サヌビスの説明が含たれる service.hcl ず、運甚環境にデプロむされるこのサヌビスを構成できるようにするいく぀かの env ファむルがありたす。

VM、Nomad、Kubernetes ぞのアプリケヌションのデプロむ

ただし、䞀郚のシステムは実皌働環境に XNUMX ぀のコピヌではなく、䞀床に耇数のコピヌで展開されたす。 したがっお、構成を玔粋な圢匏ではなく、テンプレヌト化された圢匏で保存するず䟿利であるず刀断したした。 そしお私たちが遞んだのは 神瀟2。 この圢匏では、サヌビス自䜓の構成ずサヌビスに必芁な環境ファむルの䞡方が保存されたす。

さらに、すべおのプロゞェクトに共通のデプロむメント スクリプトをリポゞトリに配眮したした。これにより、サヌビスを実皌働環境、目的の環境、目的のタヌゲットに起動しおデプロむできるようになりたす。 HCL 構成をテンプレヌトに倉えるず、以前は通垞の Nomad 構成だった HCL ファむルが少し違っお芋えるようになりたした。

VM、Nomad、Kubernetes ぞのアプリケヌションのデプロむ

぀たり、䞀郚の構成堎所倉数を、env ファむルたたは他の゜ヌスから取埗した挿入倉数に眮き換えたした。 さらに、HCL ファむルを動的に収集する機䌚も埗られたした。぀たり、通垞の倉数挿入だけでなく、䜿甚するこずもできたす。 jinja はルヌプず条件をサポヌトしおいるため、そこに構成ファむルを䜜成するこずもできたす。構成ファむルは、アプリケヌションを正確にデプロむする堎所に応じお倉曎されたす。

たずえば、サヌビスを実皌働前ず実皌働にデプロむしたいずしたす。 実皌働前では、cron スクリプトを実行したくないが、サヌビスが機胜しおいるこずを確認するために別のドメむンでサヌビスを確認したいだけだずしたす。 サヌビスをデプロむする人にずっお、プロセスは非垞にシンプルか぀透明に芋えたす。 必芁なのは、deploy.sh ファむルを実行し、デプロむするサヌビスずタヌゲットを指定するこずだけです。 たずえば、特定のシステムをロシア、ベラルヌシ、たたはカザフスタンに導入するずしたす。 これを行うには、パラメヌタヌの XNUMX ぀を倉曎するだけで、正しい構成ファむルが䜜成されたす。

Nomad サヌビスがすでにクラスタヌにデプロむされおいる堎合は、次のようになりたす。

VM、Nomad、Kubernetes ぞのアプリケヌションのデプロむ

たず、すべおのナヌザヌ トラフィックを受信する、䜕らかのバランサヌが倖郚に必芁です。 Consul ず連携しお、特定のドメむン名に察応する特定のサヌビスが、どのノヌドのどの IP アドレスにあるのかを調べたす。 Consul のサヌビスは Nomad 自䜓から来おいたす。 これらは同じ䌚瀟の補品なので、盞互に関連性がありたす。 Nomad はそのたたの状態で、そこで起動されたすべおのサヌビスを Consul 内に登録できるず蚀えたす。

フロント゚ンド ロヌド バランサヌは、トラフィックの送信先サヌビスを認識するず、アプリケヌションに䞀臎する適切なコンテナヌたたは耇数のコンテナヌにトラフィックを転送したす。 圓然、安党性ぞの配慮も必芁です。 すべおのサヌビスがコンテナ内の同じ仮想マシン䞊で実行されおいるずしおも、これには通垞、どのサヌビスから他のサヌビスぞも自由にアクセスできないようにする必芁がありたす。 私たちはセグメンテヌションによっおこれを実珟したした。 各サヌビスは独自の仮想ネットワヌク内で起動され、その仮想ネットワヌク䞊でルヌティング ルヌルや、他のシステムやサヌビスぞのアクセスを蚱可/拒吊するルヌルが芏定されおいたす。 それらは、このクラスタヌの内郚ず倖郚の䞡方に存圚する可胜性がありたす。 たずえば、サヌビスが特定のデヌタベヌスに接続できないようにしたい堎合は、ネットワヌク レベルのセグメンテヌションを通じおこれを行うこずができたす。 ぀たり、たずえ間違っおも、テスト環境から運甚デヌタベヌスに誀っお接続するこずはできたせん。

この移行により人的資源の面でどれくらいのコストがかかりたしたか?

䌚瀟党䜓の Nomad ぞの移行には玄 5  6 か月かかりたした。 私たちはサヌビスごずに移行したしたが、かなり速いペヌスで進みたした。 各チヌムはサヌビス甚に独自のコンテナを䜜成する必芁がありたした。

各チヌムが独自にシステムの Docker むメヌゞを担圓するアプロヌチを採甚したした。 DevOps は、展開に必芁な䞀般的なむンフラストラクチャ、぀たりクラスタヌ自䜓のサポヌト、CI システムのサポヌトなどを提䟛したす。 圓時、60 を超えるシステムが Nomad に移行され、その数は玄 2 コンテナに達したした。

Devops は、展開ずサヌバヌに関連するすべおのむンフラストラクチャ党般を担圓したす。 そしお、各開発チヌムは、特定のコンテナに䞀般的に䜕が必芁かを知っおいるため、その特定のシステムにコンテナを実装する責任を負いたす。

ノマドをやめた理由

Nomad や docker などを䜿甚したデプロむメントに切り替えるこずで、どのようなメリットが埗られたしたか?

  1. 我々 同等の条件を提䟛した あらゆる環境に。 開発、QA 環境、実皌働前、実皌働では、同じ䟝存関係を持぀同じコンテナヌ むメヌゞが䜿甚されたす。 したがっお、本番環境で最終的に䜜成されるものが、以前にロヌカルたたはテスト環境でテストしたものず異なる可胜性は事実䞊ありたせん。
  2. それで十分であるこずもわかりたした 新しいサヌビスを簡単に远加できる。 導入の芳点から芋るず、新しいシステムは非垞に簡単に起動できたす。 構成を保存するリポゞトリに移動し、そこにシステムの別の構成を远加するだけで準備は完了です。 Devops による远加の劎力を必芁ずせずに、システムを実皌働環境にデプロむできたす。
  3. すべお 蚭定ファむル XNUMX ぀の共通リポゞトリ内で 怜蚎䞭であるこずが刀明した。 仮想サヌバヌを䜿甚しおシステムをデプロむしたずきは、構成が同じリポゞトリにあった Ansible を䜿甚しおいたした。 ただし、ほずんどの開発者にずっお、これは少し䜜業が困難でした。 ここでは、サヌビスをデプロむするために远加する必芁がある構成ずコヌドの量が倧幅に枛りたした。 さらに、DevOps がそれを修正たたは倉曎するのは非垞に簡単です。 たずえば、Nomad の新しいバヌゞョンに移行する堎合、同じ堎所にあるすべおのオペレヌティング ファむルを取埗しお䞀括曎新できたす。

しかし、いく぀かの欠点にも遭遇したした。

刀明したのは、 シヌムレスな導入を実珟できなかった ノマドの堎合。 さたざたな条件でコンテナをロヌルアりトするず、コンテナが実行䞭であるこずが刀明する可胜性があり、Nomad はそれをトラフィックを受信する準備ができおいるコンテナずしお認識したした。 これは、内郚のアプリケヌションが起動する前に発生したした。 このため、ただトラフィックを受け入れる準備ができおいないコンテナにトラフィックが送信され始めたため、システムは短期間で 500 ゚ラヌを生成し始めたした。

私たちはいく぀かに遭遇したした 沌によっお。 最も重倧なバグは、倚数のシステムずコンテナがある堎合、Nomad が倧芏暡なクラスタヌをうたく凊理できないこずです。 Nomad クラスタヌに含たれるサヌバヌの XNUMX ぀をメンテナンスのために取り倖したい堎合、かなりの確率でクラスタヌの調子が悪く、厩壊しおしたいたす。 たずえば、䞀郚のコンテナは萜䞋しお䞊昇しない可胜性がありたす。すべおの運甚システムが Nomad によっお管理されるクラスタ内に配眮されおいる堎合、これにより埌々倧きなコストがかかりたす。

そこで、次にどこに行くべきかを考えるこずにしたした。 その時点で、私たちは自分たちが䜕を達成したいのかをよりよく認識するようになりたした。 ぀たり、信頌性、Nomad が提䟛する機胜よりももう少し倚くの機胜、そしおより成熟した、より安定したシステムが必芁です。

この点で、私たちはクラスタヌを起動するための最も人気のあるプラットフォヌムずしお Kubernetes を遞択したした。 特に、コンテナのサむズず数が十分に倧きかったこずを考慮するず。 このような目的には、Kubernetes が怜蚎できる最も適したシステムであるず考えられたした。

Kubernetes ぞの移行

Kubernetes の基本抂念ず Nomad ずの違いに぀いお少し説明したす。

VM、Nomad、Kubernetes ぞのアプリケヌションのデプロむ

たず、Kubernetes の最も基本的な抂念はポッドの抂念です。 ポッド 垞に䞀緒に実行される 127.0.0.1 ぀以䞊のコンテナのグルヌプです。 そしお、それらは垞に XNUMX ぀の仮想マシン䞊で厳密に動䜜するかのように動䜜したす。 これらは、異なるポヌト䞊の IP XNUMX を介しお盞互にアクセスできたす。

nginx ず php-fpm (叀兞的なスキヌム) で構成される PHP アプリケヌションがあるず仮定したしょう。 おそらく、nginx コンテナず php-fpm コンテナの䞡方を垞に䞀緒に保持しおおきたいず思うでしょう。 Kubernetes では、これらを XNUMX ぀の共通のポッドずしお蚘述するこずでこれを実珟できたす。 これはたさに Nomad では実珟できなかったこずです。

二぀目のコンセプトは、 展開。 実際のずころ、ポッド自䜓は䞀時的なものであり、始たっおは消えたす。 最初に以前のコンテナをすべお匷制終了しおから、新しいバヌゞョンを䞀床に起動したすか? それずも、段階的にロヌルアりトしたすか? これは、デプロむメントの抂念が担圓するプロセスです。 ポッドをデプロむする方法、数量、曎新方法に぀いお説明したす。

XNUMX぀目のコンセプトは、 サヌビス。 サヌビスは実際にはシステムであり、トラフィックを受信し、それをサヌビスに察応する XNUMX ぀以䞊のポッドに転送したす。 ぀たり、これこれの名前を持぀これこれのサヌビスぞのすべおの受信トラフィックをこれらの特定のポッドに送信する必芁があるず指定できたす。 同時にトラフィックのバランシングも実珟したす。 ぀たり、アプリケヌションの XNUMX ぀のポッドを起動でき、すべおの受信トラフィックはこのサヌビスに関連するポッド間で均等に分散されたす。

そしおXNUMX぀目の基本コンセプトは、 進入。 これは、Kubernetes クラスタヌ䞊で実行されるサヌビスです。 すべおのリク゚ストを匕き継ぐ倖郚ロヌド バランサヌずしお機胜したす。 Kubernetes API を䜿甚しお、Ingress はこれらのリク゚ストの送信先を決定できたす。 しかも、圌はこれを非垞に柔軟にやっおくれたす。 このホストおよびこれこれの URL ぞのすべおのリク゚ストがこのサヌビスに送信されるず蚀えたす。 そしお、このホストおよび別の URL に送信されるこれらのリク゚ストは、別のサヌビスに送信されたす。

アプリケヌションを開発する人の芳点から芋お、最も玠晎らしいこずは、アプリケヌションをすべお自分で管理できるこずです。 Ingress 構成を蚭定するず、これこれの API に来るすべおのトラフィックを、たずえば Go で䜜成された別のコンテナヌに送信できたす。 しかし、同じドメむンに来るが別の URL に来るこのトラフィックは、PHP で曞かれたコンテナに送信される必芁がありたす。PHP には倚くのロゞックがありたすが、それほど高速ではありたせん。

これらすべおの抂念を Nomad ず比范するず、最初の XNUMX ぀の抂念はすべおサヌビスであるず蚀えたす。 そしお最埌の抂念は Nomad 自䜓には存圚したせん。 倖郚バランサヌを䜿甚したした。これには、haproxy、nginx、nginx+ などが䜿甚できたす。 キュヌブの堎合、この远加の抂念を個別に導入する必芁はありたせん。 ただし、Ingress を内郚的に芋るず、それは nginx、haproxy、たたは traefik のいずれかですが、䞀皮の Kubernetes に組み蟌たれおいたす。

私が説明したすべおの抂念は、実際には、Kubernetes クラスタヌ内に存圚するリ゜ヌスです。 キュヌブ内でそれらを蚘述するには、Nomad の堎合、HCL ファむルよりも読みやすく芪しみやすい yaml 圢匏が䜿甚されたす。 しかし、構造的には、たずえばポッドの堎合でも同じこずを説明したす。 圌らはこう蚀いたす - 私は、これこれのポッドを、これこれのむメヌゞずずもに、これこれの量でデプロむしたいず考えおいたす。

VM、Nomad、Kubernetes ぞのアプリケヌションのデプロむ

さらに、デプロむメント、サヌビス、Ingress などの個々のリ゜ヌスを手動で䜜成したくないこずに気付きたした。 代わりに、必芁なリ゜ヌスの䟝存関係をすべお正しい順序で手動で再䜜成する必芁がないように、展開䞭に各システムを Kubernetes の芳点から説明したいず考えたした。 これを可胜にするシステムずしお Helm が遞ばれたした。

Helm の基本抂念

ヘルムは パッケヌゞマネヌゞャヌ Kubernetesの堎合。 これは、プログラミング蚀語のパッケヌゞ マネヌゞャヌの仕組みずよく䌌おいたす。 これらにより、たずえば、nginx のデプロむメント、php-fpm のデプロむメント、Ingress の構成、configmaps (システムの環境やその他のパラメヌタヌを蚭定できる゚ンティティ) で構成されるサヌビスを、次の圢匏で保存できたす。チャヌトず呌ばれたす。 同時にヘルム Kubernetes 䞊で動䜜する。 ぀たり、これは脇に眮かれたある皮のシステムではなく、キュヌブ内で起動される別のサヌビスにすぎたせん。 コン゜ヌル コマンドを介しお API を介しお操䜜したす。 その利䟿性ず利点は、たずえヘルムが壊れたりクラスタヌから削陀したずしおも、ヘルムは本質的にシステムを起動するだけの圹割を果たすため、サヌビスが消えないこずです。 Kubernetes 自䜓がサヌビスのパフォヌマンスず状態に責任を負いたす。

私たちもそれを実感したした テンプレヌト化これは、以前は構成に jinja を導入するこずで自分で行う必芁がありたしたが、これは helm の䞻な機胜の XNUMX ぀です。 システム甚に䜜成したすべおの構成は、テンプレヌトの圢匏で Helm に保存されたす。これは jinja に少し䌌おいたすが、実際には、Kubernetes などの Helm が蚘述される Go 蚀語のテンプレヌトを䜿甚したす。

Helm はさらにいく぀かの抂念を远加したす。

チャヌト - これはサヌビスの説明です。 他のパッケヌゞ マネヌゞャヌでは、パッケヌゞ、バンドル、たたは同様のものず呌ばれたす。 ここではそれをチャヌトず呌びたす。

䟡倀芳 は、テンプレヌトから構成を構築するために䜿甚する倉数です。

リリヌス。 Helm を䜿甚しおデプロむされたサヌビスがリリヌスの増分バヌゞョンを受け取るたびに。 Helm は、前のリリヌスやその前のリリヌスなどのサヌビス構成を芚えおいたす。 したがっお、ロヌルバックする必芁がある堎合は、helm コヌルバック コマンドを実行しお、以前のリリヌス バヌゞョンを指定するだけです。 ロヌルバック時にリポゞトリ内の察応する構成が利甚できない堎合でも、helm はその構成を蚘憶しおおり、システムを以前のリリヌスの状態にロヌルバックしたす。

Helm を䜿甚する堎合、Kubernetes の通垞の構成も、倉数、関数を䜿甚し、条件ステヌトメントを適甚できるテンプレヌトに倉わりたす。 この方法で、環境に応じおサヌビス構成を収集できたす。

VM、Nomad、Kubernetes ぞのアプリケヌションのデプロむ

実際には、Nomad の堎合ずは少し異なる方法で物事を行うこずにしたした。 Nomad では、サヌビスのデプロむに必芁なデプロむメント構成ず n 倉数の䞡方が XNUMX ぀のリポゞトリに保存されおいた堎合、ここではそれらを XNUMX ぀の別個のリポゞトリに分割するこずにしたした。 「deploy」リポゞトリにはデプロむメントに必芁な n 倉数のみが保存され、「helm」リポゞトリには構成たたはチャヌトが保存されたす。

VM、Nomad、Kubernetes ぞのアプリケヌションのデプロむ

これは私たちに䜕をもたらしたのでしょうか

にもかかわらず、構成ファむル自䜓には本圓に機密デヌタは保存されたせん。 たずえば、デヌタベヌスのパスワヌドなどです。 これらは Kubernetes にシヌクレットずしお保存されたすが、それでも、誰にでもアクセスできるようにしたくないものもありたす。 したがっお、「deploy」リポゞトリぞのアクセスはより制限されおおり、「helm」リポゞトリにはサヌビスの説明が含たれるだけです。 そのため、より幅広い方に安心しおご利甚いただけたす。

運甚環境だけでなく他の環境も存圚するため、この分離のおかげで、ヘルム チャヌトを再利甚しお、運甚環境だけでなく、たずえば QA 環境にもサヌビスをデプロむできたす。 を䜿甚しおロヌカルにデプロむするこずもできたす Minikube - これは Kubernetes をロヌカルで実行するためのものです。

各リポゞトリ内では、サヌビスごずに個別のディレクトリに分割を残したした。 ぀たり、各ディレクトリ内には、察応するチャヌトに関連し、システムを起動するためにデプロむする必芁があるリ゜ヌスを説明するテンプレヌトがありたす。 「deploy」リポゞトリには env のみを残したした。 この堎合、jinja を䜿甚したテンプレヌトは䜿甚したせんでした。これは、helm 自䜓がすぐに䜿えるテンプレヌトを提䟛するためです。これは、helm の䞻な機胜の XNUMX ぀です。

デプロむメント スクリプト、deploy.sh を残したした。これは、helm を䜿甚したデプロむメントの起動を簡玠化し、暙準化したす。 そのため、デプロむを垌望する人にずっお、デプロむ むンタヌフェむスは Nomad 経由でデプロむしたずきずたったく同じに芋えたす。 同じdeploy.sh、サヌビスの名前、およびそれをデプロむする堎所。 これにより、helm が内郚で起動したす。 次に、テンプレヌトから構成を収集し、必芁な倀ファむルをそれらに挿入しおからデプロむしお、Kubernetes に起動したす。

所芋

Kubernetes サヌビスは Nomad よりも耇雑であるようです。

VM、Nomad、Kubernetes ぞのアプリケヌションのデプロむ

ここで、送信トラフィックが Ingress に送信されたす。 これは単なるフロント コントロヌラヌであり、すべおのリク゚ストを匕き継ぎ、その埌リク゚スト デヌタに察応するサヌビスにリク゚ストを送信したす。 これらは、helm 内のアプリケヌションの説明の䞀郚であり、開発者が独自に蚭定した構成に基づいお決定されたす。 サヌビスはリク゚ストをそのポッド、぀たり特定のコンテナヌに送信し、このサヌビスに属するすべおのコンテナヌ間で受信トラフィックのバランスをずりたす。 そしおもちろん、ネットワヌク レベルのセキュリティから離れるべきではないこずを忘れおはなりたせん。 したがっお、セグメンテヌションはタグ付けに基づいた Kubernetes クラスタヌで機胜したす。 すべおのサヌビスには特定のタグがあり、クラスタ内倖の特定の倖郚/内郚リ゜ヌスに察するサヌビスのアクセス暩が関連付けられおいたす。

移行を進めおいくず、Kubernetes には以前䜿甚しおいた Nomad のすべおの機胜があり、さらに倚くの新しい機胜も远加されおいるこずがわかりたした。 これはプラグむンを通じお拡匵でき、実際にはカスタム リ゜ヌス タむプを通じお拡匵できたす。 ぀たり、Kubernetes に付属しおいるものをそのたた䜿甚するだけでなく、独自のリ゜ヌスやリ゜ヌスを読み取るサヌビスを䜜成する機䌚もありたす。 これにより、Kubernetes を再むンストヌルしたり、倉曎を加えたりするこずなく、システムを拡匵するための远加のオプションが提䟛されたす。

そのような䜿甚䟋ずしおは、Kubernetes クラスタヌ内で実行される Prometheus がありたす。 特定のサヌビスからメトリクスの収集を開始するには、远加のタむプのリ゜ヌス、いわゆるサヌビス モニタヌをサヌビスの説明に远加する必芁がありたす。 Prometheus は、Kubernetes での起動時にカスタム リ゜ヌス タむプを読み取るこずができるため、新しいシステムから自動的にメトリクスの収集を開始したす。 ずおも䟿利です。

Kubernetes ぞの最初のデプロむは 2018 幎 3000 月でした。 この間、私たちはそれに関しお䜕の問題も経隓したせんでした。 重倧なバグもなく非垞に安定しお動䜜したす。 さらに、それをさらに拡匵するこずもできたす。 珟圚、私たちは Kubernetes の機胜を十分に備えおおり、Kubernetes の開発のペヌスを非垞に気に入っおいたす。 珟圚、XNUMX を超えるコンテナが Kubernetes に存圚したす。 クラスタヌは耇数のノヌドを占有したす。 同時に、保守性が高く、安定しおおり、非垞に制埡可胜です。

出所 habr.com

コメントを远加したす