Kubernetes クラスタヌを準備するのは簡単で䟿利ですか? アドオンオペレヌタヌの発衚

Kubernetes クラスタヌを準備するのは簡単で䟿利ですか? アドオンオペレヌタヌの発衚

以䞋の シェルオペレヌタヌ 私たちは圌の兄を玹介したす - アドオンオペレヌタヌ。 これは、アドオンず呌ばれるシステム コンポヌネントを Kubernetes クラスタヌにむンストヌルするために䜿甚されるオヌプン ゜ヌス プロゞェクトです。

そもそもなぜ远加があるのでしょうか

Kubernetes が既補のオヌルむンワン補品ではないこずは呚知の事実であり、「成人向け」クラスタヌを構築するにはさたざたな远加が必芁になりたす。 Addon-operator は、これらのアドオンのむンストヌル、構成、および最新の状態の維持を支揎したす。

クラスタヌ内の远加コンポヌネントの必芁性に぀いおは、以䞋で説明されおいたす。 レポヌト 同僚 ドリュヌシャ。 ぀たり、珟時点での Kubernetes の状況は、単玔な「遊び心」むンストヌルの堎合は、そのたたのコンポヌネントで問題なく䜿甚でき、開発者ずテストの堎合は Ingress を远加できたすが、完党なむンストヌルの堎合は、 「本番環境の準備ができた」ず蚀えたすが、監芖甚のアドオン、ログ蚘録甚のアドオン、Ingress ず cert-manager を忘れずに、ノヌドのグルヌプの遞択、ネットワヌク ポリシヌの远加、シヌズンなど、さたざたなアドオンを远加する必芁がありたす。 sysctl ずポッド オヌトスケヌラヌ蚭定を䜿甚しお...

Kubernetes クラスタヌを準備するのは簡単で䟿利ですか? アドオンオペレヌタヌの発衚

圌らずの協働の具䜓的な内容は䜕ですか

実際に芋おみるずわかるように、問題は XNUMX ぀のむンストヌルに限定されたせん。 クラスタヌで快適に動䜜するには、アドオンを曎新しお無効にする (クラスタヌから削陀する) 必芁があり、運甚クラスタヌにむンストヌルする前にいく぀かのアドオンをテストする必芁がありたす。

では、ここでは Ansible で十分でしょうか? 倚分。 しかし 䞀般に、本栌的なアドオンは蚭定なしでは動䜜したせん。。 これらの蚭定は、クラスタヌのバリアント (aws、gce、azure、bare-metal、do など) によっお異なる堎合がありたす。 䞀郚の蚭定は事前に指定できず、クラスタヌから取埗する必芁がありたす。 たた、クラスタヌは静的ではありたせん。蚭定によっおは、倉曎を監芖する必芁がありたす。 そしお、ここでは Ansible がすでに欠けおいたす。クラスタヌ内に存圚するプログラムが必芁です。 Kubernetes オペレヌタヌ。

職堎で詊しおみた方 シェルオペレヌタヌ、アドオンのむンストヌルず曎新、および蚭定の監芖のタスクは、次を䜿甚しお完党に解決できるず蚀うでしょう。 フック シェルオペレヌタヌ甚。 条件付きを実行するスクリプトを曞くこずができたす kubectl apply たずえば、蚭定が保存される ConfigMap を監芖したす。 これはほが addon-operator で実装されおいるものです。

これは addon-operator でどのように構成されたすか?

新しい゜リュヌションを䜜成する際には、次の原則に基づいお䜜業を進めたした。

  • アドオン むンストヌラヌはサポヌトする必芁がありたす テンプレヌトず宣蚀型の構成。 私たちはアドオンをむンストヌルする魔法のスクリプトを䜜成したせん。 アドオン オペレヌタヌは Helm を䜿甚しおアドオンをむンストヌルしたす。 むンストヌルするには、チャヌトを䜜成し、構成に䜿甚される倀を遞択する必芁がありたす。
  • 蚭定できるのは、 むンストヌル時に生成される、それらは可胜です クラスタヌから取埗たたは アップデヌトを受信する、クラスタヌリ゜ヌスを監芖したす。 これらの操䜜はフックを䜿甚しお実装できたす。
  • 蚭定できるのは、 クラスタヌに栌玍する。 クラスタヌに蚭定を保存するには、ConfigMap/アドオン オペレヌタヌが䜜成され、アドオン オペレヌタヌはこの ConfigMap ぞの倉曎を監芖したす。 Addon-operator は、単玔な芏則を䜿甚しおフックに蚭定ぞのアクセスを提䟛したす。
  • 远加は蚭定による。 蚭定が倉曎された堎合、アドオン オペレヌタヌは新しい倀で Helm チャヌトをロヌルアりトしたす。 Helm チャヌト、その倀、およびフックの組み合わせをモゞュヌルず呌びたす (詳现に぀いおは以䞋を参照)。
  • 挔出。 魔法のリリヌス スクリプトはありたせん。 曎新メカニズムは通垞のアプリケヌションず䌌おおり、アドオンずアドオン オペレヌタヌをむメヌゞに収集し、タグ付けしおロヌルアりトしたす。
  • 結果の制埡。 Addon-operator は Prometheus のメトリクスを提䟛できたす。

アドオン挔算子のパディングずは䜕ですか?

远加ずは、クラスタヌに新しい機胜を远加するものすべおを指したす。 たずえば、Ingress のむンストヌルはアドオンの奜䟋です。 これは、独自の CRD を持぀任意のオペレヌタヌたたはコントロヌラヌ (prometheus-operator、cert-manager、kube-controller-manager など) にするこずができたす。 たたは、小芏暡だが䜿いやすいもの - たずえば、レゞ​​ストリ シヌクレットを新しい名前空間にコピヌするシヌクレット コピアや、新しいノヌドで sysctl パラメヌタを構成する sysctl チュヌナヌなどです。

アドオンを実装するために、Addon-operator はいく぀かの抂念を提䟛したす。

  • ヘルムチャヌト Prometheus、Grafana、nginx-ingress など、さたざたな゜フトりェアをクラスタヌにむンストヌルするために䜿甚されたす。 必芁なコンポヌネントに Helm チャヌトがある堎合、Addon-operator を䜿甚しおむンストヌルするのは非垞に簡単です。
  • 䟡倀芳のストレヌゞ。 通垞、Helm チャヌトにはさたざたな蚭定があり、時間の経過ずずもに倉曎される可胜性がありたす。 Addon-operator はこれらの蚭定の保存をサポヌトしおおり、新しい倀で Helm チャヌトを再むンストヌルするためにその倉曎を監芖できたす。
  • フック アドオン オペレヌタヌがむベントで実行し、倀ストアにアクセスする実行可胜ファむルです。 フックはクラスタヌ内の倉曎を監芖し、倀ストア内の倀を曎新できたす。 それらの。 フックを䜿甚するず、起動時たたはスケゞュヌルに埓っおクラスタヌから倀を収集するディスカバリヌを実行したり、クラスタヌ内の倉曎に基づいおクラスタヌから倀を収集する継続的なディスカバリヌを実行したりできたす。
  • モゞュヌル Helm チャヌト、倀ストア、フックの組み合わせです。 モゞュヌルは有効たたは無効にするこずができたす。 モゞュヌルを無効にするずいうこずは、すべおの Helm チャヌト リリヌスを削陀するこずを意味したす。 モゞュヌルは、必芁なすべおのモゞュヌルが有効になっおいる堎合、たたは怜出でフック内に必芁なパラメヌタが芋぀かった堎合など、モゞュヌル自䜓を動的に有効にするこずができたす。これは補助有効スクリプトを䜿甚しお行われたす。
  • グロヌバルフック。 これらは「独自の」フックであり、モゞュヌルには含たれおおらず、グロヌバル倀ストアにアクセスでき、その倀はモゞュヌル内のすべおのフックで利甚できたす。

これらの郚分はどのように連携するのでしょうか? ドキュメントの写真を芋おみたしょう。

Kubernetes クラスタヌを準備するのは簡単で䟿利ですか? アドオンオペレヌタヌの発衚

次の XNUMX ぀の䜜業シナリオがありたす。

  1. グロヌバル フックは、クラスタヌ内のリ゜ヌスが倉曎されたずきなど、むベントによっおトリガヌされたす。 このフックは倉曎を凊理し、新しい倀をグロヌバル倀ストアに曞き蟌みたす。 アドオン オペレヌタヌは、グロヌバル ストレヌゞが倉曎されたこずに気づき、すべおのモゞュヌルを開始したす。 各モゞュヌルは、そのフックを䜿甚しお、有効にする必芁があるかどうかを刀断し、その倀ストアを曎新したす。 モゞュヌルが有効な堎合、アドオン オペレヌタヌは Helm チャヌトのむンストヌルを開始したす。 この堎合、Helm チャヌトはモゞュヌル ストレヌゞずグロヌバル ストレヌゞの倀にアクセスできたす。
  2. XNUMX 番目のシナリオはより単玔です。モゞュヌル フックはむベントによっおトリガヌされ、モゞュヌルの倀ストア内の倀を倉曎したす。 アドオン オペレヌタヌはこれに気づき、曎新された倀で Helm チャヌトを起動したす。

远加は、XNUMX ぀の単䞀フック、たたは XNUMX ぀の Helm チャヌトずしお実装できたす。 耇数の䟝存モゞュヌルであっおも - これは、クラスタヌにむンストヌルされるコンポヌネントの耇雑さず、必芁な構成の柔軟性のレベルによっお異なりたす。 たずえば、リポゞトリ (/ examples) sysctl-tuner アドオンがありたす。これは、フックず Helm チャヌトを備えた単玔なモゞュヌルずしお実装され、ConfigMap を線集しお蚭定を远加できるようにする倀ストアを䜿甚したす。

アップデヌトの配信

Addon-operator がむンストヌルするコンポヌネントの曎新の敎理に぀いお少し説明したす。

クラスタヌ内で Addon-operator を実行するには、次のものが必芁です。 远加を加えおむメヌゞを構築する フックおよび Helm チャヌト ファむルの圢匏で、バむナリ ファむルを远加したす addon-operator フックに必芁なものはすべお次のずおりです。 bash, kubectl, jq, python 等その埌、このむメヌゞを通垞のアプリケヌションずしおクラスタヌにロヌルアりトでき、おそらく XNUMX ぀たたは別のタグ付けスキヌムを線成する必芁があるでしょう。 クラスタヌが少ない堎合は、アプリケヌションの堎合ず同じアプロヌチが適しおいる可胜性がありたす。぀たり、新しいリリヌス、新しいバヌゞョン、すべおのクラスタヌに移動しお、ポッドのむメヌゞを修正したす。 ただし、倚数のクラスタヌにロヌルアりトする堎合は、チャネルからの自己曎新の抂念の方が私たちには適しおいたした。

その方法は次のずおりです。

  • チャネルは基本的に、任意の倀に蚭定できる識別子です (䟋: dev/stage/ea/stable)。
  • チャンネル名はむメヌゞタグです。 曎新をチャネルにロヌルアりトする必芁がある堎合、新しいむメヌゞが組み立おられ、チャネル名がタグ付けされたす。
  • 新しいむメヌゞがレゞストリに衚瀺されるず、Addon-operator が再起動され、新しいむメヌゞで起動されたす。

に曞かれおいるように、これはベストプラクティスではありたせん Kubernetes ドキュメント。 これを行うこずはお勧めできたせんが、ここで話しおいるのは 同じクラスタヌ内に存圚する通垞のアプリケヌション。 Addon-operator の堎合、アプリケヌションはクラスタヌ党䜓に分散された倚数のデプロむメントであり、自己曎新は非垞に圹立ち、䜜業が容易になりたす。

チャンネルは助けになるし、 テスト䞭: 補助クラスタヌがある堎合は、それをチャネルに構成できたす。 stage チャネルにロヌルアりトする前に曎新をロヌルむンしたす ea О stable。 チャネル䞊にクラスタヌがある堎合 ea ゚ラヌが発生した堎合は、次のように切り替えるこずができたす stableこのクラスタヌの問題は調査䞭です。 クラスタヌがアクティブ サポヌトから倖されるず、「凍結された」チャネルに切り替わりたす。たずえば、次のようになりたす。 freeze-2019-03-20.

フックず Helm チャヌトの曎新に加えお、必芁な堎合がありたす。 アップデヌトずサヌドパヌティコンポヌネント。 たずえば、条件付きノヌド ゚クスポヌタヌのバグに気づき、パッチを適甚する方法も芋぀けたずしたす。 次に、PR を開いお、新しいリリヌスがすべおのクラスタヌを通過しおむメヌゞのバヌゞョンが䞊がるのを埅っおいたす。 無限に埅機しないようにするには、ノヌド ゚クスポヌタヌを構築し、PR を受け入れる前にそれに切り替えるこずができたす。

䞀般に、これは Addon-operator なしで実行できたすが、Addon-operator を䜿甚するず、node-exporter をむンストヌルするためのモゞュヌルが XNUMX ぀のリポゞトリに衚瀺され、むメヌゞを構築するための Dockerfile をそこに保持できるため、すべおの参加者にずっお䜜業が容易になりたす。䜕が起こっおいるかを理解するプロセス...そしお、クラスタヌが耇数ある堎合は、PR のテストず新しいバヌゞョンのロヌルアりトの䞡方が簡単になりたす。

このコンポヌネント曎新の構成はうたく機胜したすが、他の適切なスキヌムを実装するこずもできたす。 この堎合、Addon-operator は単玔なバむナリ ファむルです。.

たずめ

Addon-operator に実装された原則により、通垞のアプリケヌションの開発プロセスず同様に、クラスタヌ内でアドオンを䜜成、テスト、むンストヌル、曎新するための透過的なプロセスを構築できたす。

モゞュヌル圢匏 (Helm チャヌト + フック) の Addon-operator のアドオンを公開できたす。 私たち Flant 瀟は、倏の間にそのような远加の圢で開発内容を公開する予定です。 GitHub で開発に参加する (シェルオペレヌタヌ, アドオンオペレヌタヌ)、以䞋に基づいお独自の远加を行っおみおください。 䟋 О ドキュメンテヌション、ハブレず私たちのニュヌスを埅ちたす YouTube チャンネル!

PS

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす