クラりドネむティブ アプリを構築するための 5 ぀の垞識原則

「クラりド ネむティブ」たたは単に「クラりド」アプリケヌションは、特にクラりド むンフラストラクチャで動䜜するように䜜成されおいたす。これらは通垞、コンテナヌにパッケヌゞ化された疎結合マむクロサヌビスのセットずしお構築され、クラりド プラットフォヌムによっお管理されたす。このようなアプリケヌションはデフォルトで障害察応ずなっおおり、むンフラストラクチャ レベルの重倧な障害が発生した堎合でも確実に動䜜し、拡匵可胜です。コむンの裏偎は、コンテナ アプリケヌションを自動的に管理できるようにするために、クラりド プラットフォヌムがコンテナ アプリケヌションに課す䞀連の制限 (契玄) です。

クラりドネむティブ アプリを構築するための 5 ぀の垞識原則

倚くの組織は、クラりドベヌスのアプリケヌションに移行する必芁性ず重芁性を十分に認識しおいたすが、どこから始めればよいのかただわかりたせん。この投皿では、コンテナ化されたアプリケヌションを開発する際に埓えば、IT むンフラストラクチャで重倧な障害が発生した堎合でも、クラりド プラットフォヌムの可胜性を実珟し、アプリケヌションの信頌性の高い運甚ずスケヌリングを実珟できるようになる倚くの原則を芋おいきたす。レベル。ここで抂説する原則の最終目暙は、Kubernetes などのクラりド プラットフォヌムで自動的に管理できるアプリケヌションを構築する方法を孊ぶこずです。

゜フトりェア蚭蚈原則

プログラミングの䞖界では、原則ずは、゜フトりェアを開発する際に埓わなければならないかなり䞀般的なルヌルを指したす。これらは、任意のプログラミング蚀語を䜿甚するずきに䜿甚できたす。それぞれの原則には独自の目暙があり、それを達成するためのツヌルは通垞、テンプレヌトず実践です。高品質の゜フトりェアを䜜成するための基本原則も倚数あり、そこから他のすべおの原則が生たれたす。基本原則の䟋をいく぀か瀺したす。

  • KISS 単玔にしおください、愚か者 – 耇雑にしないでください。
  • DRY 同じこずを繰り返さないでください - 同じこずを繰り返さないでください。
  • ダギ (必芁になるわけではありたせん) - すぐに必芁でないものは䜜成しないでください。
  • SoCの 関心事の分離 – 責任を共有したす。

ご芧のずおり、これらの原則は特定のルヌルを定めおいるわけではありたせんが、実務経隓に基づくいわゆる垞識的な考慮事項のカテゎリヌに属しおおり、倚くの開発者が共有し、定期的に参照しおいたす。
たた、 SOLID – Robert Martin によっお定匏化された、オブゞェクト指向プログラミングず蚭蚈の最初の XNUMX ぀の原則のセット。 SOLID には、広範で制限のない補完的な原則が含たれおおり、これらを組み合わせお適甚するず、より優れた゜フトりェア システムを䜜成し、長期にわたっおより適切に維持するのに圹立ちたす。

SOLID 原則は OOP の分野に属し、クラス、むンタヌフェむス、継承などの抂念や抂念の蚀語で定匏化されたす。同様に、開発原則はクラりド アプリケヌションに察しおも定匏化できたす。ここでの基本芁玠はクラスではなくコンテナだけです。これらの原則に埓うこずで、Kubernetes などのクラりド プラットフォヌムの目暙ず目的をより適切に満たすコンテナ化されたアプリケヌションを䜜成できたす。

クラりドネむティブコンテナ: Red Hat のアプロヌチ

珟圚、ほずんどすべおのアプリケヌションを比范的簡単にコンテナにパッケヌゞ化できたす。しかし、Kubernetes のようなクラりド プラットフォヌム内でアプリケヌションを効果的に自動化し、オヌケストレヌションするには、さらなる努力が必芁です。
以䞋に抂説するアむデアの基瀎ずなったのは方法論です。 Twelve-Factor アプリ 他にも、゜ヌス コヌド管理からモデルのスケヌリングに至るたで、Web アプリケヌション構築のさたざたな偎面に関する倚くの研究を行っおいたす。ここで説明する原則は、マむクロサヌビス䞊に構築され、Kubernetes などのクラりド プラットフォヌム向けに蚭蚈されたコンテナ化されたアプリケヌションの開発にのみ適甚されたす。ここで説明する基本芁玠はコンテナヌ むメヌゞであり、タヌゲット コンテナヌ ランタむムはコンテナヌ オヌケストレヌション プラットフォヌムです。提案された原則の目暙は、ほずんどのオヌケストレヌション プラットフォヌム䞊でタスクのスケゞュヌリング、スケヌリング、監芖を自動化できるコンテナを䜜成するこずです。原則は順䞍同で説明したす。

単䞀懞念原則 (SCP)

この原則は倚くの点で単䞀責任原則ず䌌おいたす。 SRP)、これは SOLID セットの䞀郚であり、すべおのオブゞェクトが XNUMX ぀の責任を持぀必芁があり、その責任はクラス内に完党にカプセル化されなければならないず芏定しおいたす。 SRP のポむントは、すべおの責任が倉化の理由であり、クラスには倉化の理由が XNUMX ぀だけ存圚する必芁があるずいうこずです。

SCP では、OOP クラスず比范しおコンテナのより高いレベルの抜象化ずより広範な目的を瀺すために、「責任」ずいう蚀葉の代わりに「懞念」ずいう蚀葉を䜿甚したす。そしお、SRP の目暙が倉曎の理由を XNUMX ぀だけにするこずである堎合、SCP の背埌には、コンテナの再利甚ず眮き換えの機胜を拡匵したいずいう願望がありたす。 SRP に埓っお、単䞀の問題を解決し、機胜的に完党な方法で実行するコンテナヌを䜜成するず、そのコンテナヌ むメヌゞをさたざたなアプリケヌション コンテキストで再利甚できる可胜性が高たりたす。

SCP の原則では、各コンテナは XNUMX ぀の問題を解決し、それを適切に実行する必芁があるず芏定されおいたす。さらに、コンテナ䞖界の SCP は、OOP 䞖界の SRP よりも達成が簡単です。これは、コンテナは通垞 XNUMX ぀のプロセスを実行し、ほずんどの堎合、このプロセスが XNUMX ぀のタスクを解決するためです。

コンテナヌ マむクロサヌビスが耇数の問題を䞀床に解決する必芁がある堎合は、サむドカヌ テンプレヌトず init コンテナヌ テンプレヌトを䜿甚しお、マむクロサヌビスを単䞀タスクのコンテナヌに分割し、XNUMX ぀のポッド (コンテナヌ プラットフォヌム デプロむメントの単䜍) 内で組み合わせるこずができたす。さらに、SCP を䜿甚するず、叀いコンテナ (Web サヌバヌやメッセヌゞ ブロヌカヌなど) を、同じ問題を解決しながら機胜が拡匵されたり拡匵性が向䞊した新しいコンテナに簡単に眮き換えるこずができたす。

クラりドネむティブ アプリを構築するための 5 ぀の垞識原則

高可芳枬性の原則 (HOP)

アプリケヌションをパッケヌゞ化しお実行するための統䞀された方法ずしおコンテナヌが䜿甚される堎合、アプリケヌション自䜓はブラック ボックスずしお扱われたす。ただし、これらがクラりド コンテナヌの堎合は、コンテナヌの状態を監芖し、必芁に応じお適切なアクションを実行するために特別な API をランタむムに提䟛する必芁がありたす。これがなければ、コンテナの曎新ずラむフサむクル管理の自動化を統合するこずができず、その結果、゜フトりェア システムの安定性ず䜿いやすさが悪化したす。

クラりドネむティブ アプリを構築するための 5 ぀の垞識原則
実際には、コンテナ化されたアプリケヌションには、少なくずも、ラむブネス テストや準備テストなど、さたざたな皮類のヘルス チェック甚の API が必芁です。アプリケヌションがそれ以䞊のこずを行うず䞻匵する堎合は、その状態を監芖する他の手段を提䟛する必芁がありたす。たずえば、Fluentd、Logstash、およびその他の同様のツヌルを䜿甚したログ集玄のために、STDERR および STDOUT 経由で重芁なむベントをログに蚘録したす。 OpenTracing、Prometheus などのトレヌスおよびメトリクス収集ラむブラリずの統合も可胜です。

䞀般に、アプリケヌションは䟝然ずしおブラック ボックスずしお扱うこずができたすが、可胜な限り最善の方法で監芖および管理するためにプラットフォヌムが必芁ずするすべおの API をアプリケヌションに提䟛する必芁がありたす。

ラむフサむクル適合原則 (LCP)

LCP は HOP の察極です。 HOP では、コンテナヌが読み取り API をプラットフォヌムに公開する必芁があるず芏定されおいたすが、LCP では、アプリケヌションがプラットフォヌムから情報を受け入れるこずができる必芁がありたす。さらに、コンテナはむベントを受信するだけでなく、むベントに適応、぀たり反応する必芁もありたす。したがっお、この原則の名前は、プラットフォヌムに API の曞き蟌みを提䟛するための芁件ず考えるこずができたす。

クラりドネむティブ アプリを構築するための 5 ぀の垞識原則
プラットフォヌムには、コンテナヌのラむフサむクルの管理に圹立぀さたざたな皮類のむベントがありたす。ただし、それらのどれを認識し、どのように反応するかを決定するのはアプリケヌション自䜓次第です。

䞀郚のむベントが他のむベントよりも重芁であるこずは明らかです。たずえば、アプリケヌションがクラッシュをあたり蚱容しない堎合は、signal: terminate (SIGTERM) メッセヌゞを受け入れ、できるだけ早く終了ルヌチンを開始しお、SIGTERM の埌に来る signal: kill (SIGKILL) をキャッチする必芁がありたす。

さらに、PostStart や PreStop などのむベントは、アプリケヌションのラむフサむクルにずっお重芁な堎合がありたす。たずえば、アプリケヌションを起動した埌、リク゚ストに応答するたでにりォヌムアップ時間が必芁になる堎合がありたす。たたは、アプリケヌションはシャットダりン時に特別な方法でリ゜ヌスを解攟する必芁がありたす。

画像䞍倉原則 (IIP)

コンテナ化されたアプリケヌションは、異なる環境で実行される堎合でも、構築埌は倉曎されないこずが䞀般的です。そのため、実行時にデヌタ ストレヌゞを倖郚化する (぀たり、そのために倖郚ツヌルを䜿甚する) 必芁があり、環境ごずに固有のコンテナを倉曎たたは䜜成するのではなく、倖郚の実行時固有の構成に䟝存する必芁がありたす。アプリケヌションに倉曎を加えた埌は、コンテナヌ むメヌゞを再構築しお、䜿甚されおいるすべおの環境にデプロむする必芁がありたす。ずころで、IT システムを管理する際にも、サヌバヌやむンフラストラクチャの䞍倉性の原則ずしお知られる同様の原則が䜿甚されたす。

IIP の目暙は、異なるランタむム環境に察しお個別のコンテナヌ むメヌゞが䜜成されるのを防ぎ、適切な環境固有の構成ずずもにどこでも同じむメヌゞを䜿甚できるようにするこずです。この原則に埓うこずで、アプリケヌション曎新のロヌルバックやロヌルフォワヌドなど、クラりド システムの自動化の芳点から重芁なプラクティスを実装できたす。

クラりドネむティブ アプリを構築するための 5 ぀の垞識原則

プロセス䜿い捚お原則 (PDP)

コンテナの最も重芁な特性の XNUMX ぀はその䞀時性です。コンテナのむンスタンスは䜜成も砎棄も簡単なので、い぀でも簡単に別のむンスタンスに眮き換えるこずができたす。このような眮き換えには、保守性テストの倱敗、アプリケヌションのスケヌリング、別のホストぞの転送、プラットフォヌム リ゜ヌスの枯枇、その他の状況など、さたざたな理由が考えられたす。

クラりドネむティブ アプリを構築するための 5 ぀の垞識原則
その結果、コンテナ化されたアプリケヌションは、䜕らかの倖郚手段を䜿甚しお状態を維持するか、そのために冗長性のある内郚分散スキヌムを䜿甚する必芁がありたす。さらに、アプリケヌションは迅速に起動しお迅速にシャットダりンし、突然の臎呜的なハヌドりェア障害に備えなければなりたせん。

この原則の実装に圹立぀ XNUMX ぀の実践方法は、コンテナヌを小さく保぀こずです。クラりド環境では、コンテナ むンスタンスを起動するホストを自動的に遞択できるため、コンテナが小さいほど起動が速くなりたす。ネットワヌク経由でタヌゲット ホストにコピヌするだけで高速になりたす。

自己封じ蟌め原則 (S-CP)

この原則に埓っお、組み立お段階で、必芁なすべおのコンポヌネントがコンテナに含たれたす。コンテナヌは、システムに玔粋な Linux カヌネルのみがあるこずを前提ずしお構築する必芁があるため、必芁な远加ラむブラリはすべおコンテナヌ自䜓に配眮する必芁がありたす。たた、察応するプログラミング蚀語のランタむム、アプリケヌション プラットフォヌム (必芁な堎合)、コンテナ アプリケヌションの実行䞭に必芁ずなるその他の䟝存関係なども含める必芁がありたす。

クラりドネむティブ アプリを構築するための 5 ぀の垞識原則

䟋倖は、環境ごずに異なる構成であり、Kubernetes ConfigMap などを介しお実行時に提䟛する必芁がありたす。

アプリケヌションには、コンテナ化された Web アプリケヌション内の個別の DBMS コンテナなど、いく぀かのコンテナ化されたコンポヌネントが含たれる堎合がありたす。 S-CP 原則によれば、これらのコンテナは XNUMX ぀に結合されるべきではなく、DBMS コンテナにはデヌタベヌスの操䜜に必芁なものがすべお含たれ、Web アプリケヌション コンテナには Web の操䜜に必芁なものがすべお含たれるように䜜成する必芁がありたす。アプリケヌション、同じ Web サヌバヌ。その結果、実行時に Web アプリケヌション コンテナは DBMS コンテナに䟝存し、必芁に応じお DBMS コンテナにアクセスしたす。

実行時制限原則 (RCP)

S-CP 原則は、コンテナヌの構築方法ずむメヌゞ バむナリに䜕を含めるべきかを定矩したす。しかし、コンテナは、ファむル サむズずいう XNUMX ぀の特性だけを備えた単なる「ブラック ボックス」ではありたせん。実行䞭、コンテナヌは、䜿甚されるメモリ量、CPU 時間、その他のシステム リ゜ヌスなどの他の偎面を持ちたす。

クラりドネむティブ アプリを構築するための 5 ぀の垞識原則
ここで RCP 原則が圹に立ちたす。これによれば、コンテナはシステム リ゜ヌスの芁件を満たしおプラットフォヌムに転送する必芁がありたす。各コンテナヌのリ゜ヌス プロファむル (必芁な CPU、メモリ、ネットワヌク、ディスク リ゜ヌスの量) を䜿甚しお、プラットフォヌムはスケゞュヌリングず自動スケヌリングを最適に実行し、IT 容量を管理し、コンテナヌの SLA レベルを維持できたす。

コンテナのリ゜ヌス芁件を満たすこずに加えお、アプリケヌションが独自の境界を超えないこずも重芁です。そうしないず、リ゜ヌス䞍足が発生したずきに、プラットフォヌムが終了たたは移行する必芁があるアプリケヌションのリストにそのリ゜ヌスを含める可胜性が高くなりたす。

クラりドファヌストに぀いお語るずき、私たちは働き方に぀いお話しおいたす。
䞊蚘では、クラりド環境向けの高品質のコンテナ アプリケヌションを構築するための方法論的基盀を確立する倚くの䞀般原則を定匏化したした。

これらの䞀般原則に加えお、コンテナヌを操䜜するための远加の高床な方法ずテクニックも必芁になるこずに泚意しおください。さらに、状況に応じお適甚する (たたは適甚しない) 必芁がある、より具䜓的な短い掚奚事項がいく぀かありたす。

  • むメヌゞのサむズを枛らすようにしおください。䞀時ファむルを削陀し、䞍芁なパッケヌゞをむンストヌルしないでください。コンテナヌのサむズが小さいほど、コンテナヌのアセンブルずネットワヌク経由のタヌゲット ホストぞのコピヌが速くなりたす。
  • 任意のナヌザヌ ID に泚目しおください。コンテナヌの起動に sudo コマンドや特別なナヌザヌ ID を䜿甚しないでください。
  • 重芁なポヌトにマヌクを付ける: 実行時にポヌト番号を蚭定できたすが、EXPOSE コマンドを䜿甚しお指定するこずをお勧めしたす。これにより、他の人やプログラムがむメヌゞを䜿甚しやすくなりたす。
  • 氞続デヌタをボリュヌムに保存する: コンテナヌが砎棄された埌も残すべきデヌタは、ボリュヌムに曞き蟌たれる必芁がありたす。
  • 画像メタデヌタを曞き蟌む: タグ、ラベル、泚釈により画像が䜿いやすくなりたす - 他の開発者はあなたに感謝するでしょう。
  • ホストずむメヌゞを同期する: 䞀郚のコンテナヌ化アプリケヌションでは、コンテナヌが時間やマシン ID などの特定の属性でホストず同期する必芁がありたす。
  • 結論ずしお、䞊蚘の原則をより効果的に実装するのに圹立぀テンプレヌトずベスト プラクティスを共有したす。
    www.slideshare.net/luebken/container-patterns
    docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices
    docs.projectatomic.io/container-best-practices
    docs.openshift.com/enterprise/3.0/creating_images/guidelines.html
    www.usenix.org/system/files/conference/hotcloud16/hotcloud16_burns.pdf
    leanpub.com/k8spatterns
    12factor.net

OpenShift Container Platform の新バヌゞョンに関するりェビナヌ – 4
11月11.00日XNUMX時XNUMX分

孊ぶ内容:

  • 䞍倉の Red Hat Enterprise Linux CoreOS
  • OpenShift サヌビス メッシュ
  • オペレヌタヌフレヌムワヌク
  • Knative フレヌムワヌク

出所 habr.com

コメントを远加したす