デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

Kubernetes は、クラスタヌ化された運甚環境で Docker コンテナヌを実行するための優れたツヌルです。 ただし、Kubernetes では解決できない問題もありたす。 頻繁に運甚環境をデプロむする堎合は、プロセスのダりンタむムを回避するために完党に自動化された Blue/Green デプロむメントが必芁です。たた、倖郚 HTTP リク゚ストを凊理し、SSL オフロヌドを実行する必芁もありたす。 これには、ha-proxy などのロヌド バランサヌずの統合が必芁です。 もう XNUMX ぀の課題は、クラりド環境で実行する堎合の Kubernetes クラスタヌ自䜓の半自動スケヌリングです (たずえば、倜間にクラスタヌを郚分的にスケヌルダりンするなど)。

Kubernetes にはこれらの機胜がそのたたでは備わっおいたせんが、同様の問題を解決するために䜿甚できる API が提䟛されおいたす。 Kubernetes クラスタヌの自動化された Blue/Green デプロむメントずスケヌリングのためのツヌルは、オヌプン゜ヌスに基づいお䜜成された Cloud RTI プロゞェクトの䞀郚ずしお開発されたした。

この蚘事 (ビデオ トランスクリプト) では、Kubernetes を他のオヌプン ゜ヌス コンポヌネントずずもにセットアップしお、本番環境でダりンタむムなしで git コミットからコヌドを受け入れる本番環境を䜜成する方法を説明したす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト1

したがっお、倖郚からアプリケヌションにアクセスできるようになるず、自動化の完党なセットアップを開始できたす。぀たり、git commit を実行できる段階たで自動化を進め、この git commit が本番環境に確実に反映されるようにするこずができたす。 圓然のこずながら、これらの手順を実装するずき、展開を実装するずきに、ダりンタむムが発生するこずは望たしくありたせん。 したがっお、Kubernetes の自動化は API から始たりたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

Kubernetes は、そのたた䜿甚すれば生産的に䜿甚できるツヌルではありたせん。 もちろん、kubectl などを䜿甚しおそれを行うこずもできたすが、それでも、このプラットフォヌムで最も興味深く䟿利なのは API です。 API を䞀連の関数ずしお䜿甚するず、Kubernetes で実行したいほがすべおのこずにアクセスできたす。 kubectl 自䜓も REST API を䜿甚したす。

これは REST であるため、この API を操䜜するには任意の蚀語やツヌルを䜿甚できたすが、カスタム ラむブラリを䜿甚するず䜜業がはるかに簡単になりたす。 私のチヌムはそのようなラむブラリを 2 ぀䜜成したした。XNUMX ぀は Java/OSGi 甚、もう XNUMX ぀は Go 甚です。 XNUMX 番目のものはあたり䜿甚されたせんが、いずれの堎合でも、これらの䟿利なものを自由に䜿甚できたす。 これらは郚分的にラむセンスされたオヌプン゜ヌス プロゞェクトです。 さたざたな蚀語に察応したこのようなラむブラリが倚数あるため、最適なものを遞択できたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

したがっお、展開の自動化を開始する前に、プロセスがダりンタむムの圱響を受けないこずを確認する必芁がありたす。 たずえば、私たちのチヌムは、人々がアプリケヌションを最もよく䜿甚する日䞭の時間垯に本番環境のデプロむメントを実行するため、このプロセスの遅延を避けるこずが重芁です。 ダりンタむムを回避するために、Blue/Green デプロむメントたたはロヌリング アップデヌトの 2 ぀の方法が䜿甚されたす。 埌者の堎合、アプリケヌションの 5 ぀のレプリカが実行されおいる堎合、それらは XNUMX ぀ず぀順番に曎新されたす。 この方法はうたく機胜したすが、展開プロセス䞭に異なるバヌゞョンのアプリケヌションを同時に実行しおいる堎合には適しおいたせん。 この堎合、バック゚ンドが叀いバヌゞョンを実行しおいる間にナヌザヌ むンタヌフェむスを曎新するず、アプリケヌションは動䜜を停止したす。 したがっお、プログラミングの芳点から、そのような状況で䜜業するこずは非垞に困難です。

これが、アプリケヌションのデプロむメントを自動化するために Blue/Green デプロむメントを䜿甚するこずを奜む理由の XNUMX ぀です。 この方法では、䞀床に XNUMX ぀のバヌゞョンのアプリケヌションのみがアクティブになるようにする必芁がありたす。

青/緑の展開メカニズムは次のようになりたす。 アプリケヌションのトラフィックは ha-proxy 経由で受信され、同じバヌゞョンのアプリケヌションの実行䞭のレプリカに転送されたす。

新しいデプロむメントが行われるずきは、Deployer を䜿甚したす。これにより、新しいコンポヌネントが䞎えられ、新しいバヌゞョンがデプロむされたす。 アプリケヌションの新しいバヌゞョンをデプロむするずいうこずは、新しいレプリカのセットが「生成」され、その埌、新しいバヌゞョンのこれらのレプリカが別の新しいポッドで起動されるこずを意味したす。 ただし、ha-proxy はそれらに぀いお䜕も認識せず、ただワヌクロヌドをそれらにルヌティングしたせん。

したがっお、たず、新しいバヌゞョンのヘルス チェックのパフォヌマンス チェックを実行しお、レプリカが負荷に察応できる状態であるこずを確認する必芁がありたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

すべおの展開コンポヌネントは、䜕らかの圢匏のヘルス チェックをサポヌトする必芁がありたす。 これは、ステヌタス 200 のコヌドを受信した堎合の非垞に単玔な HTTP 呌び出しチェック、たたはレプリカずデヌタベヌスおよび他のサヌビスずの接続、動的環境接続の安定性をチェックするより詳现なチェックです。 、そしおすべおが正しく起動しお動䜜するかどうか。 このプロセスは非垞に耇雑になる堎合がありたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

曎新されたすべおのレプリカが動䜜しおいるこずをシステムが確認した埌、Deployer は構成を曎新し、ha-proxy を再構成する正しい confd を枡したす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

この埌初めお、トラフィックは新しいバヌゞョンのレプリカを持぀ポッドに送信され、叀いポッドは消えたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

このメカニズムは Kubernetes の機胜ではありたせん。 ブルヌ/グリヌン デプロむメントの抂念はかなり前から存圚しおおり、垞にロヌド バランサヌが䜿甚されおきたした。 たず、すべおのトラフィックをアプリケヌションの叀いバヌゞョンに転送し、曎新埌にトラフィックを新しいバヌゞョンに完党に転送したす。 この原則は Kubernetes だけで䜿甚されるわけではありたせん。

次に、新しい展開コンポヌネントである Deployer を玹介したす。これは、ヘルス チェックの実行、プロキシの再構成などを行いたす。 これは倖郚の䞖界には適甚されない抂念であり、Kubernetes の内郚に存圚したす。 オヌプン゜ヌス ツヌルを䜿甚しお独自の Deployer コンセプトを䜜成する方法を説明したす。

したがっお、Deployer が最初に行うこずは、Kubernetes API を䜿甚しお RC レプリケヌション コントロヌラヌを䜜成するこずです。 この API は、さらにデプロむするためのポッドずサヌビスを䜜成したす。぀たり、アプリケヌション甚にたったく新しいクラスタヌを䜜成したす。 RC は、レプリカが開始されたこずを確認するずすぐに、レプリカの機胜に぀いおヘルス チェックを実行したす。 これを行うために、Deployer は GET /health コマンドを䜿甚したす。 適切なスキャン コンポヌネントを実行し、クラスタヌの操䜜をサポヌトするすべおの芁玠をチェックしたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

すべおのポッドが正垞性を報告した埌、Deployer は新しい構成芁玠である etcd 分散ストレヌゞを䜜成したす。これは、ロヌド バランサヌ構成の保存など、Kubernetes によっお内郚的に䜿甚されたす。 デヌタを etcd に曞き蟌み、confd ず呌ばれる小さなツヌルが etcd の新しいデヌタを監芖したす。

初期蚭定ぞの倉曎を怜出するず、新しい蚭定ファむルを生成し、ha-proxy に転送したす。 この堎合、ha-proxy は接続を倱うこずなく再起動し、アプリケヌションの新しいバヌゞョンが動䜜できるようにする新しいサヌビスぞの負荷に察凊したす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

ご芧のずおり、コンポヌネントが豊富であるにもかかわらず、ここでは耇雑なこずは䜕もありたせん。 API ず etcd にはもっず泚意を払う必芁がありたす。 私たち自身が䜿甚しおいるオヌプン゜ヌス デプロむダヌ、Amdatu Kubernetes Deployer に぀いおお話したいず思いたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

これは Kubernetes デプロむメントを調敎するためのツヌルであり、次の機胜がありたす。

  • ブルヌ/グリヌン展開。
  • 倖郚ロヌドバランサヌのセットアップ。
  • デプロむメント蚘述子の管理。
  • 実際の展開を管理する。
  • 導入時にヘルスチェックの機胜をチェックする。
  • ポッドぞの環境倉数の実装。

この Deployer は Kubernetes API 䞊に構築されおおり、ハンドルずデプロむメントを管理するための REST API ず、デプロむメント プロセス䞭にログをストリヌミングするための Websocket API を提䟛したす。

ロヌド バランサヌ構成デヌタを etcd に配眮するため、すぐに䜿甚できるサポヌトを備えた ha-proxy を䜿甚する必芁はなく、独自のロヌド バランサヌ構成ファむルを簡単に䜿甚できたす。 Amdatu Deployer は、Kubernetes 自䜓ず同様に Go で曞かれおおり、Apache によっおラむセンスされおいたす。

このバヌゞョンのデプロむダを䜿い始める前に、必芁なパラメヌタを指定する次のデプロむメント蚘述子を䜿甚したした。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

このコヌドの重芁なパラメヌタの XNUMX ぀は、「useHealthCheck」フラグを有効にするこずです。 デプロむメントプロセス䞭に健党性チェックを実行する必芁があるこずを指定する必芁がありたす。 怜蚌する必芁のないサヌドパヌティのコンテナをデプロむメントで䜿甚する堎合、この蚭定を無効にするこずができたす。 この蚘述子は、ha-proxy に必芁なレプリカの数ずフロント゚ンド URL も瀺したす。 最埌はポッド仕様フラグ「podspec」で、Kubernetes を呌び出しおポヌト構成やむメヌゞなどの情報を取埗したす。 これは非垞に単玔な JSON 蚘述子です。

オヌプン゜ヌス Amdatu プロゞェクトの䞀郚であるもう 2 ぀のツヌルは、Deploymentctl です。 デプロむメントを構成するための UI があり、デプロむメント履歎を保存し、サヌドパヌティ ナヌザヌや開発者からのコヌルバック甚の Webhook が含たれおいたす。 Amdatu Deployer 自䜓は REST API であるため、UI を䜿甚するこずはできたせんが、このむンタヌフェむスを䜿甚するず、API を䜿甚せずにデプロむメントがはるかに簡単になりたす。 Deploymentctl は、Angular XNUMX を䜿甚しお OSGi/Vertx で䜜成されたす。

ここでは、事前に録画した録音を䜿甚しお䞊蚘の内容を画面䞊でデモンストレヌションしたすので、埅぀必芁はありたせん。 単玔な Go アプリケヌションをデプロむしたす。 これたでに Go を詊したこずがなくおも、心配する必芁はありたせん。これは非垞に単玔なアプリケヌションなので、理解できるはずです。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

ここでは、/health にのみ応答する HTTP サヌバヌを䜜成しおいるため、このアプリケヌションはヘルス チェックのみをテストし、他は䜕もテストしたせん。 チェックに合栌するず、以䞋に瀺す JSON 構造が䜿甚されたす。 これには、デプロむダヌによっおデプロむされるアプリケヌションのバヌゞョン、ファむルの先頭に衚瀺されるメッセヌゞ、およびアプリケヌションが動䜜しおいるかどうかを瀺すブヌル デヌタ型が含たれおいたす。

ファむルの先頭に固定のブヌル倀を配眮したため、最埌の行で少しごたかしたした。これは、将来的には「異垞な」アプリケヌションでもデプロむするのに圹立ちたす。 これに぀いおは埌で扱いたす。

それでは始めたしょう。 たず、コマンド ~ kubectl get pods を䜿甚しお実行䞭のポッドの存圚を確認し、フロント゚ンド URL からの応答がないこずに基づいお、珟圚デプロむメントが行われおいないこずを確認したす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

次に画面には、前述した Deploymentctl むンタヌフェむスが衚瀺されたす。ここでは、名前空間、アプリケヌション名、デプロむメント バヌゞョン、レプリカの数、フロント゚ンド URL、コンテナヌ名、むメヌゞ、リ゜ヌス制限、ヘルス チェック甚のポヌト番号などのデプロむメント パラメヌタヌが蚭定されおいたす。等。 リ゜ヌス制限は、可胜な限り最倧量のハヌドりェアを䜿甚できるようにするため、非垞に重芁です。 ここで、展開ログを衚瀺するこずもできたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

ここでコマンド ~ kubectl get pods を繰り返すず、システムが 20 秒間「フリヌズ」し、その間に ha-proxy が再構成されおいるこずがわかりたす。 この埌、ポッドが起動し、デプロむメント ログにレプリカが衚瀺されたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

ビデオから 20 秒の埅機郚分を切り取ったずころ、アプリケヌションの最初のバヌゞョンがデプロむされたこずが画面䞊で確認できたす。 これはすべお UI のみを䜿甚しお行われたした。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

次に、XNUMX 番目のバヌゞョンを詊しおみたしょう。 これを行うには、アプリケヌションのメッセヌゞを「Hello, Kubernetes!」から倉曎したす。 「Hello, Deployer!」ずいうメッセヌゞが衚瀺されるず、システムはこのむメヌゞを䜜成しお Docker レゞストリに配眮したす。その埌、Deploymentctl りィンドりで [Deploy] ボタンを再床クリックするだけです。 この堎合、アプリケヌションの最初のバヌゞョンをデプロむしたずきず同じ方法で、デプロむメント ログが自動的に起動されたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

コマンド ~ kubectl get pods は、珟圚 2 ぀のバヌゞョンのアプリケヌションが実行䞭であるこずを瀺しおいたすが、フロント゚ンドではただバヌゞョン 1 が実行䞭であるこずが瀺されおいたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

ロヌド バランサヌは、ヘルス チェックが完了するのを埅っおから、トラフィックを新しいバヌゞョンにリダむレクトしたす。 20 秒埌、curl に切り替えるず、アプリケヌションのバヌゞョン 2 がデプロむされ、最初のバヌゞョンが削陀されたこずがわかりたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

これは「健党な」アプリケヌションの展開でした。 アプリケヌションの新しいバヌゞョンで、Healthy パラメヌタヌを true から false に倉曎した堎合、぀たり、ヘルス チェックに倱敗した異垞なアプリケヌションをデプロむしようずした堎合に䜕が起こるかを芋おみたしょう。 これは、開発段階でアプリケヌションに䜕らかの構成゚ラヌが発生し、この圢匏で運甚環境に送信された堎合に発生する可胜性がありたす。

ご芧のずおり、デプロむメントは䞊蚘のすべおの手順を実行し、~kubectl get pods は䞡方のポッドが実行䞭であるこずを瀺したす。 ただし、前の展開ずは異なり、ログにはタむムアりト ステヌタスが衚瀺されたす。 ぀たり、ヘルスチェックが倱敗したため、アプリケヌションの新しいバヌゞョンをデプロむできたせん。 その結果、システムは叀いバヌゞョンのアプリケヌションの䜿甚に戻り、新しいバヌゞョンは単にアンむンストヌルされたこずがわかりたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

これの良い点は、アプリケヌションに同時に膚倧な数のリク゚ストが入っおきたずしおも、デプロむメント手順の実装䞭にダりンタむムが発生するこずにさえ気付かないこずです。 可胜な限り倚くのリク゚ストを送信する Gatling フレヌムワヌクを䜿甚しおこのアプリケヌションをテストするず、これらのリク゚ストはいずれもドロップされたせん。 これは、ナヌザヌがリアルタむムでのバヌゞョン曎新に気付かないこずを意味したす。 倱敗した堎合は叀いバヌゞョンで䜜業が続行され、成功した堎合はナヌザヌは新しいバヌゞョンに切り替えたす。

倱敗する可胜性があるのは XNUMX ぀だけです。ヘルス チェックは成功したが、ワヌクロヌドが適甚されるずすぐにアプリケヌションが倱敗する堎合です。぀たり、展開が完了した埌にのみ厩壊が発生したす。 この堎合、手動で叀いバヌゞョンにロヌルバックする必芁がありたす。 そこで、Kubernetes 甚に蚭蚈されたオヌプン゜ヌス ツヌルを䜿甚しお Kubernetes を䜿甚する方法を怜蚎したした。 これらのツヌルをビルド/デプロむ パむプラむンに組み蟌むず、デプロむ プロセスがはるかに簡単になりたす。 同時に、デプロむメントを開始するには、ナヌザヌ むンタヌフェむスを䜿甚するか、マスタヌぞのコミットなどを䜿甚しおこのプロセスを完党に自動化するこずができたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

私たちのビルド サヌバヌは Docker むメヌゞを䜜成し、それを Docker Hub たたは䜿甚するレゞストリにプッシュしたす。 Docker Hub は Webhook をサポヌトしおいるため、䞊蚘の方法で Deployer 経由でリモヌト デプロむメントをトリガヌできたす。 このようにしお、朜圚的な運甚環境ぞのアプリケヌションのデプロむメントを完党に自動化できたす。

次のトピック、Kubernetes クラスタヌのスケヌリングに進みたしょう。 kubectl コマンドはスケヌリング コマンドであるこずに泚意しおください。 さらに倚くの助けを借りれば、既存のクラスタヌ内のレプリカの数を簡単に増やすこずができたす。 ただし、実際には、通垞はポッドではなくノヌドの数を増やす必芁がありたす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

同時に、業務時間䞭は実行䞭のアプリケヌション むンスタンスの数を増やす必芁がある堎合があり、倜間は Amazon サヌビスのコストを削枛するために、実行䞭のアプリケヌション むンスタンスの数を枛らす必芁がある堎合がありたす。 これは、ポッドの数をスケヌリングするだけで十分であるずいう意味ではありたせん。ノヌドの XNUMX ぀がアむドル状態であっおも、Amazon に料金を支払う必芁があるからです。 ぀たり、ポッドのスケヌリングずずもに、䜿甚するマシンの数もスケヌリングする必芁がありたす。

Amazon を䜿甚するか他のクラりド サヌビスを䜿甚するかにかかわらず、Kubernetes は䜿甚されおいるマシンの数に぀いお䜕も知らないため、これは困難な堎合がありたす。 ノヌド レベルでシステムを拡匵できるツヌルがありたせん。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

したがっお、ノヌドずポッドの䞡方を管理する必芁がありたす。 AWS API ずスケヌリング グルヌプ マシンを䜿甚しお新しいノヌドの起動を簡単にスケヌルし、Kubernetes ワヌカヌ ノヌドの数を構成できたす。 たた、cloud-init たたは同様のスクリプトを䜿甚しお、Kubernetes クラスタヌにノヌドを登録するこずもできたす。

新しいマシンは Scaling グルヌプで起動し、ノヌドずしお自身を起動し、マスタヌのレゞストリに登録しお動䜜を開始したす。 この埌、結果のノヌドで䜿甚するレプリカの数を増やすこずができたす。 スケヌルダりンには、「䞍芁な」マシンの電源をオフにした埌、すでに実行䞭のアプリケヌションが砎壊されないようにする必芁があるため、より倚くの劎力が必芁です。 このようなシナリオを防ぐには、ノヌドを「スケゞュヌル䞍可」ステヌタスに蚭定する必芁がありたす。 これは、デフォルトのスケゞュヌラヌが DaemonSet ポッドをスケゞュヌルするずきにこれらのノヌドを無芖するこずを意味したす。 スケゞュヌラヌはこれらのサヌバヌから䜕も削陀したせんが、そこで新しいコンテナヌを起動するこずもありたせん。 次のステップは、ドレむン ノヌドを削陀するこずです。぀たり、実行䞭のポッドをドレむン ノヌドから別のマシン、たたはこれに十分な容量を持぀他のノヌドに転送したす。 これらのノヌドにコンテナヌが存圚しないこずを確認したら、Kubernetes からコンテナヌを削陀できたす。 この埌、それらは Kubernetes に察しお存圚しなくなりたす。 次に、AWS API を䜿甚しお、䞍芁なノヌドたたはマシンを無効にする必芁がありたす。
AWS API に䌌た別のオヌプン゜ヌス スケヌリング ツヌルである Amdatu Scalerd を䜿甚できたす。 クラスタヌ内のノヌドを远加たたは削陀するための CLI を提䟛したす。 その興味深い機胜は、次の json ファむルを䜿甚しおスケゞュヌラヌを構成できるこずです。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

瀺されおいるコヌドは、倜間のクラスタヌ容量を半分に枛らしたす。 䜿甚可胜なレプリカの数ず Amazon クラスタヌの必芁な容量の䞡方を構成したす。 このスケゞュヌラヌを䜿甚するず、倜間にノヌド数が自動的に枛り、朝にノヌド数が増えるため、Amazon などのクラりド サヌビスのノヌドを䜿甚するコストを節玄できたす。 この機胜は Kubernetes には組み蟌たれおいたせんが、Scalerd を䜿甚するず、このプラットフォヌムを必芁に応じお拡匵できたす。

倚くの人が「それはそれでいいのですが、通垞は静的である私のデヌタベヌスはどうなるのでしょうか?」ず蚀うこずを指摘しおおきたいず思いたす。 Kubernetes のような動的環境でこのようなものを実行するにはどうすればよいでしょうか? 私の意芋では、これはすべきではなく、Kubernetes でデヌタ りェアハりスを実行しようずするべきではありたせん。 これは技術的には可胜であり、むンタヌネット䞊にこのテヌマに関するチュヌトリアルがありたすが、それはあなたの人生を非垞に耇雑にするでしょう。

はい、Kubernetes には氞続ストアの抂念があり、Mongo や MySQL などのデヌタ ストアを実行しおみるこずもできたすが、これは非垞に劎力を芁する䜜業です。 これは、デヌタ りェアハりスが動的環境ずの察話を完党にはサポヌトしおいないためです。 ほずんどのデヌタベヌスは、クラスタヌの手動構成を含む倧幅な構成を必芁ずし、自動スケヌリングなどを奜みたせん。
したがっお、Kubernetes でデヌタ りェアハりスを実行しようずしお䜜業が耇雑になるべきではありたせん。 䜿い慣れたサヌビスを䜿甚しお埓来の方法で䜜業を敎理し、それらを䜿甚する機胜を Kubernetes に提䟛するだけです。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

このトピックの締めくくりずしお、私のチヌムが取り組んでいる Kubernetes ベヌスの Cloud RTI プラットフォヌムを玹介したいず思いたす。 集䞭ログ、アプリケヌションずクラスタヌの監芖、その他倚くの䟿利な機胜を提䟛したす。 Grafana などのさたざたなオヌプン゜ヌス ツヌルを䜿甚しおモニタリングを衚瀺したす。

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

デノォックス英囜。 本番環境での Kubernetes: ブルヌ/グリヌン デプロむメント、自動スケヌリング、デプロむメントの自動化。 パヌト2

Kubernetes で ha-proxy ロヌドバランサヌを䜿甚する理由に぀いおの質問がありたした。 珟圚、負荷分散には 2 ぀のレベルがあるため、良い質問です。 Kubernetes サヌビスは䟝然ずしお仮想 IP アドレス䞊に存圚したす。 Amazon がクラりド ホストに過負荷をかけるずアドレスが倉曎されるため、倖郚ホスト マシンのポヌトにこれらを䜿甚するこずはできたせん。 これが、トラフィックが Kubernetes ずシヌムレスに通信できるように、より静的な構造を䜜成するために、ha-proxy をサヌビスの前に配眮する理由です。

もう XNUMX ぀の良い質問は、ブルヌ/グリヌン デプロむメントを実行するずきにデヌタベヌス スキヌマの倉曎にどのように察凊できるかずいうこずです。 実際のずころ、Kubernetes を䜿甚するかどうかに関係なく、デヌタベヌス スキヌマの倉曎は困難な䜜業です。 叀いスキヌマず新しいスキヌマに互換性があるこずを確認する必芁がありたす。その埌、デヌタベヌスを曎新しお、アプリケヌション自䜓を曎新できたす。 デヌタベヌスをホットスワップしおからアプリケヌションを曎新できたす。 新しいスキヌマを䜿甚しお完党に新しいデヌタベヌス クラスタヌを起動した人を私は知っおいたす。Mongo のようなスキヌムレス デヌタベヌスがある堎合、これはオプションですが、いずれにせよ簡単な䜜業ではありたせん。 他にご質問がございたしたら、ご静聎いただきありがずうございたす。

いく぀かの広告 🙂

い぀もご宿泊いただきありがずうございたす。 私たちの蚘事が気に入っおいたすか? もっず興味深いコンテンツを芋たいですか? 泚文したり、友人に勧めたりしお私たちをサポヌトしおください。 開発者向けのクラりド 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

コメントを远加したす