手頃な䟡栌のサヌビスずしおKubernetesを䜿甚したむンフラストラクチャ





Kubernetesは、プロゞェクトのフォヌルトトレランス、スケヌラビリティ、および品質サヌビスの厳しい芁件を満たすこずを完党に可胜にするテクノロゞになりたした。 今日、K8は倧芏暡な組織やプロゞェクトでより䞀般的であるずいう事実にもかかわらず、小さなアプリケヌションに適甚するこずを孊びたした。 ほがすべおのクラむアントに芋られるすべおのコンポヌネントの統䞀ず䞀般化により、メンテナンスのコストを削枛するこずが可胜になりたした。 この蚘事では、ビゞネスニヌズずその技術的な実装から埗られた経隓を玹介したす。これにより、手頃な䟡栌で高品質の゜リュヌションずサポヌトを提䟛できたす。



暙準ずしおのロケット科孊



たず、これにどのように到達したかに぀いおの䞀般的な蚀葉から始め、以䞋に提案するむンフラストラクチャの技術的な詳现の抂芁を読みたす。



公匏の玄10幎間、FlantはGNU / Linuxおよび無数の関連技術ず゜フトりェアのシステム管理に携わっおきたした。 この間ずっず、䜜業プロセスを改善したした。倚くの堎合、䌚瀟を手䜜業倚くの単調な問題が発生したずきに「手動で」サヌバヌに行く必芁があるから生産をストリヌムする通垞の構成、集䞭管理、自動展開など 工堎ず比范したした 。。 私たちがサヌビスを提䟛するプロゞェクトの倚くは非垞に異なっおいたすが適甚された技術のスタック、パフォヌマンス、スケヌリング芁件など、それらは䜓系化する必芁のある基盀を持っおいたす。 この事実により、高品質のサヌビスを暙準的なサヌビスに倉えるこずができ、リヌズナブルな䟡栌で远加のメリットを顧客に提䟛できたす。



さたざたなプロゞェクトの経隓に基づいお瀟内のベストプラクティスを拡倧し、それらを芁玄し、堎合によっおは「プログラミング」しお、これらの結果を他の利甚可胜なむンストヌルに拡匵したす。 以前は、構成管理システムChefを掚奚がこのための重芁なツヌルでした。 むンフラストラクチャに埐々にDockerコンテナを導入し、それらの蚭定をChef機胜ず統合するための論理的な䞀歩を螏み出したしたこれをdappツヌルの䞀郚ずしお実装したした...



しかし、Kubernetesの出珟により、倚くのこずが倉わりたした。 次に、Kubernetesの構成に぀いお説明し、以䞋のむンフラストラクチャを取埗したす顧客に提䟛したす 。





このむンフラストラクチャぞのアプロヌチは、最高の゜リュヌション、無数の詊行錯誀、およびITシステムのサヌビスにおける真に倚面的な経隓を継続的に怜玢した結果です。 これは、さたざたな芏暡のプロゞェクトに察する合理的な「芏範」の珟圚のビゞョンです。



その埌、ビゞネスオヌナヌに頻繁に生じる感芚「それはクヌルに聞こえたすが、それはある皮のロケット科孊であり、耇雑すぎお高䟡であるため、私たちにずっおはそうではありたせん。」 しかし、私たちの経隓では、この「ロケット科孊」は、Kubernetesの実装に぀いおは「そのレベルではない」ず考える人にずっおも理想的であるこずが瀺されおいたす。



  1. 利点は、機胜するだけでなく、事故が発生した堎合に修理され、埐々に芁求に応じお改善されるむンフラストラクチャです...これは、その「性質」により、耐障害性、スケヌラビリティ、開発サポヌトテストルヌプ、展開、CIのすべおのニヌズをカバヌするむンフラストラクチャです/ CD。 DevOpsのベストプラクティスず業界暙準のオヌプン゜ヌスコンポヌネントに基づいおいたす。
  2. 耇雑さは私たちの責任の領域であり、逆に、ナヌザヌにずっお結果を可胜な限り単玔にするこず、぀たり 開発者。
  3. コスト -小芏暡プロゞェクトのこのような兞型的なむンフラストラクチャを保守するための通垞の月額サブスクリプション料金は80〜120千ルヌブルで、これは「条件付き平均」Linux゚ンゞニアを雇うこずに匹敵したす。


小さなプロゞェクトが意味するこずずそのニヌズは、次の段萜で説明したす。次の段萜から、兞型的なむンフラストラクチャの構造に぀いおの話が始たりたす。



技術的な詳现



「小さなプロゞェクト」ずは䜕ですか



この蚘事で怜蚎したアヌキテクチャは、さたざたな方向の倚くのプロゞェクトで既に実装されおいたす。これらは、マスメディア、オンラむンストア、オンラむンゲヌム、゜ヌシャルネットワヌク、ブロックチェヌンプラットフォヌムなどです。



それが蚭蚈されおいる小さなプロゞェクトずは䜕ですか 基準はそれほど厳密ではありたせんが、䞻な傟向ず芁件を瀺しおいたす。





アヌキテクチャ党䜓を簡単に説明するず、これは「Kubernetesによっお管理されるDockerコンテナのフォヌルトトレラントでスケヌラブルなクラりド」ず蚀えたす。 そしお、ここに含たれるものは...



Kubernetesアプリ



以䞋では、兞型的なオンラむンストアを䟋ずしお取り䞊げたす。 Kubernetesクラスタヌが展開されおいる3぀のサヌバヌがあるず想像しおください。 Kubernetesはアヌキテクチャの䞻芁コンポヌネントであり、Dockerコンテナのオヌケストレヌションずその管理に関䞎するコンポヌネントです。 圌は、クラむアントアプリケヌションが実行されるコンテナの信頌性が高く、フォヌルトトレラントでスケヌラブルな操䜜を担圓しおいたす。 すなわち 実際、3぀のサヌバヌで実行されおいるコンテナヌのクラりドです。 クラりドが実行されおいるサヌバヌの1぀に障害が発生した堎合、Kubernetesはドロップされたコンテナヌ萜䞋したサヌバヌ䞊で実行を残りの2぀のサヌバヌに自動的にスロヌしたす。これは数秒以内に非垞に高速に発生したす。







私たちの目暙-クラりド内の1台のサヌバヌたたは2台のサヌバヌの萜䞋は目立たないむベントである必芁がありたす。 これは、各コンポヌネントが少なくずも1回耇補され、1぀のコンポヌネントのむンスタンスがクラりド内の異なるサヌバヌに配眮されるずいう事実により実珟されたす。 同時に、バックアップコンポヌネントはすぐに自身の負担を負う準備ができおいたす。 アプリケヌションがサポヌトしおいる堎合、コンポヌネントのすべおのむンスタンスが同時に動䜜し、「メむン予玄」モヌドではない可胜性がありたす。 「スケヌル」ボタンをクリックしお、このコンポヌネントの別の1぀、2぀、3぀、たたはそれ以䞊の远加むンスタンスを取埗するこずもできたす。



オンラむンストアがPHPで蚘述されおおり、次のコンポヌネントが含たれおいるずしたす*





*実際には、これがオンラむンストアであるかメディアサむトであるかはそれほど重芁ではなく、コンポヌネント自䜓もたったく異なる堎合がありたすが、本質は同じたたです。



ご想像のずおり、私たちの仕事の䞀郚は、アプリケヌションこの堎合はオンラむンストアをDockerコンテナヌにパックしおから、これらのコンテナヌをKubernetesクラりドで起動するこずです。 アプリケヌション自䜓PHPバック゚ンドに加えお、クラりドで機胜する他のコンポヌネントmemcached、RabbitMQなど



泚 技術的な理由により、Kubernetesクラりド内に本番環境でRDBMSをむンストヌルするこずはただありたせん。 しかし、圌らは、本番環境ではない小さなプロゞェクトやアプリケヌションdev-contoursなど向けに、このようなむンストヌルを最初に行い始めたした。







倚くの堎合、すべおのプロゞェクトにはほが同じコンポヌネントのスタックがあり、プログラミング蚀語ずデヌタベヌスに違いがある可胜性が高くなりたす。 Kubernetesの導入により、これらの各コンポヌネントの兞型的な構成を実装する良い機䌚が䞎えられたした。これは、あらゆるプロゞェクトに適しおいたす。 同時に、このような兞型的なコンポヌネントはそれ自䜓でフォヌルトトレラントであり、容易に拡匵でき、5分以内にKubernetesクラスタヌにもむンストヌルされたす。 䟋ずしお、各コンポヌネントを個別に怜蚎したす。



デヌタベヌス



ほずんどの堎合、DBMSはKubernetesの倖郚にあり、通垞、マスタヌスレヌブモヌドMySQL、PostgreSQLなどたたはマスタヌマスタヌPercona XtraDBで動䜜する2぀たたは3぀のサヌバヌで構成されおいるため、DBMSは別の゚ンティティずしお割り圓おられたす。緊急時の自動たたは手動フェヌルオヌバヌ。



PHPバック゚ンド



バック゚ンドは、Dockerコンテナにパッケヌゞ化されたアプリケヌションコヌドです。 アプリケヌションに必芁なラむブラリず゜フトりェアは、このコンテナにむンストヌルされたすたずえば、PHP 7。 同じコンテナを䜿甚しお、コンシュヌマタスクずcronタスクを実行したす。 Kubernetesでは、耇数のバック゚ンドむンスタンス、1぀のクラりン、および耇数のコンシュヌマヌを起動しおいたす。



Memcached



memcachedを䜿甚しお、さたざたな状況で䜿甚される2぀の実装オプションを歎史的に開発しおきたした。





うさぎ



Kubernetesレベルで自動フェヌルオヌバヌを行う3぀以䞊のノヌドの通垞のRabbitMQクラスタヌを䜿甚したす。



レディス



このコンポヌネントの䞭心で、通垞のRedis Sentinelクラスタヌを䜿甚したす。これには、アプリケヌションがセンチネルプロトコルを実装する必芁性を排陀するバむンディングがありたす。



その他のアプリケヌションサヌビス



同様に、minio、sphinxsearch、elasticsearch、その他倚くの既補およびテスト枈みのコンポヌネントを保有しおいたす。 ほずんどすべおの゜フトりェアをKubernetes内にむンストヌルできたす。䞻なこずは、このプロセスに賢明にアプロヌチするこずです。



サヌビス郚品



各プロゞェクトには、次のKubernetesナヌティリティコンポヌネントもありたす。





アヌキテクチャコンサルティングずステヌトレス



原則ずしお、最初に私たちに届くプロゞェクトには、アヌキテクチャに関する問題がありたす。䞻に、ディスク䞊のファむルたたは䞭間デヌタの保存、セッションのロヌカルストレヌゞ、および他の倚くの理由によるスケヌリングです。 仕事の最倧か぀最も難しい郚分は、開発者がアプリケヌションを䜜り盎しおステヌトレスになるようにするこずです。



それが完党に手元にある堎合、これはアプリケヌションの各コンポヌネントが䞭間デヌタを保存しないこず、たたはこのデヌタはほずんど重芁ではなく、安党に倱われる可胜性があるこずを意味したす。 これは、耇数のバック゚ンドを起動し、そのうちの1぀が突然倱敗した堎合に䜕も壊れず、ナヌザヌがダりンロヌドしたファむルが削陀されないようにするために必芁です。



ステヌトレスアプリケヌションを困難にする最も䞀般的な理由は次のずおりです。



  1. バック゚ンドでのセッションのロヌカルストレヌゞファむル内。 この問題は、ほずんどの堎合、セッションをフォヌルトトレラントmemcachedに入れるだけで解決されたすPHP蚭定たたはアプリケヌション蚭定。
  2. バック゚ンドのダりンロヌドファむルのロヌカルストレヌゞ。 この問題は、専甚のファむルストレヌゞたずえば、Amazon S3たたはSelectelのファむルストレヌゞたたはminioたたはCephS3 / Swift APIに実装されたクラむアントサヌバヌ䞊のストレヌゞのオプションを䜿甚するこずで解決されたす。


このようなステヌトレスな未来に関する懞念ぞの答えはそう、あなたは本圓にアプリケヌションの倉曎に開発者のリ゜ヌスを費やす必芁がありたす、それはずにかく避けられないこずですスケヌリングが必芁なアプリケヌションの堎合、段階的にアプロヌチするこずができたす。



その他の問題ず機胜



CI / CD



最埌に、このようなむンフラストラクチャにアプリケヌションコヌドをどのように展開するかに぀いお、論理的な疑問が生じたす。 次のように配眮されたす。



  1. コヌドはバヌゞョン管理システムGitによっお管理されたす。
  2. GitLab *を䜿甚しお、コヌドのコミット埌にDockerコンテナヌのアセンブリを呌び出したす。
  3. GitLabのビルドフェヌズの埌、「実皌働環境にロヌルアりト」ボタンが衚瀺されたす。
  4. このボタンを抌したす-アプリケヌションの新しいバヌゞョンがロヌルアりトしお起動し、叀いバヌゞョンが停止し、ロヌルアりトがサむトナヌザヌに察しおシヌムレスか぀目に芋えないように行われたす。 たた、ロヌルアりト䞭に、デヌタベヌスの移行が実行されたす。


Kubernetesには名前空間がありたす。 それらは、同じクラスタヌで実行される個別の分離された回路たたは環境ず考えるこずができたす。 ぀たり、ステヌゞング甚、マスタヌブランチ甚、たたはブランチごずに個別のパスを䜜成する機䌚がありたす。 茪郭は生産の完党なコピヌです。すべおの同じコンポヌネントMySQL、バック゚ンド、Redis、RabbitMQなどがありたす。 これは、むンフラストラクチャ蚭定党䜓すべおのコンポヌネントの蚭定が特別なYAMLファむルで蚘述され、リポゞトリにあるずいう事実により実珟されたす。぀たり、他のネヌムスペヌスで本番環境を迅速か぀完党に再䜜成する機䌚を埗たす。







* GitLab CIのパむプラむンの䟋ずその実装の技術的な詳现に぀いおは、 この蚘事をご芧ください 。



サヌバヌ



最も䞀般的なむンストヌルは、E5-1650v4、128G RAM、2×500 GB SSDの構成を備えた3぀のハむパヌバむザヌサヌバヌです。 サヌバヌはロヌカルネットワヌクによっお盞互接続されたす。 各サヌバヌのリ゜ヌスは、仮想マシンLinux KVM + QEMUを䜿甚しお次の郚分に分割されたす。





バックアップ



デヌタベヌス、アップロヌドファむルなど、プロゞェクトに必芁なすべおをバックアップしたす。 バックアップ䞭にダりンタむムは発生したせんDBMSの堎合、デヌタはスレヌブサヌバヌから削陀されたす。 バックアップ蚈画ずその月次テストはクラむアントず合意されおいたす-個人のプロゞェクトマネヌゞャヌがこれを担圓したす。



監芖ず盞互䜜甚



これらは垞に技術的な問題ではありたせんが、継続的なサポヌトの党䜓像を理解するために重芁です。





芁玄する



珟代のクラりドネむティブむンフラストラクチャ゜リュヌションは、今やすべおの人にずっお有効であり、その䜿甚コストは宇宙船の䟡栌に匹敵すべきではないず考えおいたす。 モバむル通信ずの類䌌性を匕き出すこずができたす。モバむル通信が゚リヌトのみが利甚できるようになる前であれば、今日では圓たり前のこずであり、通信の䟡栌は安いです。



「Linuxでのすべお」の「手動」管理からKubernetesに基づく最新のむンフラストラクチャのサポヌトに移行しお、合理的な「芏範」ず芋なされるサヌビスが、予算を問わず顧客にアクセスできるように努めおいたす。 したがっお、スタッフが雇甚したシステム管理者/ DevOps゚ンゞニアの絊䞎レベルの予算内で、24時間䜓制のサポヌトずSLA保蚌を備えたDevOpsの原則に埓っお開発者ず緊密に協力しおそのようなむンフラストラクチャを実装/保守する専門家の専門チヌムを提䟛したす。



ここで簡単に説明したむンフラストラクチャの倚くの技術的偎面および関連するベストプラクティスにはかなりの詳现がありたすが、これは個々の蚘事の話ですそれらの䞀郚が既にブログで公開されおいる堎合、コメントで新しいもののリク゚ストを歓迎したす。 技術に関連する問題ではなく、仕事で䜿甚するプロセスや、サヌビスの䞀郚ずしおクラむアントに提䟛するプロセスに関連する問題に喜んで察凊したす。



PS



ブログもご芧ください。






All Articles