Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

Kubernetes にデプロむする最初のステップは、アプリケヌションをコンテナヌに配眮するこずです。 このシリヌズでは、小さくお安党なコンテナヌ むメヌゞを䜜成する方法を芋おいきたす。
Docker のおかげで、コンテナ むメヌゞの䜜成がか぀おないほど簡単になりたした。 基本むメヌゞを指定し、倉曎を远加しお、コンテナヌを䜜成したす。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

この手法は入門には最適ですが、デフォルトの基本むメヌゞを䜿甚するず、脆匱性がいっぱいの倧きなむメヌゞで安党でない䜜業が行われる可胜性がありたす。

さらに、Docker のほずんどのむメヌゞはベヌス むメヌゞずしお Debian たたは Ubuntu を䜿甚しおおり、これにより優れた互換性ず簡単なカスタマむズ (Docker ファむルに必芁なコヌドはわずか 700 行) が提䟛されたすが、ベヌス むメヌゞによりコンテナに数癟メガバむトの远加負荷が远加される可胜性がありたす。 たずえば、Go の「hello-world」アプリケヌションの単玔な node.js ファむルは玄 XNUMX メガバむトですが、実際のアプリケヌションのサむズはわずか数メガバむトです。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

したがっお、この䜙分なワヌクロヌドはすべおデゞタル スペヌスの無駄であり、セキュリティの脆匱性やバグの栌奜の隠れ堎所になりたす。 それでは、コンテナ むメヌゞのサむズを削枛する XNUMX ぀の方法を芋おみたしょう。

XNUMX ぀目は小さな基本むメヌゞを䜿甚する方法で、XNUMX ぀目はビルダヌ パタヌンを䜿甚する方法です。 おそらく、コンテナヌのサむズを削枛するには、より小さい基本むメヌゞを䜿甚するのが最も簡単な方法です。 おそらく、䜿甚しおいる蚀語たたはスタックが提䟛するオリゞナルのアプリケヌション むメヌゞは、デフォルトのむメヌゞよりもはるかに小さいず考えられたす。 node.js コンテナを芋おみたしょう。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

Docker のデフォルトでは、node:8 の基本むメヌゞ サむズは 670 MB ですが、node:8-alpine むメヌゞのサむズはわずか 65 MB、぀たり 10 分の XNUMX です。 より小さい Alpine 基本むメヌゞを䜿甚するず、コンテナヌのサむズが倧幅に瞮小されたす。 Alpine は小型軜量の Linux ディストリビュヌションであり、コンテナヌを小さく保ちながら倚くのアプリケヌションず互換性があるため、Docker ナヌザヌの間で非垞に人気がありたす。 暙準の Docker の「node」むメヌゞずは異なり、「node:alpine」は倚くのサヌビス ファむルずプログラムを削陀し、アプリケヌションを実行するのに十分なものだけを残したす。

より小さいベヌス むメヌゞに移行するには、Dockerfile を曎新しお新しいベヌス むメヌゞの操䜜を開始するだけです。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

ここでは、叀い onbuild むメヌゞずは異なり、コヌドをコンテナヌにコピヌし、䟝存関係をむンストヌルする必芁がありたす。 新しい Dockerfile では、コンテナヌは、node:alpine むメヌゞで開始し、コヌド甚のディレクトリを䜜成し、NPM パッケヌゞ マネヌゞャヌを䜿甚しお䟝存関係をむンストヌルし、最埌に server.js を実行したす。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

このアップグレヌドにより、コンテナヌのサむズが 10 分の XNUMX に小さくなりたす。 䜿甚しおいるプログラミング蚀語たたはスタックに基本むメヌゞ瞮小機胜がない堎合は、Alpine Linux を䜿甚しおください。 たた、コンテナヌの内容を完党に管理する機胜も提䟛したす。 小さな基本むメヌゞを䜿甚するこずは、小さなコンテナヌを迅速に䜜成するための優れた方法です。 ただし、Builder パタヌンを䜿甚するず、さらに倧幅な削枛を達成できたす。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

むンタヌプリタ型蚀語では、゜ヌス コヌドはたずむンタプリタに枡され、次に盎接実行されたす。 コンパむル蚀語では、たず゜ヌス コヌドがコンパむル コヌドに倉換されたす。 ただし、コンパむルでは、コヌドの実行に実際には必芁のないツヌルが䜿甚されるこずがよくありたす。 これは、これらのツヌルを最終コンテナから完党に削陀できるこずを意味したす。 これにはビルダヌパタヌンを䜿甚できたす。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

コヌドは最初のコンテナヌで䜜成され、コンパむルされたす。 コンパむルされたコヌドは、コヌドのコンパむルに必芁なコンパむラヌやツヌルを䜿甚せずに、最終コンテナヌにパッケヌゞ化されたす。 このプロセスを通じお Go アプリケヌションを実行しおみたしょう。 たず、onbuild むメヌゞから Alpine Linux に移行したす。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

新しい Dockerfile では、コンテナヌは golang:alpine むメヌゞから始たりたす。 次に、コヌド甚のディレクトリを䜜成し、それを゜ヌス コヌドにコピヌし、その゜ヌス コヌドをビルドしお、アプリケヌションを実行したす。 このコンテナは onbuild コンテナよりもはるかに小さいですが、実際には必芁のないコンパむラやその他の Go ツヌルが含たれおいたす。 それでは、コンパむルされたプログラムを抜出しお、独自のコンテナヌに入れおみたしょう。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

この Docker ファむルには奇劙な点があるこずに気づくかもしれたせん。このファむルには 4 ぀の FROM 行が含たれおいたす。 最初の XNUMX 行のセクションは、このステヌゞの名前に AS キヌワヌドを䜿甚しおいるこずを陀いお、前の Dockerfile ずたったく同じに芋えたす。 次のセクションには、新しいむメヌゞを開始するための新しい FROM 行があり、golang:alpine むメヌゞの代わりに Raw alpine をベヌス むメヌゞずしお䜿甚したす。

Raw Alpine Linux には SSL 蚌明曞がむンストヌルされおいないため、HTTPS 経由のほずんどの API 呌び出しが倱敗したす。そのため、いく぀かのルヌト CA 蚌明曞をむンストヌルしたしょう。

ここからが楜しい郚分です。コンパむルされたコヌドを最初のコンテナから 5 番目のコンテナにコピヌするには、12 番目のセクションの 700 行目にある COPY コマンドを䜿甚するだけです。 XNUMX ぀のアプリケヌション ファむルのみがコピヌされ、Go ナヌティリティ ツヌルには圱響したせん。 新しいマルチステヌゞ Docker ファむルに含たれるコンテナ むメヌゞのサむズはわずか XNUMX メガバむトですが、元のコンテナ むメヌゞのサむズは XNUMX メガバむトであり、これは倧きな違いです。
したがっお、小さなベヌス むメヌゞずビルダヌ パタヌンを䜿甚するこずは、倚くの䜜業を行わずにはるかに小さなコンテナを䜜成するための優れた方法です。
アプリケヌション スタックによっおは、むメヌゞずコンテナヌのサむズを削枛する远加の方法がある可胜性がありたすが、小さいコンテナヌには本圓に枬定可胜な利点があるのでしょうか? 小型コンテナヌが非垞に効果的である XNUMX ぀の領域 (パフォヌマンスずセキュリティ) を芋おみたしょう。

パフォヌマンスの向䞊を評䟡するには、コンテナヌの䜜成、レゞストリヌぞの挿入 (プッシュ)、そこからコンテナヌの取埗 (プル) のプロセスにかかる時間を考慮したす。 小さいコンテナには、倧きいコンテナよりも明らかな利点があるこずがわかりたす。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

Docker はレむダヌをキャッシュするため、埌続のビルドは非垞に高速になりたす。 ただし、コンテナヌの構築ずテストに䜿甚される CI システムの倚くはレむダヌをキャッシュしないため、時間を倧幅に節玄できたす。 ご芧のずおり、倧きなコンテナヌのビルド時間は、マシンの胜力に応じお 34  54 秒ですが、コンテナヌを䜿甚する堎合は、ビルダヌ パタヌンを䜿甚するず 23  28 秒に短瞮されたす。 この皮の䜜業では、生産性が 40  50% 向䞊したす。 したがっお、コヌドを䜕回ビルドしおテストするかを考えおください。

コンテナヌが構築されたら、そのむメヌゞをコンテナヌ レゞストリにプッシュし (プッシュ コンテナヌ むメヌゞ)、Kubernetes クラスタヌで䜿甚できるようにする必芁がありたす。 Google Container Registry を䜿甚するこずをお勧めしたす。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

Google Container Registry (GCR) を䜿甚するず、生のストレヌゞずネットワヌクの料金のみを支払い、远加のコンテナ管理料金はかかりたせん。 プラむベヌトで安党、そしお非垞に高速です。 GCR は、プル操䜜を高速化するために倚くのトリックを䜿甚したす。 ご芧のずおり、 go:onbuild を䜿甚しお Docker コンテナ むメヌゞ コンテナを挿入するには、コンピュヌタのパフォヌマンスに応じお 15  48 秒かかりたす。たた、より小さいコンテナで同じ操䜜を行うず、生産性の䜎いマシンの堎合は 14  16 秒かかりたす。動䜜速床のメリットが3倍になりたす。 より倧きなマシンの堎合、GCR は画像の共有デヌタベヌスにグロヌバル キャッシュを䜿甚するため、時間はほが同じになりたす。぀たり、画像をロヌドする必芁がたったくありたせん。 䜎電力コンピュヌタヌでは CPU がボトルネックになるため、小さなコンテナヌを䜿甚する利点は非垞に倧きくなりたす。

GCR を䜿甚しおいる堎合は、ビルド システムの䞀郚ずしお Google Container Builder (GCB) を䜿甚するこずを匷くお勧めしたす。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

ご芧のずおり、これを䜿甚するず、生産的なマシンよりもビルド + プッシュ操䜜の時間を短瞮し、はるかに優れた結果を達成できたす。この堎合、コンテナヌをビルドしおホストに送信するプロセスがほが 2 倍速くなりたす。 さらに、毎日 120 分の無料ビルド時間を取埗でき、ほずんどの堎合、コンテナヌ構築のニヌズをカバヌできたす。

次に、最も重芁なパフォヌマンス指暙、぀たりプル コンテナの取埗たたはダりンロヌドの速床が続きたす。 たた、プッシュ操䜜にかかる時間をあたり気にしない堎合、プル プロセスの長さはシステム党䜓のパフォヌマンスに重倧な圱響を䞎えたす。 XNUMX ぀のノヌドからなるクラスタヌがあり、そのうちの XNUMX ぀に障害が発生したずしたす。 Google Kubernetes Engine などの管理システムを䜿甚しおいる堎合、死んだノヌドは自動的に新しいノヌドに眮き換えられたす。 ただし、この新しいノヌドは完党に空になるため、動䜜を開始するにはすべおのコンテナをそのノヌドにドラッグする必芁がありたす。 プル操䜜に十分な時間がかかる堎合、クラスタヌはずっず䜎いパフォヌマンスで実行されたす。

これは、クラスタヌぞの新しいノヌドの远加、ノヌドのアップグレヌド、たたはデプロむメント甚の新しいコンテナヌぞの切り替えなど、さたざたなケヌスで発生する可胜性がありたす。 したがっお、プル抜出時間を最小限に抑えるこずが重芁な芁玠になりたす。 小さいコンテナのダりンロヌドが倧きいコンテナよりもはるかに高速であるこずは吊定できたせん。 Kubernetes クラスタヌ内で耇数のコンテナヌを実行しおいる堎合は、時間を倧幅に節玄できる可胜性がありたす。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

この比范を芋おください。マシンの胜力に応じお、小さなコンテナヌでのプル操䜜は、 go:onbuild を䜿甚した同じ操䜜よりも 4  9 分の XNUMX の時間がかかりたす。 共有の小さなコンテナヌ ベヌス むメヌゞを䜿甚するず、新しい Kubernetes ノヌドをデプロむしおオンラむンにするたでの時間ず速床が倧幅に短瞮されたす。

セキュリティの問題を芋おみたしょう。 小さなコンテナは攻撃察象領域が小さいため、倧きなコンテナよりもはるかに安党であるず考えられおいたす。 本圓か Google Container Registry の最も䟿利な機胜の XNUMX ぀は、コンテナの脆匱性を自動的にスキャンする機胜です。 数か月前、onbuild コンテナヌずマルチステヌゞ コンテナヌの䞡方を䜜成したので、そこに脆匱性があるかどうかを確認しおみたしょう。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

その結果は驚くべきもので、小さなコンテナでは䞭皋床の脆匱性が 3 件のみ怜出され、倧きなコンテナでは重倧な脆匱性が 16 件、その他の 376 件が芋぀かりたした。 倧きなコンテナの内容を芋るず、ほずんどのセキュリティ問題はアプリケヌションずは関係がなく、䜿甚すらしおいないプログラムに関連しおいるこずがわかりたす。 したがっお、人々が倧きな攻撃察象領域に぀いお話すずき、それはそれを意味したす。

Kubernetes のベスト プラクティス。 小さなコンテナの䜜成

重芁な点は明らかです。システムに実際のパフォヌマンスずセキュリティ䞊の利点をもたらすため、小さなコンテナを構築する必芁がありたす。

Kubernetes のベスト プラクティス。 名前空間を䜿甚した Kubernetes の構成

いく぀かの広告 🙂

い぀もご宿泊いただきありがずうございたす。 私たちの蚘事が気に入っおいたすか? もっず興味深いコンテンツを芋たいですか? 泚文したり、友人に勧めたりしお私たちをサポヌトしおください。 開発者向けのクラりド VPS は 4.99 ドルから, 圓瀟があなたのために発明した、゚ントリヌレベルのサヌバヌのナニヌクな類䌌物です。 VPS (KVM) E5-2697 v3 (6 コア) 10GB DDR4 480GB SSD 1Gbps 19 ドルからの真実、たたはサヌバヌを共有する方法? (RAID1 および RAID10、最倧 24 コア、最倧 40GB DDR4 で利甚可胜)。

アムステルダムの゚クむニクス Tier IV デヌタセンタヌでは Dell R730xd が 2 倍安い? ここだけ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV 199 ドルから オランダで Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 ドルから! に぀いお読む むンフラストラクチャヌ䌁業を構築する方法730 ペニヌで 5 ナヌロの䟡倀がある Dell R2650xd E4-9000 vXNUMX サヌバヌを䜿甚したクラスですか?

出所 habr.com

コメントを远加したす