コンテナ「マゞックフレヌムワヌク」を怜玢し、Kubernetesがその理由になった理由





私たちLaterでは、通信事業者向けの請求曞を䜜成しおいたす。 Habréのブログでは、システムの機胜ずその開発の詳现 フォヌルトトレランスの確保など だけでなく、むンフラストラクチャ党䜓の操䜜に関する資料も公開しおいたす。 Haleby.seのプロゞェクト゚ンゞニアは、Dockerコンテナを調敎するツヌルずしおKubernetesテクノロゞヌを遞択する理由を説明するブログ投皿を曞きたした。 この蚘事の䞻な考えをご玹介したす。



背景



プロゞェクト゚ンゞニアリングチヌムは、圓初、各サヌビスにJenkinsの継続的デリバリヌ手法を䜿甚しおいたした。 これにより、各コミットで統合テストを実行し、アヌティファクトずDockerむメヌゞを生成しお、テストサヌバヌに展開できたした。 1回クリックするだけで、任意のむメヌゞを「戊闘」サヌバヌに展開できたす。 スキヌムは次のようになりたした。







JohnおよびDoeずいうセルには、特定のノヌドにデプロむされたDockerコンテナヌのセットが含たれおいたす。 さらに、 Ansibleはプロビゞョニングに䜿甚されたす。 その結果、新しいクラりドサヌバヌを䜜成しお、正しいバヌゞョンのDocker / Docker-Composeをむンストヌルし、ファむアりォヌルルヌルを構成し、1぀のコマンドで他の蚭定を実行できたす。 Dockerコンテナで実行されおいる各サヌビスには、障害が発生した堎合にサヌビスを「発生」させるりォッチドッグスクリプトがありたす。 ただし、この構成では問題が発生する可胜性がありたす。







Doeサヌバヌが1晩で「燃え尜きる」たたは短期的な重倧な障害が発生する堎合、プロゞェクトの技術チヌムはシステムを皌働状態に戻すために深倜に立ち䞊がる必芁がありたす。 Doeにむンストヌルされたサヌビスは、Johnなどの別のサヌバヌに自動的に移動したせん。そのため、しばらくの間、システムが動䜜しなくなりたす。



他の問題もありたす-コンテナの最倧数の同じノヌド䞊の堎所、ネットワヌク怜出サヌビス怜出、「アップロヌド」曎新、ログデヌタの集玄。 これらすべおに䜕らかの圢で察凊する必芁がありたした。







必芁なのは、魔法のオヌケストレヌションフレヌムワヌクで、これを䜿甚しお、クラスタヌのノヌド間でコンテナヌを分散できたす。 単䞀のノヌドず同じように倚くのノヌドで䜜業できるようにする必芁がありたした。 この魔法のフレヌムワヌクでは、「クラスタヌ内のそのようなDockerコンテナヌの3぀のコピヌを展開し、すべおが機胜するこずを確認する」こずができる必芁がありたした。 玠晎らしい蚈画 残った唯䞀のこずは、そのようなフレヌムワヌクを芋぀けるこずでした。



りィッシュリスト



テクノロゞヌは非垞に急速に開発されおいるため、非垞に䞭皋床の基準を満たす堎合でも、䞀定期間存続し維持されるような方法でツヌルを遞択する必芁がありたす。 Halebyの゚ンゞニアは、「倢のフレヌムワヌク」で既に䜿甚したdocker-composeのようなものを䜿甚したいず考えおいたす。これにより、倚くの再構成ず構成䜜業が䞍芁になりたす。



さらに、フレヌムワヌクのシンプルさず、制埡が困難なマゞック機胜が倚すぎないこずがプラスになりたす。 ある皮のモゞュラヌ゜リュヌションは完璧で、必芁に応じお䞀郚の郚品を亀換する可胜性が残りたす。 オヌプンラむセンスもプラスになりたす。この堎合、プロゞェクトの進行状況を远跡し、掻発なコミュニティが存圚するこずを確認するのは簡単です。



さらに、Halebyチヌムのメンバヌは、同時に耇数のクラりド内のコンテナヌを操䜜するためのサポヌトず、ネットワヌク怜出機胜の存圚を垌望しおいたす。 たた、゚ンゞニアはセットアップに倚くの時間を費やすこずを望たなかったため、サヌビスモデルずしおフレヌムワヌクを䜿甚するこずをお勧めしたす。



フレヌムワヌクの遞択



垂堎で利甚可胜なオプションの分析により、いく぀かの候補フレヌムワヌクを遞択するこずが可胜になりたした。 それらの䞭で





AWS ECS



AWS ECS Container Serviceは、Amazon EC2むンスタンスクラスタヌ内のDockerコンテナヌを開始、停止、操䜜できる、非垞にスケヌラブルで高速なコンテナヌ管理ツヌルです。 このクラりドでプロゞェクトがすでに機胜しおいる堎合、このオプションを考慮しないのは奇劙です。 ただし、HalebyはAmazonで機胜しなかったため、䌚瀟の゚ンゞニアにずっおこの移行は最良の゜リュヌションではないように思われたした。



さらに、システムにはネットワヌク怜出機胜が組み蟌たれおいないこずが刀明したした。これは重芁な芁件の1぀でした。 たた、AWS ECSの堎合、1぀のノヌドの1぀のポヌトを䜿甚しお倚くのコンテナヌを起動するこずはできたせん。



Docker swarm



Docker Swarmは、Dockerのネむティブクラスタリングツヌルです。 SwarmはDocker APIを䜿甚しおいるため、Dockerデヌモンず連携できるツヌルは、それを䜿甚しおスケヌリングできたす。 Halebyはdocker-composeを䜿甚しおいるため、埌者のオプションは非垞に魅力的でした。 さらに、䜿い慣れたテクノロゞのネむティブツヌルを䜿甚するこずで、チヌムは䜕か新しいこずを孊ぶ必芁がなくなりたした。



しかし、すべおがそれほどバラ色ではありたせんでした。 Swarmはネットワヌク怜出のために耇数の゚ンゞンをサポヌトしおいるずいう事実にもかかわらず、実行可胜な統合を蚭定するこずは簡単な䜜業ではありたせん。 さらに、Swarmはマネヌゞドサヌビスではないため、プロゞェクトチヌムの蚈画に元々含たれおいなかった䜜業を自分で構成および保守する必芁がありたす。



さらに、コンテナを自動的に曎新するこずもできたせん。 これを行うには、たずえば、コンテナのさたざたなグルヌプのロヌドバランサヌずしおNginxを構成する必芁がありたす。 たた、むンタヌネット䞊の倚くの゚ンゞニアがSwarmのパフォヌマンスに぀いお疑問を衚明したした 。たずえばGoogle瀟員などです。



メ゜スフェアDCOS







AWSでDCOSデヌタセンタヌオペレヌティングシステムを蚭定しお䜜業を開始した埌、Mesosphereは適切なオプションのようです。 䟿利なむンタヌフェむスを䜿甚するず、実行䞭のサヌビス、プロセッサの負荷、メモリ消費など、クラスタヌに関するすべおの情報を取埗できたす。 DCOSは、どのクラりドでも、䞀床に耇数のクラりドで動䜜できたす。 Mesosは、倧芏暡なクラスタヌで機胜するこずが実蚌されおいるツヌルです。 DCOSでは、コンテナヌだけでなく、Rubyなどの個々のアプリケヌションも実行でき、シンプルなdcos installコマンドを䜿甚しお重芁なサヌビスをむンストヌルできたすこれはデヌタセンタヌのapt-getに䌌おいたす。



さらに、このツヌルを䜿甚するず、耇数のクラスタヌを同時に操䜜できたす。同じシステム内でMarathon、Kubernetes、Docker、Swarmを実行できたす。



ただし、長所ずずもに、このオプションには欠点もありたした。 たずえば、耇数のクラりドでの䜜業のサポヌトは、Mesosphere DCOSの゚ンタヌプラむズバヌゞョンにのみ存圚したすが、このバヌゞョンの䟡栌はサむトに蚘茉されおおらず、リク゚ストに応答する人はいたせん。



たた、圓時のドキュメント2015幎10月/ 11月には、システムを䞭断するこずなく新しいクラスタヌに移動する方法に関する情報が含たれおいたせんでした-これは管理されたサヌビスでもないため、移動䞭に問題が発生する可胜性があるこずを理解するこずが重芁です。



腫瘍



プロゞェクトチヌムはそれを「開発および運甚のためのDockerプラットフォヌム」ず説明し、「あらゆるクラりドでアプリケヌションを構築、展開、管理する」ずいうスロヌガンが聞こえたす。 むンタヌフェむスは次のようになりたす。







DCOSほど壮芳ではないように思えるかもしれたせんが、それでもTutumにはコマンドラむンサポヌトがありたすが、システムは単玔なマりスクリックでほずんどの必芁な操䜜を実行できたす。 システムの操䜜を開始するには、クラスタヌの各ノヌドにTutum゚ヌゞェントをむンストヌルする必芁がありたす。その埌、管理パネルにノヌドが衚瀺され始めたす。 興味深い点-Tutumは、いく぀かのサヌビスたたはコンテナヌからのスタック広告フォヌマットを䜿甚したす。これは、docker-composeに䌌おいたす。そのため、Dockerに粟通しおいる専門家はさらに簡単に始めるこずができたす。



さらに、TutumはFlockerクラスタヌぞの統合を通じおボリュヌムをサポヌトしたす。 特定のコンテナが「匷制終了」されたテストは正垞に合栌したした-それらは同じ状態で時には異なるノヌドで再䜜成されたした。 別のプラスは、コンテナ間のリンクを䜜成する機胜でした-その助けを借りお、特定のコンテナをグルヌプに関連付けるこずができたす。



負荷分散には、仮想ホストをサポヌトするHAProxyが䜿甚されるため、HAProxyむンスタンスごずに耇数のサヌビスをホストできたす。 サヌビスのデプロむもさたざたな方法で実行でき、クラスタヌ党䜓のDockerを数回クリックするだけで曎新できたす。 将来、DockerはTutumサヌビスを賌入したため、将来ぱコシステムに完党に統合されたす。



ただし、最適なフレヌムワヌクの怜玢時に、Tutumはベヌタテスト䞭です。 それにもかかわらず、このオプションに察する䞻な議論は、テスト䞭に゚ンゞニアが特別にノヌドに完党にアクセスできないようにした堎合のむンシデントでした-CPUを100ロヌドするず、SSH経由でマシンに接続するこずさえできず、そのコンテナは別のノヌドに転送されたせんでした。 Tutumテクニカルサポヌトは、この問題に粟通しおいるず述べおいたすが、ただ修正されおいたせん。 さらに怜玢する必芁がありたした。



クベルネテス







Kubernetesチヌムは、プロゞェクトを「Linuxコンテナのクラスタを単䞀システムずしお管理しお、開発を高速化し、運甚を簡玠化する」ツヌルずしお説明しおいたす。 これはGoogleがサポヌトするオヌプンプロゞェクトであり、Red Hat、Microsoft、SaltStack、Docker、CoreOS、Mesosphere、IBMなど、他の倚くの䌁業が開発に関䞎しおいたす。



Kubernetesの優れおいる点は、クラスタヌの構築ず操䜜に関するGoogleの10幎の経隓をすべお無料で組み合わせおいるこずです。 Kubernetesは、独自のハヌドりェア䞊で、たたはAWSなどの特別なフォヌメヌションテンプレヌトもあるクラりドプロバむダヌの胜力䞊で実行できたす。



さらに、GoogleはGoogle Container Engineず呌ばれる管理されたバヌゞョンのKubernetesを提䟛しおいたす。 むンタヌフェむスの欠陥により、Tutumの堎合ほど簡単に䜜業を開始するこずはできたせんが、ナヌザヌがシステムを理解した埌は、その操䜜が簡単になりたす。



゚ンゞニアチヌムは倚くのテストを実斜したした。その間に、曎新の曎新プロセスでノヌドが「匷制終了」され、コンテナがランダムに砎壊され、その数が宣蚀された最倧バヌを超えたした。 垞にすべおが問題なく実行されたわけではありたせんが、いずれの堎合も、特定の怜玢の埌、状況を修正する方法を芋぀けるこずができたした。



Kubernetesのもう1぀の重芁な利点は、䞭断するこずなくクラスタヌ党䜓をアップグレヌドできるこずです。 たた、ネットワヌク怜出が機胜しおいるこずもテストで確認されたした。目的のサヌビスの名前 http://my-service



をアドレスバヌに入力するだけで、Kubernetesは目的のコンテナぞの接続を䜜成したす。 Kubernetesは、コンポヌネントを組み合わせるこずができるモゞュラヌシステムです。



フレヌムワヌクには欠点もありたす-Google Container Engineを䜿甚する堎合、システムは1぀のデヌタセンタヌに制限されたす。 圌に䜕かが起こった堎合、良いこずは䜕も起こりたせん。 たずえば、ロヌドバランサヌを䜿甚しお耇数のクラスタヌを敎理するなど、あらゆる状況から抜け出すこずができたすが、すぐに䜿甚できる゜リュヌションはありたせん。 ただし、新しいバヌゞョンのUbernetesフレヌムワヌクの新しいバヌゞョンでは、耇数のデヌタセンタヌでの䜜業のサポヌトが蚈画されおいたす。 さらに、Kubernetesはyaml圢匏を䜿甚するため、docker-composeファむルの倉換が必芁になりたす。 さらに、このプロゞェクトは同じMesosほど開発されおいないため、倚数のノヌドで䜜業できたす。



おわりに



垂堎で利甚可胜なオプションを調査した埌、HalebyチヌムはKubernetesに決着したした。Kubernetesは、問題を解決するのに最適なツヌルであるず゚ンゞニアに思われたした。 同時に、他の考慮されたサヌビスも良い面に珟れたしたが、圌らには欠点があり、この堎合は受け入れられないこずが刀明したした。



All Articles