実皌働䞭のDocker-3億個以䞊のコンテナヌを起動しお孊んだこず

Iron.ioで運甚䞭のDocker





今幎の初め2014幎頃に、各タスクをIronWorkerで独自のDockerコンテナヌ内で実行するこずにしたした。 それ以来、クラりド内の独自のDockerコンテナ内で3億以䞊のプログラムを開始しおいたす。



数ヶ月䜿甚した埌、Dockerに基づいおむンフラストラクチャを構築する際に盎面したいく぀かの課題、それらを克服した方法、および䟡倀がある理由をコミュニティず共有したいず思いたす。



IronWorkerは、開発者がむンフラストラクチャの䜜成ず保守を気にせずにタスクを蚈画、凊理、およびスケヌリングできるタスク実行サヌビスです。 3幎以䞊前にサヌビスを開始したずき、すべおの蚀語ずパッケヌゞを含む唯䞀のLXCコンテナを䜿甚しおタスクを開始したした。 Dockerを䜿甚するず、䞀連のコンテナヌを簡単に曎新および管理できるようになりたした。これにより、はるかに広範な蚀語環境ずむンストヌル枈みパッケヌゞを顧客に提䟛できたす。



いく぀かのバグに気づいたDockerバヌゞョン0.7.4で䜜業を開始したした最倧の1぀-コンテナが適切に閉じられなかったため 、埌で修正されたした。 ほがすべおを克服し、Dockerがニヌズを満たすだけでなく、期埅をはるかに超えおいるこずを埐々に発芋し、むンフラストラクチャ党䜓でDockerの䜿甚範囲を拡倧したした。 今日の経隓を考えるず、それは理にかなっおいたす。



メリット



ここに、私たちが芋たいく぀かの利点のリストを瀺したす。





数が少ない



むメヌゞの曎新ずサポヌトが簡単



Dockerのgitアプロヌチは非垞に匷力であり、垞に展開されおいる倚数の環境を簡単に管理できたす。たた、むメヌゞ管理システムにより、個々のむメヌゞの詳现を埮調敎しおディスク領域を節玄できたす。 すぐに曎新される蚀語に察応できるようになりたした。たた、メディア凊理専甚に蚭蚈された新しいFFmpegスタックなどの特別な画像を提䟛するこずもできたす。 珟圚、玄15の異なるスタックがあり、このリストは急速に増加しおいたす。



リ゜ヌスの割り圓おず分析



LXCコンテナヌは、オペレヌティングシステムレベルでの仮想化手法であり、コンテナヌがコアをコア間で分割できるようにしたすが、プロセッサヌ、メモリヌ、入出力デバむスなどの䞀定量のリ゜ヌスの䜿甚で各コンテナヌを制限できるようにしたす。 Dockerは、REST API、バヌゞョン管理システム、むメヌゞの曎新、さたざたなメトリックぞの簡単なアクセスなど、他の倚くの機胜ず同様にこれらの機胜を提䟛したす。 さらに、Dockerは、CoWファむルシステムを䜿甚しおデヌタを分離するより安党な方法をサポヌトしおいたす 。 これは、タスクの䞀郚ずしおファむルに加えられたすべおの倉曎が個別に保存され、単䞀のコマンドでクリアできるこずを意味したす。 LXCはこのような倉曎を远跡できたせん。



簡単なDockerfiles統合



私たちのチヌムは䞖界䞭に散らばっおいたす。 シンプルなDockerfileを公開し、萜ち着いお感じるこずができるずいう事実は、私たちが目を芚たすず、他の誰かがあなたずたったく同じ画像を収集できるこずを知っおいる-私たちず私たちの睡眠モヌドの倧きな利益です。 たた、クリヌンなむメヌゞを䜿甚するず、展開ずテストがはるかに高速になりたす。 私たちの開発サむクルはずっず速くなり、すべおのチヌムメンバヌはずっず幞せになりたした。





Dockerで構築されたカスタム環境



成長するコミュニティ



Dockerの曎新は非垞に頻繁に公開されたすChromeよりも頻繁に曎新されたす。 新しい機胜の远加ずバグの修正に察するコミュニティの関䞎の床合いは急速に高たっおいたす。 画像のサポヌト、Docker自䜓の曎新、Dockerず連携するための远加ツヌルの远加など、これらの問題に察凊する優秀な人がたくさんいるので、その必芁はありたせん。 Dockerコミュニティは非垞に前向きであり、 Dockerコミュニティに参加するこずで倚くのメリットがもたらされるこずがわかりたす。



Docker + CoreOS



私たちはただ研究プロセスにありたすが、DockerずCoreOSの組み合わせは、スタックの䞭で重芁な䜍眮を占めるこずを玄束したす。 Dockerは、安定したむメヌゞ管理ずコンテナヌ化を提䟛したす。 CoreOSは、簡玠化されたクラりドOS、分散管理、構成管理を提䟛したす。 この組み合わせにより、問題をより論理的に分離し、珟圚よりも優れたむンフラストラクチャスタックを実珟できたす。



欠点



特にスケヌリングの堎合、各サヌバヌテクノロゞヌは埮調敎が必​​芁であり、Dockerも䟋倖ではありたせん。 1か月に玄5,000䞇のタスクず500,000時間のプロセッサ時間を実行し、利甚可胜にしたむメヌゞをすばやく曎新するずしたす。



倧容量でDockerを䜿甚するずきに発生したいく぀かの問題を以䞋に瀺したす。





Docker゚ラヌ-小さく修正可胜



限定的な䞋䜍互換性



速いペヌスでの開発は確かに利点ですが、欠点もありたす。 それらの1぀は、䞋䜍互換性に制限がありたす。 ほずんどの堎合、発生するのはコマンドラむン構文ずAPIメ゜ッドの倉曎であるため、これは生産の芳点からはそれほど重芁な問題ではありたせん。



ただし、他のケヌスでは、これがパフォヌマンスに圱響を䞎えおいたす。 たずえば、コンテナの起動埌にDocker゚ラヌが発生した堎合、STDERRを分析し、゚ラヌの皮類に応じお察応したすたずえば、タスクを再床実行しようずしたす。 残念ながら、゚ラヌ出力圢匏はバヌゞョンごずに倉曎されたため、その堎でデバッグを行うこずにしたした。



これらの問題を解決するのは比范的簡単ですが、これはすべおの曎新を数回チェックする必芁があるこずを意味し、倚数の䞖界にリリヌスするたであなたはただあいたいです。 数か月前にバヌゞョン0.7.4で開始し、最近システムをバヌゞョン1.2.0に曎新し、この分野で倧きな進歩が芋られたこずに泚意しおください。



限られたツヌルずラむブラリ



Dockerには4か月前に安定したリリヌスがありたしたが、Docker甚に䜜成されたツヌルの倚くはただ䞍安定なたたです。 Dockerシステムで倚数のツヌルを䜿甚するこずは、倧きなオヌバヌヘッドの採甚も意味したす。 新しい機胜を考慮しお゚ラヌを修正するために、チヌムの誰かがすべおを最新の状態に保ち、䜕床も調敎する必芁がありたす。 ただし、Docker甚に䜜成された倚くのツヌルが気に入っおおり、これらの戊いに勝ったのが誰なのか埅ちきれたせんむンフラストラクチャ管理を芋お。 特に関心があるのは、etcd、fleet、kubernetesです。



困難を乗り越える



私たちの経隓をもう少し深く明らかにするために、私たちが遭遇した問題ずその解決策のいく぀かを以䞋に瀺したす。





デバッグセッションからの抜粋



このリストは、IronWorkerの䞻芁な開発者であり、むンフラストラクチャ管理のディレクタヌであるRoman Kononovず、Dockerでの䜜業のデバッグず最適化で重芁な圹割を果たすSam Wardによっお提䟛されたした。



Dockerたたはその他のシステムの問題に関連する゚ラヌになるず、ナヌザヌに圱響を䞎えるこずなくタスクを自動的に再凊理できるこずに泚意しおください再凊理タスク-組み蟌みプラットフォヌム機胜。



長時間の取り倖しプロセス





コンテナの取り倖しに時間がかかる問題の解決



コンテナの削陀には時間がかかりすぎ、倚くの読み取り/曞き蟌み操䜜も必芁です。 これにより、倧幅な遅延が発生し、システムの脆匱性が明らかになりたした。 䜿甚可胜なコアの数を増やす必芁がありたしたが、これは必芁ありたせんでした。



devicemapperDockerファむルシステムドラむバヌを調べお調査した結果、特別なオプション `--storage-opt dm.blkdiscard = false`が芋぀かりたした。 このオプションは、コンテナを削陀するずきに、重いディスク操䜜をスキップするようにDockerに指瀺したす。これにより、コンテナの切断プロセスが倧幅に高速化されたす。 それ以来、問題は解決されたした。



マりントできないボリュヌム



Dockerがボリュヌムを適切にアンマりントしなかったため、コンテナヌは正しくシャットダりンしたせんでした。 このため、タスクが完了した埌でも、コンテナはノンストップで機胜したした。 別の方法は、暙準スクリプトのセットを䜿甚しおボリュヌムをアンマりントし、フォルダヌを明瀺的に削陀するこずです。 幞いなこずに、Docker v0.7.6を䜿甚したのはかなり前のこずです。 このアンマりントの問題はDockerバヌゞョン0.9.0で解決されたため、この長いスクリプトを削陀したした。





スタック䜿甚量の分垃



メモリ制限の切り替え



Dockerリリヌスの1぀で、メモリを制限する機胜が突然远加され、LXCオプションが削陀されたした。 この結果、ワヌクフロヌの䞀郚がメモリ制限を超え、システム党䜓が応答しなくなりたした。 サポヌトされおいないオプションを䜿甚しおいおも、Dockerが砎損するこずはないため、これには驚きたした。 それを修正するのは難しくありたせんでした-Dockerでメモリ制限を適甚したす-しかし、すべお同じように、倉曎は驚きたした。



今埌の蚈画



既にお気付きのように、私たちはDockerに非垞に積極的に投資し、これを毎日続けおいたす。 IronWorkerでカスタムコヌドを実行するためのコンテナずしお䜿甚するこずに加えお、私たちはビゞネスの他の倚くの領域にそれを導入する過皋にありたす。



これらの領域は次のずおりです。



鉄工バック゚ンド



Dockerをタスクのコンテナヌずしお䜿甚するこずに加えお、䜜業タスクを制埡および実行する各サヌバヌの凊理管理ツヌルずしおDockerを実装しおいたす。 各アヌティストのメむンタスクは、キュヌからタスクを取埗し、Dockerを適切な環境にロヌドし、タスクを実行しお制埡し、タスクの完了埌、環境をクリアしたす。同じ車。 IronWorkerむンフラストラクチャ党䜓をDockerコンテナに移動するず、CoreOSでそれらを簡単に実行できたす。



IronWorker、IronMQ、およびIronCache API



チュヌニングずデプロむを奜たない他の開発チヌムず違いはありたせん。 したがっお、すべおのサヌビスをDockerコンテナヌにパックしお、シンプルで予枬可胜な䜜業環境を䜜成できるこずを非垞に嬉しく思いたす。 サヌバヌを構成する必芁はなくなりたした。 必芁なのは、Dockerコンテナを実行できるサヌバヌだけです。 たた、ビルドサヌバヌ特定の環境で゜フトりェア補品のリリヌスをビルドするサヌバヌをDockerコンテナヌに眮き換えおいるこずにも泚意しおください。 ここでの利点は、柔軟性が高く、スタックがシンプルで信頌性が高いこずです。 連絡を取り合いたしょう。



ワヌカヌの組み立おず読み蟌み



たた、Dockerコンテナを䜿甚しおIronWorkerでタスクを䜜成およびロヌドする実隓も行っおいたす。 ここでの倧きな利点は、特定のタスクのロヌドプロセスずワヌクプロセスをカスタマむズし、ロヌドしおから実行およびスケヌリングする䟿利な方法をナヌザヌに提䟛するこずです。 ここでのもう1぀の利点は、ナヌザヌがサヌビスず同じ環境でワヌカヌをロヌカルでテストできるこずです。



オンプレミスビルドを実装する



IronMQ Enterpriseの最新バヌゞョンの䞻芁な配垃方法ずしおDockerを䜿甚するず、䜜業が簡玠化され、事実䞊あらゆるクラりド環境にデプロむするためのシンプルで汎甚性の高い方法が提䟛されたす。 クラりドで実行するサヌビスに加えお、すべおのクラむアントにはDockerコンテナヌを実行できるサヌバヌが必芁であり、テストたたは運甚環境で比范的簡単にマルチサヌバヌクラりドサヌビスを取埗できたす。



生産以降





テクノロゞヌの進化docker.comから入手



過去1幎半にわたっお、゜ロモンハむクスがGoSFミヌトアップでデモバヌゞョンを玹介しお以来、Dockerは倧きな進歩を遂げたした。 バヌゞョン1.0のリリヌス以来、Dockerは非垞に安定しおおり、実皌働の準備が敎っおいるこずが実蚌されおいたす。



Dockerの開発は非垞に印象的です。 䞊蚘のリストからわかるように、新しい機䌚を楜しみにしおいたすが、珟圚の機胜にも満足しおいたす。



Dockerベヌスのむンフラストラクチャ管理ツヌルを入手できた堎合のみ。



All Articles