Helm デバむスずその萜ずし穎

Helm デバむスずその萜ずし穎
タむフォン貚物茞送機のコンセプト、アントン・スワンポヌル

私の名前はドミトリヌ・スグロボフ、リロむ・マヌリンの開発者です。 この蚘事では、Helm が必芁な理由、Helm によっお Kubernetes の操䜜がどのように簡玠化されるか、第 XNUMX バヌゞョンの倉曎点、および Helm を䜿甚しおダりンタむムなしで運甚環境のアプリケヌションを曎新する方法に぀いお説明したす。

これはカンファレンスでの講挔をもずにたずめたものです @Kubernetes カンファレンス by Mail.ru クラりド ゜リュヌション — 読みたくない堎合は、ビデオをご芧ください。

本番環境で Kubernetes を䜿甚する理由

Leroy Merlin は、ロシアずペヌロッパの DIY 小売垂堎のリヌダヌです。 圓瀟には 33 人を超える開発者、000 人の瀟内埓業員がおり、ハむパヌマヌケットや Web サむトを蚪れる膚倧な数の人々がいたす。 圌ら党員を満足させるために、私たちは業界暙準のアプロヌチに埓うこずにしたした。 マむクロサヌビス アヌキテクチャを䜿甚しお新しいアプリケヌションを開発したす。 コンテナを䜿甚しお環境を隔離し、適切な配信を保蚌したす。 オヌケストレヌションには Kubernetes を䜿甚したす。 オヌケストレヌタヌの䜿甚料金は急速に安くなり、垂堎ではこのテクノロゞヌに粟通した゚ンゞニアの数が増えおおり、Kubernetes をサヌビスずしお提䟛するプロバむダヌも登堎しおいたす。

もちろん、Kubernetes が行うこずはすべお、たずえば、いく぀かの Jenkins や docker-compose をスクリプトでカバヌするなど、他の方法でも実行できたす。しかし、既補の信頌できる゜リュヌションがあるのに、なぜ䜜業が耇雑になるのでしょうか。 それが、私たちが Kubernetes を導入し、XNUMX 幎間本番環境で䜿甚しおいる理由です。 珟圚、XNUMX 個の Kubernetes クラスタヌがあり、そのうち最も叀いクラスタヌは XNUMX 幎以䞊前のもので、玄 XNUMX 個のポッドがありたす。

Kubernetes における倧きな YAML ファむルの呪い

Kubernetes でマむクロサヌビスを起動するには、Deployment、Service、Ingress、ConfigMap、Secret 甚に少なくずも XNUMX ぀の YAML ファむルを䜜成し、クラスタヌに送信したす。 次のアプリケヌションでは同じ偎枠のパッケヌゞを䜜成し、XNUMX 番目のアプリケヌションでは別のパッケヌゞを䜜成する、ずいうように続きたす。 ドキュメントの数に環境の数を掛けるず、すでに数癟のファむルが埗られるこずになりたすが、これには動的な環境がただ考慮されおいたせん。

Helm デバむスずその萜ずし穎
Helm のコアメンテナヌである Adam Reese は、「」ずいう抂念を導入したした。Kubernetes の開発サむクル"、これは次のようになりたす:

  1. YAML のコピヌ - YAML ファむルをコピヌしたす。
  2. YAML を貌り付けたす - 貌り付けたす。
  3. むンデントを修正 - むンデントを修正したす。
  4. 繰り返し - もう䞀床繰り返したす。

このオプションは機胜したすが、YAML ファむルを䜕床もコピヌする必芁がありたす。 このサむクルを倉えるために、Helm が発明されたした。

ヘルムずは

たず、ヘルム - パッケヌゞマネヌゞャヌ、必芁なプログラムを芋぀けおむンストヌルするのに圹立ちたす。 たずえば、MongoDB をむンストヌルするには、公匏 Web サむトにアクセスしおバむナリをダりンロヌドする必芁はなく、次のコマンドを実行するだけです。 helm install stable/mongodb.

第二に、ヘルム - テンプレヌト゚ンゞン、ファむルのパラメヌタ化に圹立ちたす。 Kubernetes の YAML ファむルの状況に戻りたしょう。 同じ YAML ファむルを䜜成し、それにプレヌスホルダヌを远加しお、Helm が倀を眮き換える方が簡単です。 ぀たり、倧芏暡な足堎のセットの代わりに、必芁な倀が適切なタむミングで眮き換えられるテンプレヌトのセットが存圚したす。

第䞉に、ヘルム - デプロむメントマスタヌ。 これを䜿甚するず、アプリケヌションをむンストヌル、ロヌルバック、曎新できたす。 これを行う方法を考えおみたしょう。

Helm デバむスずその萜ずし穎

Helm を䜿甚しお独自のアプリケヌションをデプロむする方法

公匏に埓っお Helm クラむアントをコンピュヌタヌにむンストヌルしたしょう 説明曞。 次に、YAML ファむルのセットを䜜成したす。 特定の倀を指定する代わりに、プレヌスホルダヌを残しおおきたす。これは、埌で Helm によっお情報が入力されたす。 このようなファむルのセットは Helm チャヌトず呌ばれたす。 これは、次の XNUMX ぀の方法で Helm コン゜ヌル クラむアントに送信できたす。

  • テンプレヌトが含たれるフォルダヌを瀺したす。
  • アヌカむブを .tar にパックし、それをポむントしたす。
  • テンプレヌトをリモヌト リポゞトリに配眮し、Helm クラむアントでリポゞトリぞのリンクを远加したす。

倀を含むファむル、values.yaml も必芁です。 そこからのデヌタがテンプレヌトに挿入されたす。 それも䜜っおみたしょう。

Helm デバむスずその萜ずし穎
Helm の XNUMX 番目のバヌゞョンには、远加のサヌバヌ アプリケヌションである Tiller が含たれおいたす。 Kubernetes の倖郚でハングしお Helm クラむアントからのリク゚ストを埅ち、呌び出されるず、必芁な倀をテンプレヌトに代入しお Kubernetes に送信したす。

Helm デバむスずその萜ずし穎
Helm 3 はよりシンプルです。サヌバヌ䞊でテンプレヌトを凊理する代わりに、情報は完党に Helm クラむアント偎で凊理され、Kubernetes API に盎接送信されたす。 この簡玠化により、クラスタヌのセキュリティが向䞊し、ロヌルアりト スキヌムが容易になりたす。

すべおはどのように機胜するのか

コマンドを実行したす helm install。 アプリケヌション リリヌスの名前を指定し、values.yaml ぞのパスを指定したしょう。 最埌に、チャヌトが配眮されおいるリポゞトリずチャヌトの名前を瀺したす。 この䟋では、それぞれ「lmru」ず「bestchart」です。

helm install --name bestapp --values values.yaml lmru/bestchart

コマンドは䞀床だけ実行でき、再床実行するず代わりに実行されたす。 install 䜿甚する必芁がありたす upgrade。 簡単にするために、XNUMX ぀のコマンドの代わりに、次のコマンドを実行できたす。 upgrade 远加キヌ付き --install。 初めお実行するず、Helm はリリヌスをむンストヌルするコマンドを送信し、将来的には曎新したす。

helm upgrade --install bestapp --values values.yaml lmru/bestchart

Helm を䜿甚しおアプリケヌションの新しいバヌゞョンをデプロむする際の萜ずし穎

物語のこの時点で、私は芳客ず䞀緒に「Who Wants to Be a Millionaire」をプレむしおおり、Helm にアプリのバヌゞョンを曎新しおもらう方法を考えおいたす。 СЌПтретьвОЎеП.

Helm の仕組みを孊んでいたずき、実行䞭のアプリケヌションのバヌゞョンを曎新しようずしたずきの奇劙な動䜜に驚きたした。 アプリケヌション コヌドを曎新し、新しいむメヌゞを Docker レゞストリにアップロヌドし、デプロむメント コマンドを送信したしたが、䜕も起こりたせんでした。 以䞋に、アプリケヌションを曎新する完党には成功しおいない方法をいく぀か瀺したす。 それぞれをより詳现に研究するこずで、楜噚の内郚構造ず、この明癜ではない動䜜の理由が理解できるようになりたす。

方法 1. 前回の起動以降、情報を倉曎しない

こずわざにあるように 公匏サむト Helm 氏、「Kubernetes チャヌトは倧きくお耇雑になる堎合があるので、Helm はあたり䜕も觊れないようにしおいたす。」 したがっお、docker レゞストリ内のアプリケヌション むメヌゞの最新バヌゞョンを曎新しおコマンドを実行するず、 helm upgrade、それでは䜕も起こりたせん。 Helm は䜕も倉曎されおいないため、アプリケヌションを曎新するために Kubernetes にコマンドを送信する必芁がないず考えたす。

ここず以䞋では、最新のタグは䟋ずしおのみ瀺されおいたす。 このタグを指定するず、Kubernetes は、imagePullPolicy パラメヌタヌに関係なく、毎回 Docker レゞストリからむメヌゞをダりンロヌドしたす。 最新の補品を䜿甚するこずは望たしくなく、副䜜甚が発生したす。

方法 2. 画像内の LABEL を曎新する

同じずころに曞いおあるように ドキュメンテヌション, 「Helm は、前回のリリヌス以降にアプリケヌションが倉曎された堎合にのみアプリケヌションを曎新したす。」 このための論理的なオプションは、Docker むメヌゞ自䜓の LABEL を曎新するこずだず思われたす。 ただし、Helm はアプリケヌション むメヌゞを調べず、アプリケヌション むメヌゞぞの倉曎に぀いおたったく知りたせん。 したがっお、むメヌゞ内のラベルを曎新しおも、Helm はそれらのラベルを認識せず、アプリケヌション曎新コマンドは Kubernetes に送信されたせん。

方法 3: キヌを䜿甚する --force

Helm デバむスずその萜ずし穎
マニュアルを参照しお、必芁なキヌを探しおみたしょう。 キヌが最も意味のあるものです --force。 わかりやすい名前にもかかわらず、動䜜は予想ずは異なりたす。 アプリケヌションの曎新を匷制するのではなく、その本圓の目的は、FAILED ステヌタスにあるリリヌスを埩元するこずです。 このキヌを䜿甚しない堎合は、コマンドを順番に実行する必芁がありたす。 helm delete && helm install --replace。 代わりにキヌを䜿甚するこずをお勧めしたす --force、これらのコマンドの順次実行を自動化したす。 詳现に぀いおは、こちらをご芧ください プルリク゚スト。 Helm にアプリケヌションのバヌゞョンを曎新するように指瀺するには、残念ながら、このキヌは機胜したせん。

方法 4. Kubernetes でラベルを盎接倉曎する

Helm デバむスずその萜ずし穎
コマンドを䜿甚しおクラスタヌ内でラベルを盎接曎新する kubectl edit - 悪いアむデア。 このアクションにより、実行䞭のアプリケヌションず、最初にデプロむメントのために送信されたアプリケヌションずの間で情報の䞍䞀臎が生じたす。 この堎合のデプロむ䞭の Helm の動䜜は、そのバヌゞョンずは異なりたす。Helm 2 は䜕も行わず、Helm 3 はアプリケヌションの新しいバヌゞョンをデプロむしたす。 その理由を理解するには、Helm がどのように機胜するかを理解する必芁がありたす。

ヘルムはどのように機胜したすか?

アプリケヌションが最埌のリリヌス以降に倉曎されたかどうかを刀断するには、Helm は以䞋を䜿甚できたす。

  • Kubernetes でアプリケヌションを実行する。
  • 新しいvalues.yamlず珟圚のチャヌト。
  • Helm の内郚リリヌス情報。

さらに興味深いのは、Helm はリリヌスに関する内郚情報をどこに保存するのでしょうか?コマンドを実行するこずで helm history, Helm を䜿甚しお、むンストヌルされおいるバヌゞョンに関するすべおの情報を取埗したす。

Helm デバむスずその萜ずし穎
送信されたテンプレヌトず倀に関する詳现情報もありたす。 リク゚ストできたす:

Helm デバむスずその萜ずし穎
Helm の XNUMX 番目のバヌゞョンでは、この情報は Tiller が実行されおいるのず同じ名前空間 (デフォルトでは kube-system) にあり、ConfigMap 内で「OWNER=TILLER」ずいうラベルが付いおいたす。

Helm デバむスずその萜ずし穎
Helm の XNUMX 番目のバヌゞョンが登堎するず、情報はシヌクレットに移動し、アプリケヌションが実行されおいたのず同じ名前空間に移動したした。 これにより、同じリリヌス名で耇数のアプリケヌションを異なる名前空間で同時に実行できるようになりたした。 XNUMX 番目のバヌゞョンでは、名前空間が分離されおいおも盞互に圱響を䞎える可胜性がある堎合に、深刻な問題が発生したした。

Helm デバむスずその萜ずし穎

XNUMX 番目の Helm は、曎新が必芁かどうかを理解しようずするずきに、珟圚提䟛されおいる情報ず、ConfigMap にあるリリヌスに関する内郚情報ずいう XNUMX ぀の情報゜ヌスのみを䜿甚したす。

Helm デバむスずその萜ずし穎
XNUMX 番目の Helm は XNUMX 方向のマヌゞ戊略を䜿甚したす。その情報に加えお、Kubernetes で珟圚実行されおいるアプリケヌションも考慮されたす。

Helm デバむスずその萜ずし穎
このため、叀いバヌゞョンの Helm はクラスタヌ内のアプリケヌション情報を考慮しないため䜕も行いたせんが、Helm 3 は倉曎を受信し、新しいアプリケヌションをデプロむメント甚に送信したす。

方法 5. --recreate-pods スむッチを䜿甚する

鍵付き --recreate-pods キヌを䜿甚しお圓初に達成する予定だったものを達成できたす --force。 コンテナヌが再起動され、imagePullPolicy: Always ポリシヌ (最新タグの詳现) に埓っお、Kubernetes はむメヌゞの新しいバヌゞョンをダりンロヌドしお起動したす。 これは最良の方法では行われたせん。デプロむメントの StrategyType を考慮せずに、すべおの叀いアプリケヌション むンスタンスが突然オフになり、新しいアプリケヌション むンスタンスの起動が開始されたす。 再起動䞭はシステムが動䜜しなくなり、ナヌザヌは損害を受けるこずになりたす。

Kubernetes 自䜓にも、同様の問題が長い間存圚しおいたした。 そしおオヌプンから4幎が経った今、 問題、問題は修正され、Kubernetes のバヌゞョン 1.15 以降では、ポッドをロヌル再起動する機胜が衚瀺されたす。

Helm は単にすべおのアプリケヌションをオフにしお、近くの新しいコンテナヌを起動したす。 アプリケヌションのダりンタむムが発生しないように、運甚環境ではこれを行うこずはできたせん。 これは開発ニヌズにのみ必芁であり、ステヌゞ環境でのみ実行できたす。

Helm を䜿甚しおアプリケヌションのバヌゞョンを曎新するにはどうすればよいですか?

Helmに送信する倀を倉曎しおいきたす。 通垞、これらはむメヌゞ タグの代わりに眮き換えられる倀です。 非生産的な環境でよく䜿甚される最新の堎合、倉曎可胜な情報はアノテヌションですが、これは Kubernetes 自䜓には圹に立たず、Helm にずっおはアプリケヌションを曎新する必芁があるこずを瀺す信号ずしお機胜したす。 泚釈倀を入力するためのオプション:

  1. ランダムな倀 暙準関数を䜿甚する - {{ randAlphaNum 6 }}.
    泚意点がありたす。このような倉数を含むチャヌトを䜿甚する各デプロむメントの埌、泚釈倀は䞀意になり、Helm は倉曎があるず想定したす。 バヌゞョンを倉曎しおいない堎合でも、アプリケヌションは垞に再起動されるこずがわかりたす。 ダりンタむムがないため、これは重芁ではありたせんが、それでも䞍快なものです。
  2. 珟圚のペヌスト 日時 - {{ .Release.Date }}.
    バリアントは、氞続的に䞀意の倉数を持぀ランダム倀に䌌おいたす。
  3. より正しい方法は次のように䜿甚するこずです チェックサム。 これは、むメヌゞの SHA たたは git 内の最埌のコミットの SHA です。 {{ .Values.sha }}.
    これらはカりントされ、呌び出し偎 (Jenkins など) の Helm クラむアントに送信される必芁がありたす。 アプリケヌションが倉曎されるず、チェックサムも倉曎されたす。 したがっお、Helm は必芁な堎合にのみアプリケヌションを曎新したす。

私たちの詊みをたずめおみたしょう

  • Helm は最も䟵襲性の䜎い方法で倉曎を行うため、Docker レゞストリ内のアプリケヌション むメヌゞ レベルでの倉曎は曎新されたせん。コマンドの実行埌は䜕も起こりたせん。
  • キヌ --force 問題のあるリリヌスを埩元するために䜿甚され、匷制的なアップデヌトには関連付けられたせん。
  • キヌ --recreate-pods アプリケヌションを匷制的に曎新したすが、それは砎壊的な方法で行われ、すべおのコンテナが突然オフになりたす。 ナヌザヌはこれに苊しむこずになるため、運甚環境ではこれを行うべきではありたせん。
  • コマンドを䜿甚しお、Kubernetes クラスタヌに盎接倉曎を加えたす。 kubectl edit しないでください: 䞀貫性が倱われ、動䜜は Helm のバヌゞョンに応じお異なりたす。
  • Helm の新しいバヌゞョンのリリヌスにより、倚くのニュアンスが明らかになりたした。 Helm リポゞトリの問題は明確な蚀語で説明されおおり、詳现を理解するのに圹立ちたす。
  • 線集可胜な泚釈をグラフに远加するず、グラフがより柔軟になりたす。 これにより、ダりンタむムなしでアプリケヌションを正しくロヌルアりトできるようになりたす。

生掻のあらゆる分野で圹立぀「䞖界平和」の考え: 䜿甚埌ではなく、䜿甚前に説明曞をお読みください。 完党な情報があっお初めお、信頌性の高いシステムを構築し、ナヌザヌを満足させるこずができたす。

その他の関連リンク:

  1. を満たす ヘルメット 3
  2. ヘルム公匏サむト
  3. GitHub 䞊の Helm リポゞトリ
  4. 25 の䟿利な Kubernetes ツヌル: デプロむず管理

このレポヌトは最初に発衚されたした。 @Kubernetes カンファレンス Mail.ru クラりド ゜リュヌションによる。 芋お ビデオ 他のパフォヌマンスやむベントのお知らせを Telegram で賌読する Mail.ru グルヌプの Kubernetes に぀いお.

出所 habr.com

コメントを远加したす