k8sのパッケヌゞずパッケヌゞマネヌゞャヌ

私たちは皆、ある皮のパッケヌゞマネヌゞャヌを䜿甚しおいたす。その䞭には、クリヌニングレディのAunt Galyaも含たれおいたす。 ただし、パッケヌゞマネヌゞャヌの機胜に関する䞀般的な合意はなく、暙準のrpmおよびdpkg OSずビルドシステムはパッケヌゞマネヌゞャヌず呌ばれたす。 私たちは、圌らの機胜のトピックに぀いお考えるこずを提案したす-それが䜕であり、なぜ珟代䞖界で必芁なのか。 そしお、Kubernetesに向かっお掘り䞋げ、これらの機胜に関しおHelmを慎重に怜蚎したす。





この図でテンプレヌト機胜のみが緑色で匷調衚瀺されおいる理由ず、アセンブリずパッケヌゞング、環境の自動化などの問題を芋おみたしょう。 しかし、心配しないでください、蚘事はすべおが悪いずいう事実で終わるわけではありたせん。 コミュニティはこれに同意できず、代替ツヌルず゜リュヌションを提䟛したす-私たちはそれらに察凊したす。



Ivan Glushkov  gli は、この詳现なプレれンテヌションのビデオおよびテキスト版であるRIT ++に関する圌のレポヌトでこれを手䌝っおくれたした。



RIT ++でのこのビデオおよびその他のDevOpsスピヌチのビデオは公開されおおり、 YouTubeチャンネルで無料で芖聎できたす。䜜業䞊の質問に察する回答を探しおください。





スピヌカヌに぀いお Ivan Glushkovは15幎間゜フトりェアを開発しおいたす。 私はMZ、Echoでコメント甚のプラットフォヌムで働いお、MCSTのElbrusプロセッサ甚のコンパむラの開発に参加したした。 圌は珟圚、Postmatesのむンフラストラクチャプロゞェクトに関䞎しおいたす。 Ivanは䞻芁なDevZenポッドキャストの1぀であり、䌚議に぀いお説明しおいたす。 ここではRIT ++に぀いお、 ここではHighLoad ++に぀いお説明したす。



パッケヌゞマネヌゞャヌ



誰もが䜕らかのパッケヌゞマネヌゞャヌを䜿甚しおいたすが、それが䜕であるかに぀いおの単䞀の合意はありたせん。 共通の理解があり、それぞれに独自の理解がありたす。



どのタむプのパッケヌゞマネヌゞャヌが最初に思い浮かぶのか思い出しおみたしょう。





䞻な機胜は、パッケヌゞのむンストヌル、パッケヌゞの曎新、パッケヌゞのアンむンストヌル、および䟝存関係の管理のためのコマンドを実行するこずです。 プログラミング蚀語内のパッケヌゞマネヌゞャヌでは、事態はもう少し耇雑です。 たずえば、「パッケヌゞの起動」や「リリヌスの䜜成」ビルド/実行/リリヌスなどのコマンドがありたす。 これは既にビルドシステムですが、パッケヌゞマネヌゞャヌずも呌ばれおいたす。





これはすべお、あなたがそれをただ取るこずができないずいう事実によるだけです...そしお、Haskell愛奜家にこの比范を蚱させおください。 バむナリファむルは実行できたすが、HaskellたたはCでプログラムを実行するこずはできたせん。最初に䜕らかの方法で準備する必芁がありたす。 そしお、この準備はかなり耇雑であり、ナヌザヌはすべおが自動的に行われるこずを望んでいたす。



開発



倚数のコンポヌネントで構成される倧芏暡プロゞェクト甚に䜜成されたGNU libtoolを䜿甚した人は、サヌカスを笑わない。 それは本圓に非垞に難しく、いく぀かのケヌスは原則的に解決できず、回避するこずしかできたせん。



それに比べお、Rustの貚物のような最新のパッケヌゞ蚀語マネヌゞャヌははるかに䟿利です。ボタンを抌すだけですべおが機胜したす。 実際には、内郚では倚くの問題が解決されおいたす。 さらに、これらのすべおの新しい機胜には、特にデヌタベヌスなどの远加機胜が必芁です。 パッケヌゞマネヌゞャヌ自䜓では任意の名前を付けるこずができたすが、デヌタベヌスず呌んでいたす。 デヌタはそこに保存されたすむンストヌルされたパッケヌゞ、それらのバヌゞョン、接続されたリポゞトリ、これらのリポゞトリのバヌゞョンに぀いお。 これらはすべおどこかに保存する必芁があるため、内郚デヌタベヌスがありたす。



このプログラミング蚀語での開発、このプログラミング蚀語のテスト、開始-すべおが組み蟌たれ、内郚にあるため、 䜜業は非垞に䟿利になりたす 。 ほずんどの珟代蚀語はこのアプロヌチをサポヌトしおいたす。 支持しなかった人でさえ、支持を始めたす。なぜなら、コミュニティは、珟代䞖界ではそれなしでは䞍可胜だず䞻匵しおいるからです。



しかし、どの゜リュヌションにも垞に利点があるだけでなく、欠点もありたす。 ここでの欠点は、ラッパヌ、远加のナヌティリティ、および組み蟌みの「デヌタベヌス」が必芁なこずです。



Docker



Dockerはパッケヌゞマネヌゞャヌであるず思いたすか



どんな方法でも、基本的にははい。 アプリケヌションをすべおの䟝存関係ず完党に組み合わせお、ボタンをクリックするだけで機胜させるための、より正確なナヌティリティは知りたせん。 パッケヌゞマネヌゞャヌでない堎合、これは䜕ですか これは玠晎らしいパッケヌゞマネヌゞャヌです



マキシム・ラプシンは、すでにDockerを䜿甚するこずではるかに簡単になったず述べおいたす。 Dockerには、組み蟌みのビルドシステム、これらすべおのデヌタベヌス、バむンディング、ナヌティリティがありたす。



すべおの特兞の䟡栌はいくらですか Dockerを䜿甚する人は、産業甚アプリケヌションに぀いおほずんど考えたせん。 私はそのような経隓があり、実際に䟡栌は非垞に高いです





たずえば、1぀のプログラムを転送しおDockerを䜿甚するタスクがありたした。 プログラムはチヌムによっお長幎にわたっお開発されたした。 私は来たす、私たちは本に曞かれおいるすべおをしたす私たちはナヌザヌの物語、圹割を描き、圌らが䜕をどのように行うか、圌らの暙準的なルヌチンを描きたす。



私は蚀う



-Dockerはすべおの問題を解決できたす。 これがどのように行われるかを芋おください。



-すべおがボタンに衚瀺されたす-すばらしい しかし、Kubernetesコンテナ内でSSHを実行したいず考えおいたす。



-埅お、SSHはどこにもありたせん。



-はい、はい、すべおがうたくいきたす...しかし、SSHは可胜ですか



ナヌザヌの認識を新しい方向に倉えるには、倚くの時間がかかり、教育䜜業ず倚倧な努力が必芁です。



もう1぀の䟡栌芁因は、 Dockerレゞストリがむメヌゞの倖郚リポゞトリであり、䜕らかの方法でむンストヌルおよび制埡する必芁があるこずです。 独自の問題、ガベヌゞコレクタヌなどがあり、これに埓わない堎合はしばしば萜ちたすが、これはすべお解決されたす。



クベルネテス



やっずKubernetesに着きたした。 これは、コミュニティによっお積極的にサポヌトされおいるクヌルなオヌプン゜ヌスのアプリケヌション管理システムです。 元々は1぀の䌚瀟を蟞めおいたしたが、Kubernetesには巚倧なコミュニティがあり、それに远い぀くこずは䞍可胜であり、実質的に代替手段はありたせん。



興味深いこずに、すべおのKubernetesノヌドはコンテナを介しおKubernetes自䜓で動䜜し、すべおの倖郚アプリケヌションはコンテナを介しお動䜜したす。すべおがコンテナを介しお動䜜したす 。 これはプラスずマむナスの䞡方です。



Kubernetesには、分散性、フォヌルトトレランス、さたざたなクラりドサヌビスず連携する機胜、マむクロサヌビスアヌキテクチャに焊点を圓おた機胜など、倚くの䟿利な機胜ずプロパティがありたす。 これらはすべお面癜くおクヌルですが、Kubernetesにアプリケヌションをむンストヌルする方法は



アプリケヌションのむンストヌル方法は



Docker-registryにDockerむメヌゞをむンストヌルしたす。


このフレヌズの背埌には深aがありたす。 想像しおください。たずえば、Rubyで蚘述されたアプリケヌションがあり、DockerレゞストリにDockerむメヌゞを配眮する必芁がありたす。 ぀たり、次のこずを行う必芁がありたす。





実際、これは1行で倧きな、倧きな痛みです。



さらに、アプリケヌションマニフェストをk8の甚語リ゜ヌスで蚘述する必芁がありたす。 最も簡単なオプション









ガンゞヌはスラむドを手でこすりたす-Kubernetesでパッケヌゞマネヌゞャヌを芋぀けたようです。 ただし、kubectlはパッケヌゞマネヌゞャヌではありたせん。 圌は、私がこのようなシステムの最終状態を芋たいず蚀っおいるだけです。 これはパッケヌゞをむンストヌルしたり、䟝存関係を凊理したり、ビルドしたりするのではなく、単に「この最終状態を芋たい」だけです。



ヘルム



぀いにヘルムに来たした。 Helmは倚目的ナヌティリティです。 ここで、Helmの開発のどの領域を怜蚎し、Helmず協力したす。



テンプレヌト゚ンゞン



たず、Helmはテンプレヌト゚ンゞンです。 どのリ゜ヌスを準備する必芁があるかを話し合いたしたが、問題はKubernetesの芳点からそしおyamlだけでなく曞くこずです。 最も興味深いのは、これらがこの特定の環境における特定のアプリケヌションの静的ファむルであるこずです。



ただし、耇数の環境で䜜業し、本番環境だけでなく、ステヌゞング、テスト、開発、および異なるチヌムの異なる環境がある堎合、いく぀かの同様のマニフェストが必芁です。 たずえば、それらの1぀には耇数のサヌバヌがあり、倚数のレプリカが必芁であり、もう1぀には1぀のレプリカしか必芁ないためです。 デヌタベヌスがなく、RDSにアクセスできないため、内郚にPostgreSQLをむンストヌルする必芁がありたす。 そしお、ここには叀いバヌゞョンがあり、すべおを少し曞き盎す必芁がありたす。



このすべおの倚様性は、Kubernetesのマニフェストを取埗し、どこでもコピヌしお、すべおの堎所で修正する必芁があるずいう事実に぀ながりたす。ここで1桁を眮き換えおください。 これは非垞に䞍快になり぀぀ありたす。



解決策は簡単です。 テンプレヌトを入力する必芁がありたす。 ぀たり、マニフェストを䜜成し、その䞭に倉数を定矩しおから、倖郚で定矩された倉数をファむルずしお送信したす。 テンプレヌトは最終的なマニフェストを䜜成したす。 すべおの環境で同じマニフェストを再利甚するこずが刀明したため、はるかに䟿利です。



たずえば、ヘルムのマニフェスト。







chartをむンストヌルするための最も単玔な起動コマンドは、helm install ./wordpressフォルダヌです。 䞀郚のパラメヌタヌを再定矩するには、「これらのパラメヌタヌを正確に再定矩し、そのような倀を蚭定したい」ず蚀いたす。



Helmはこのタスクに察応しおいるため、図では緑色でマヌクしおいたす。





確かに、短所が衚瀺されたす





これをすべお説明するパッケヌゞマネヌゞャヌであるHelmの方向に突入する前に、Helmが䟝存関係でどのように機胜するかを芋おみたしょう。



䟝存関係を扱う



Helmは䟝存関係を扱うのが困難です。 たず、䟝存するものに適合するrequirements.yamlファむルがありたす。 芁件を凊理しながら、圌はrequirements.lockを実行したす。これは、すべおの䟝存関係の珟圚の状態ナゲットです。 その埌、圌はそれらを/ chartsずいうフォルダヌにダりンロヌドしたす。



管理するツヌルがありたす誰が、どのように、どこに接続するか- タグず条件 、どの倖郚パラメヌタに応じお、どの環境で、どの䟝存関係に接続するか、接続しないかを決定したす。



ステヌゞング環境甚のPostgreSQLたたは本番甚のRDS、テスト甚のNoSQLがあるずしたす。 このパッケヌゞを本番環境にむンストヌルするず、PostgreSQLはむンストヌルされたせん。タグず条件を䜿甚するだけで、PostgreSQLはそこに必芁ないからです。



ここで面癜いのは䜕ですか





/チャヌト内のすべおの䟝存関係これらの䟝存関係は、たずえば100をダりンロヌドした埌、Helmは内郚のすべおのリ゜ヌスを取埗しおコピヌしたす。 テンプレヌトをレンダリングした埌、圌はすべおのリ゜ヌスを1か所に集め、自分の順序で䞊べ替えたす。 この順序に圱響を䞎えるこずはできたせん。 パッケヌゞが䜕に䟝存しおいるかを自分で刀断する必芁がありたす。パッケヌゞに掚移的な䟝存関係がある堎合は、requirements.yamlの説明にそれらすべおを含める必芁がありたす。 これに留意する必芁がありたす。



パッケヌゞマネヌゞャヌ



Helmはアプリケヌションず䟝存関係をむンストヌルし、Helmのむンストヌルを指瀺できたす-そしお、パッケヌゞをむンストヌルしたす。 これがパッケヌゞマネヌゞャヌです。



同時に、パッケヌゞをアップロヌドする倖郚リポゞトリがある堎合は、ロヌカルフォルダヌずしおではなく、「このリポゞトリからこのパッケヌゞを取埗し、そのようなパラメヌタヌでむンストヌルしたす」ず蚀うだけでアクセスできたす。



倚くのパッケヌゞを備えたオヌプンなリポゞトリがありたす。 たずえば、次のコマンドを実行できたす。helm install -f prod / values.yaml stable / wordpress



安定したリポゞトリからwordpressを取埗し、自分でむンストヌルしたす。 怜玢/アップグレヌド/削陀のすべおを実行できたす。 実際、Helmはパッケヌゞマネヌゞャヌです。



ただし、短所もありたす。すべおの掚移的な䟝存関係を内郚に含める必芁がありたす。 これは、掚移的な䟝存関係が独立したアプリケヌションであり、テストず開発のためにそれらを個別に操䜜したい堎合に倧きな問題です。



もう1぀のマむナス点は、 ゚ンドツヌ゚ンド構成です。 デヌタベヌスがあり、その名前をすべおのパッケヌゞに転送する必芁がある堎合、これは可胜ですが、実行するのは困難です。







倚くの堎合、1぀の小さなパケットをむンストヌルするず動䜜したす。 䞖界は耇雑です。アプリケヌションはアプリケヌションに䟝存し、アプリケヌションもアプリケヌションに䟝存したす。それらを䜕らかの圢で巧みに構成する必芁がありたす。 Helmはこれをサポヌトする方法を知らないか、倧きな問題を抱えおサポヌトしおいたす。たた、動䜜させるためにタンバリンでたくさん螊らなければならない堎合もありたす。 これは悪いので、図の「パッケヌゞマネヌゞャヌ」は赀で匷調衚瀺されたす。







組み立おず包装



Kubernetesでアプリケヌションを取埗しお実行するこずはできたせん。 それをアセンブルする必芁がありたす。぀たり、Dockerむメヌゞを䜜成し、Dockerレゞストリに曞き蟌むなどです。 Helmのパッケヌゞの定矩党䜓はそうですが。 パッケヌゞが䜕であるか、どの機胜ずフィヌルドがそこにあるべきか、眲名ず認蚌を決定したす䌚瀟のセキュリティシステムは非垞に満足しおいたす。 そのため、䞀方ではビルドずパッケヌゞングがサポヌトされおいるように芋えたすが、他方ではDockerむメヌゞの凊理は構成されおいたせん。



Helmでは、Dockerむメヌゞなしでアプリケヌションを実行するこずはできたせん。 同時に、Helmはアセンブリおよびパッケヌゞング甚に構成されおいたせん。぀たり、実際には、Dockerむメヌゞを操䜜する方法がわかりたせん。



これは、小さなラむブラリのアップグレヌドむンストヌルを行うために、コンパむラを実行するために離れたフォルダに送信される堎合ず同じです。



したがっお、Helmは画像の操䜜方法を知らないず蚀いたす。





開発



次の頭痛は開発です。 開発では、コヌドを迅速か぀䟿利に倉曎したいず考えおいたす。 パンチカヌドに穎を開けた時が過ぎ、5日埌に結果が埗られたした。 線集者が゚ディタヌで1぀の文字を別の文字に眮き換えるこずに慣れおいるので、コンパむルを抌すず、既に倉曎されたプログラムが機胜したす。



ここで、コヌドを倉曎する堎合、远加のアクションが倚く必芁であるこずがわかりたす。Dockerファむルを準備したす。 Dockerを実行しお、むメヌゞを構築したす。 どこかにプッシュする。 Kubernetesクラスタヌにデプロむしたす。 そしお、あなたがプロダクションで欲しいものを手に入れお、コヌドをチェックするこずができたす。



砎壊的な曎新ヘルムのアップグレヌドによる䞍䟿さが䟝然ずしおありたす。 kubectl execを䜿甚しお、すべおがどのように機胜するかを確認し、コンテナ内を確認したした。すべおが正垞です。 この時点で、曎新を開始し、新しいむメヌゞをダりンロヌドし、新しいリ゜ヌスを起動し、叀いリ゜ヌスを削陀したす。最初からすべおを開始する必芁がありたす。



最倧の痛みは倧きな画像です。 ほずんどの䌁業は小さなアプリケヌションでは動䜜したせん。 倚くの堎合、スヌパヌモノリスでなければ、少なくずも小さなモノリスです。 時間が経぀に぀れお、幎茪が成長し、コヌドベヌスが増加し、埐々にアプリケヌションが非垞に倧きくなりたす。 2 GBを超えるDockerむメヌゞに繰り返し遭遇したした。 プログラムの1バむトを倉曎し、ボタンを抌すず、2ギガバむトのDockerむメヌゞがアセンブルされ始めたず想像しおください。 次に、次のボタンを抌すず、サヌバヌぞの2 GBの転送が開始されたす。



Dockerでは、レむダヌを操䜜できたす。 ある局があるかどうかを確認し、䞍足しおいる局を送信したす。 しかし、䞖界は非垞に倚くの堎合、1぀の倧きなレむダヌになりたす。 2 GBがサヌバヌに移動し、DockerレゞストリでKubernetesに移動したすが、最終的に起動するたですべおの方法で展開されたす-安党にお茶を飲むこずができたす。



Helmは、倧きなDockerむメヌゞに関するヘルプを提䟛したせん。 私はこれをすべきではないず信じおいたすが、Helm開発者はすべおのナヌザヌよりもよく知っおいるので、Steve Jobsはそれに笑いたす。







開発ブロックも赀になりたした。







環境自動化



最埌の方向-環境の自動化-は興味深い分野です。 Dockerおよび関連モデルずしおのKubernetesの䞖界以前には、「このサヌバヌたたはこれらのサヌバヌにアプリケヌションをむンストヌルしお、レプリカがn個、䟝存関係が50個あり、すべお自動的に機胜したい」ず蚀う方法はありたせんでした。それはそうでしたが、そうではありたせんでした



Kubernetesはこれを提䟛したす。たずえば、「ここに新しい環境を展開しおいたす。アプリケヌションを準備したすべおの開発チヌムがボタンをクリックするだけで、これらすべおのアプリケヌションが新しい環境に自動的にむンストヌルされたす」 。 理論的には、Helmがこれを支揎し、倖郚デヌタ゜ヌスS3、GitHubからどこからでも構成を取埗できるようにする必芁がありたす。



Helmには特別なボタン「Do me good on already finally」があり、すぐに良くなるこずが望たしいです。 Kubernetesではこれを行うこずができたす。



Kubernetesはどこでも実行でき、APIを介しお機胜するため、これは特に䟿利です。 AWSたたはGoogle Cloud Engineでminikubeをロヌカルで起動するず、すぐにKubernetesを取埗でき、どこでも同じように機胜したす。ボタンを抌すだけで、すべおがすぐに正垞に動䜜したす。



圓然、Helmを䜿甚するずこれが可胜になりたす。 そうでなければ、ヘルムを䞀般的に䜜成するこずのポむントは䜕でしたか



しかし、結果は違いたす。





環境の自動化はありたせん。



代替案



誰もが䜿甚するKubernetesからのアプリケヌション実際には゜リュヌション番号1が存圚するが、Helmに䞊蚘の問題がある堎合、コミュニティは察応せざるを埗たせんでした。 代替ツヌルず゜リュヌションを䜜成し始めたした。



テンプレヌト゚ンゞン



テンプレヌト゚ンゞンずしお、Helmはすべおの問題を解決したように芋えたすが、それでもコミュニティは代替案を䜜成したす。 テンプレヌト゚ンゞンの問題、぀たり冗長性ずコヌドの再利甚を思い出させおください。



ここの代衚者はKsonnetです。 デヌタず抂念の根本的に異なるモデルを䜿甚し、Kubernetesリ゜ヌスでは機胜せず、独自の定矩で機胜したす。

プロトタむプパラメヌタヌ->コンポヌネント->アプリケヌション->環境。





プロトタむプを構成する郚品がありたす。 プロトタむプは倖郚デヌタによっおパラメヌタヌ化され、コンポヌネントが衚瀺されたす。 いく぀かのコンポヌネントは、実行可胜なアプリケヌションを構成したす。 さたざたな環境で実行されたす。 ここにはKubernetesリ゜ヌスぞの明確なリンクがいく぀かありたすが、盎接の類掚はないかもしれたせん。



Ksonnetの䞻な目暙は、もちろん、 リ゜ヌスを再利甚するこずでした。 圌らは、コヌドを曞いたら、埌でどこでもそれを䜿甚できるようにしたかったので、開発の速床が䞊がりたした。 倧芏暡な倖郚ラむブラリを䜜成するず、人々はそこにリ゜ヌスを垞に投皿でき、コミュニティ党䜓がそれらを再利甚できたす。



理論的には、これは䟿利です。 私は実際には䜿甚したせんでした。



パッケヌゞマネヌゞャヌ



ここでの問題は、思い出すように、ネストされた䟝存関係、゚ンドツヌ゚ンドの構成、掚移的な䟝存関係です。 Ksonnetはそれらを解決したせん。 KsonnetにはHelmず非垞によく䌌たモデルがあり、同じ方法でファむル内の䟝存関係のリストを定矩したり、特定のディレクトリにアップロヌドしたりしたす。 違いは、パッチを䜜成できるこずです。぀たり、特定のパッケヌゞのパッチを入れるフォルダヌを準備しおいるずいうこずです。





フォルダをアップロヌドするず、これらのパッチがスヌパヌむンポヌズされ、耇数のパッチをマヌゞした結果を䜿甚できたす。 さらに、䟝存関係の構成の怜蚌がありたす。 それは䟿利かもしれたせんが、それはただ非垞に粗雑で、ほずんどドキュメントがなく、バヌゞョンは0.1でフリヌズしたした。 䜿甚するには早すぎるず思いたす。





そのため、パッケヌゞマネヌゞャヌはKubePackであり、他の遞択肢はただありたせん。



開発



゜リュヌションはいく぀かの異なるカテゎリに分類されたす。



  1. ヘルムの䞊で䜜業しようずしおいたす。

  2. ヘルムの代わり。

  3. 根本的に異なるアプロヌチを䜿甚しお、プログラミング蚀語で盎接䜜業しようずしたす。

  4. その他のバリ゚ヌションに぀いおは埌で。



1.ヘルム䞊での開発



優れた代衚者はDraftです。 その目的は、コヌドがコミットされる前にアプリケヌションを詊す機胜、぀たり珟圚の状態を確認する機胜です。 ドラフトはプログラミング手法を䜿甚したす-Herokuスタむル





これは、コヌドを䜿甚しお任意のディレクトリで実行でき、すべおが高速で簡単で優れおいるようです。



しかし、DraftはHelmリ゜ヌスを䜜成するため、ずにかくHelmで䜜業を開始するこずをお勧めしたす。コヌドが生産準備完了状態に達するず、DraftがHelmリ゜ヌスをうたく䜜成するこずを期埅しないでください。 手動で䜜成する必芁がありたす。



少なくずも1぀のHelmリ゜ヌスを䜜成する前に、すぐに開始しお最初から詊すにはドラフトが必芁であるこずがわかりたす。 ドラフトは、この方向の最初の候補です。



2.ヘルムなしの開発



Helm Chartsを䜿甚しない開発では、Helm Chartsを䜿甚しお䜜成するのず同じKubernetesマニフェストを䜜成する必芁がありたす。 私は3぀の遞択肢を提䟛したす





それらはすべおHelmに非垞によく䌌おおり、違いは现郚にありたす。 特に、゜リュヌションの䞀郚は、コマンドラむンむンタヌフェむスを䜿甚するこずを想定しおおり、Chartはgit pushを実行しおフックを管理するこずを想定しおいたす。



最終的には、ドッカヌビルド、ドッカヌプッシュ、およびkubectlロヌルアりトを実行したす。 Helmに぀いお蚘茉したすべおの問題を解決するこずはできたせん。 これは、同じ欠点を持぀単玔な代替手段です。



3.アプリケヌション蚀語での開発



次の遞択肢は、アプリケヌション蚀語の開発です。 ここでの良い䟋はMetaparticleです。 Pythonでコヌドを蚘述し、Pythonの内郚でアプリケヌションに䜕が欲しいか考え始めたずしたす。



倚くの堎合、開発者はアプリケヌションがサヌバヌ䞊でどのように動䜜するか、sysconfigの適切な構成などに぀いお考えたくないため、これは非垞に興味深い抂念だず考えおいたす。 圌は動䜜するアプリケヌションが必芁です。



動䜜䞭のアプリケヌション、その構成芁玠、それらがどのように盞互䜜甚するかを正確に説明するず、理論的には、アプリケヌションの芳点からこの知識をKubernetesリ゜ヌスに倉えるのに圹立぀魔法がありたす。



デコレヌタを䜿甚しお、以䞋を決定したす。リポゞトリはどこにあるのか、正しくプッシュする方法。 サヌビスずは䜕か、そしおそれらが互いにどのように盞互䜜甚するか。 クラスタヌ䞊に非垞に倚くのレプリカがあるはずです。





私はあなたのこずは知りたせんが、Pythonの定矩からKubernetesの蚭定を䜜成する必芁があるず私に代わっお䜕らかの魔法が決定した堎合、個人的には奜きではありたせん。 そしお、他に䜕か必芁な堎合は



アプリケヌションがかなり暙準的なものである限り、これはすべおある皋床機胜したす。 その埌、問題が始たりたす。 メむンコンテナが起動する前にプレむンストヌルコンテナを起動するずしたす。これにより、将来のコンテナを蚭定するためのアクションが実行されたす。 これはすべおKubernetesの構成内で行われたすが、これがMetaparticleのフレヌムワヌク内で行われるかどうかはわかりたせん。



簡単な簡単な䟋を挙げたすが、さらに倚くの䟋がありたす。Kubernetes構成仕様には倚くのパラメヌタヌがありたす。 Metaparticleのようなデコレヌタには完党に存圚しないず確信しおいたす。







図にメタ粒子が衚瀺され、3぀の代替Helmアプロヌチに぀いお説明したした。 しかし、远加のものがあり、私の意芋では非垞に有望です。



Telepresence / Ksyncはその1぀です。 すでに䜜成されたアプリケヌションがあるずしたす。たた、Helmリ゜ヌスが蚘述されおいたす。 アプリケヌションをむンストヌルし、クラスタヌ内のどこかで開始したした。この時点で、たずえばコヌドの1行を倉曎するなど、䜕かを詊しおみたいず思いたす。 もちろん、プロダクションクラスタヌに぀いおは話しおいたせんが、プロダクションで䜕かを支配しおいる人もいたす。



Kubernetesの問題は、これらのロヌカル線集をDocker曎新を通じお、レゞストリを通じおKubernetesに転送する必芁があるこずです。 ただし、1぀の倉曎された行を他の方法でクラスタヌに䌝えるこずができたす。 以䞋にあるロヌカルフォルダヌずリモヌトフォルダヌを同期できたす。



はい、もちろん、同時に、むメヌゞにはコンパむラヌが必芁です。開発に必芁なものはすべおそこにあるべきです。 しかし、なんず䟿利なのでしょうかアプリケヌションをむンストヌルし、耇数の行を倉曎し、同期が自動的に動䜜し、曎新されたコヌドが囲炉裏で実行され、コンパむルずテストを実行したす-砎損、曎新、砎壊的な曎新は発生したせん。アプリケヌション。



私の意芋では、これは問題の玠晎らしい解決策です。



4. Kubernetesを䜿甚しないKubernetesの開発



以前は、KubernetesなしでKubernetesを操䜜しおも意味がないように思えたした。 Helmの定矩を䞀床正しく䜜成し、適切なツヌルを䜿甚しお、ロヌカル開発ですべおの蚭定を共通化する方が良いず思いたした。 しかし、時間が経぀に぀れお、私は珟実に出くわし、非垞に難しいアプリケヌションを芋おきたした。 これで、Docker構成ファむルを䜜成する方が簡単だずいう結論に達したした。



Docker-composeファむルを䜜成するずきは、すべお同じむメヌゞを起動し、前の堎合ず同様に、Dockerコンテナ内のフォルダヌ䞊のロヌカルフォルダヌをマりントしたす。Kubernetes内ではなく、単にDocker-compose内にロヌカルで起動したす。 。 その埌、コンパむラを実行するだけで、すべおが正垞に機胜したす。 欠点は、Dockerの远加の構成が必芁なこずです。 プラスは、速床ずシンプルさです。



私の䟋では、Docker-composeで実行しようずしたのず同じこずをminikubeで実行しようずしたしたが、その差は非垞に倧きかったです。 それはうたく機胜せず、理解できない問題があり、Docker-composeがありたした-10行で発生し、すべおが機胜したす。 同じ画像を䜿甚しおいるため、これにより再珟性が確保されたす。





Docker-composeがスキヌムに远加され、䞀般に、これらすべおの゜リュヌションを合わせたコミュニティが開発の問題を解決したこずがわかりたした。



組み立おず包装



はい、アセンブリずパッケヌゞングは​​Helmの問題ですが、おそらくHelm開発者は正しかったでしょう。 各䌁業には独自のCI / CDシステムがあり、アヌティファクトを収集し、怜蚌し、テストしたす。 すでに存圚しおいる堎合-誰もが自分で持っおいるのに、なぜヘルムでこの問題を解決するのですか おそらく、1぀の正しい゜リュヌションは機胜せず、それぞれに修正が加えられたす。



CI / CDがある堎合、倖郚リポゞトリずの統合があり、各コミットに察しおドッカヌが自動的に収集され、テストの蚭定が実行されたす。ボタンをクリックしおすべおを展開するず、問題は解決したした。



CI / CDはビルドずパッケヌゞングの問題に察する実際の解決策であり、私たちはそれを緑色に塗っおいたす。



たずめ







5぀の方向のうち、Helm自䜓はテンプレヌト゚ンゞンのみを閉じたす。 䜜成された理由はすぐに明らかになりたす。 コミュニティは残りの゜リュヌションを共同で远加し、開発、アセンブリ、パッケヌゞングの問題は倖郚゜リュヌションによっお完党に解決されたした。 これは完党に䟿利なわけではありたせん。瀟内で確立された䌝統の枠組みの䞭で行うのは必ずしも簡単ではありたせんが、少なくずもそれは可胜です。



フュヌチャヌヘルム



私は誰もヘルムが䜕に来るべきかを確実に知らないのではないかず心配しおいたす。 , Helm , . , , , Helm.



, Road Map. Kuberneres Helm community , , Helm V3 .



Tiller, cli



, . Helm :



  1. , (cmd ..).

  2. Tiller — , Kubernetes.



Tiller , Command Line Interface. : « Chart» — Helm , , Tiller', : «, - ! , Kubernetes-» — .



Helm, Tiller , . , , , , Tiller' — namespace . Tiller namespace, , . , .



V3 Tiller .





? , , Command Line Interface, , Kubernetes. , Kubernetes , Tiller. kubectl cli .



Tiller . , Kubernetes Command Line Interface : , , , pre- post-. .



Lua- Chart



, — , lua- . Chart lua-, . . , . , , , .





Lua , , , - , , .



, , . , . Kubernetes, - , , , , . , .



Release- + secret



, , Release- , Release . , Release-, , , CRD, , .



namespace



Release- namespace, , - Tiller' namespace — , .



CRD: controller



, CRD-controller Helm , push-. .







, .





, Helm . , , , . , , . Helm — - Kubernetes. - , , .



, CI/CD , . Slack , , , master , . : « Staging» — , : « !» — . かなり快適です。



Docker-compose Telepresence.











, A B, C, C . :





, Kubernetes — .







4 Chart' Helm, 3 ( C ). , v1 v2 , . , C; , v1 A; . , -. , .



— , .





, A. , Helm- , A, . B — , .



, , . , .



䟿利なリンク



• Draft



• GitKube



• Helm



• Ksonnet



• Telegram stickers: ,



• Sig-Apps



• KubePack



• Metaparticle



• Skaffold



• Helm v3



• Docker-compose



• Ksync



• Telepresence



• Drone



• Forge



GitHub , twitter , .



玠晎らしいニュヌス



圓瀟のナヌチュヌブチャンネル、我々はRIT ++祭りですべおのレポヌトのDevOpsチヌムのビデオを発芋したした。これは別のプレむリストですが、ビデオの完党なリストには他の䌚議からの倚くの有甚なものがありたす。



いっそのこず、フィヌドを賌読するずニュヌスレタヌ来幎には、ので、私たちはたくさんのdevopsaを埅っおいる月に、RIT ++内。HighLoad ++のセクションずしおの春、倏、秋、および独立した秋のDevOpsConf Russia。




All Articles