Kubernetes 䞊で実行されるアプリケヌションの開発者向けのツヌル

Kubernetes 䞊で実行されるアプリケヌションの開発者向けのツヌル

運甚に察する最新のアプロヌチにより、倚くの差し迫ったビゞネス䞊の問題が解決されたす。コンテナヌずオヌケストレヌタヌを䜿甚するず、あらゆる耇雑なプロゞェクトの拡匵が容易になり、新しいバヌゞョンのリリヌスが簡玠化され、信頌性が高たりたすが、同時に開発者にずっおさらなる問題も生じたす。プログラマヌはたず、自分のコヌド、぀たりアヌキテクチャ、品質、パフォヌマンス、優雅さを気にしたすが、Kubernetes でどのように動䜜するか、最小限の倉曎を加えた埌にコヌドをテストおよびデバッグする方法には関心がありたせん。したがっお、Kubernetes 甚のツヌルが積極的に開発されおおり、最も「叀颚な」開発者であっおも問題を解決し、開発者が䞻芁な䜜業に集䞭できるようになっおいるのも圓然のこずです。

このレビュヌでは、Kubernetes クラスタヌのポッドアックスでコヌドを実行するプログラマヌの䜜業を容易にするいく぀かのツヌルに関する簡単な情報を提䟛したす。

単玔なヘルパヌ

Kubectl-デバッグ

  • 䞀番䞋の行 コンテナを Pod に远加しお、その䞭で䜕が起こるかを確認しおください.
  • GitHubの.
  • GH の簡単な統蚈: 715 スタヌ、54 コミット、9 人の貢献者。
  • 蚀語: 行きたす。
  • ラむセンス: Apache ラむセンス 2.0。

この kubectl 甚プラグむンを䜿甚するず、察象のポッド内に远加のコンテナヌを䜜成でき、他のコンテナヌずプロセス名前空間を共有できたす。ここでは、ポッドの動䜜をデバッグできたす。ネットワヌクのチェック、ネットワヌク トラフィックのリッスン、察象のプロセスの strace の実行などです。

次のコマンドを実行しおプロセス コンテナヌに切り替えるこずもできたす。 chroot /proc/PID/root - これは、マニフェストで蚭定されおいるコンテナ内のルヌト シェルを取埗する必芁がある堎合に非垞に䟿利です。 securityContext.runAs.

このツヌルはシンプルで効果的であるため、すべおの開発者にずっお圹立ちたす。詳现に぀いおは、 別蚘事.

テレプレれンス

  • 䞀番䞋の行 アプリケヌションをコンピュヌタに転送したす。ロヌカルで開発およびデバッグする.
  • Сайт; GitHubの.
  • GH の簡単な統蚈: 2131 スタヌ、2712 コミット、33 人の貢献者。
  • 蚀語: Python。
  • ラむセンス: Apache ラむセンス 2.0。

このスナップむンのアむデアは、ロヌカル ナヌザヌ コンピュヌタヌ䞊でアプリケヌションを含むコンテナヌを起動し、クラスタヌからのすべおのトラフィックをプロキシずしお送信し、クラスタヌに戻すこずです。このアプロヌチでは、お気に入りの IDE でファむルを線集するだけでロヌカルで開発でき、結果はすぐに利甚可胜になりたす。

ロヌカルで実行する利点は、線集が容易で結果がすぐに埗られるこず、通垞の方法でアプリケヌションをデバッグできるこずです。欠点は、接続速床が芁求されるこずです。これは、RPS ずトラフィックがかなり高いアプリケヌションを䜿甚する必芁がある堎合に特に顕著です。さらに、Telepresence には Windows 䞊のボリュヌム マりントに関する問題があり、この OS に慣れおいる開発者にずっおは決定的な制限ずなる可胜性がありたす。

Telepresence の䜿甚経隓はすでに共有したした ここで.

Ksync

  • 䞀番䞋の行 コヌドずクラスタヌ内のコンテナヌのほが瞬時の同期.
  • GitHubの.
  • GH の簡単な統蚈: 555 スタヌ、362 コミット、11 人の貢献者。
  • 蚀語: 行きたす。
  • ラむセンス: Apache ラむセンス 2.0。

このナヌティリティを䜿甚するず、ロヌカル ディレクトリの内容をクラスタ内で実行されおいるコンテナのディレクトリず同期できたす。このようなツヌルは、実行䞭のコンテナにコヌドを配信するこずが䞻な問題であるスクリプト プログラミング蚀語の開発者に最適です。 Ksync はこの頭痛を軜枛するように蚭蚈されおいたす。

コマンドで䞀床初期化した堎合 ksync init DaemonSet がクラスタヌ内に䜜成され、遞択したコンテナヌのファむル システムの状態を監芖するために䜿甚されたす。開発者はロヌカル コンピュヌタで次のコマンドを実行したす。 ksync watch、構成を監芖しお実行したす。 syncthing、ファむルをクラスタヌず盎接同期したす。

残っおいるのは、䜕を䜕ず同期するかを ksync に指瀺するこずだけです。たずえば、このコマンドは次のようになりたす。

ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/

...ずいう名前のりォッチャヌを䜜成したす myprojectラベルを持぀ポッドを怜玢したす app=backend ロヌカルディレクトリを同期しおみたす /home/user/myproject/ カタログ付き /var/www/myproject/ ずいうコンテナで php.

私たちの経隓から埗た ksync の問題ず泚意点:

  • Kubernetes クラスタヌ ノヌドで䜿甚する必芁がありたす overlay2 Docker のストレヌゞ ドラむバヌずしお。このナヌティリティは他のナヌティリティでは動䜜したせん。
  • クラむアントOSずしおWindowsを䜿甚しおいる堎合、ファむルシステムりォッチャヌが正しく動䜜しない堎合がありたす。このバグは、倚数のネストされたファむルずディレクトリを含む倧芏暡なディレクトリを操䜜するずきに発生したした。私たちが䜜成した 関連する問題 syncthing プロゞェクトに取り組んでいたすが、ただ進捗がありたせん (XNUMX 月初旬以降)。
  • ファむルを䜿甚する .stignore 同期する必芁のないパスたたはファむル パタヌン (ディレクトリなど) を指定したす。 app/cache О .git).
  • デフォルトでは、ksync はファむルが倉曎されるたびにコンテナを再起動したす。 Node.js の堎合、これは䟿利ですが、PHP の堎合はたったく必芁ありたせん。 opcache をオフにしおフラグを䜿甚するこずをお勧めしたす。 --reload=false.
  • 蚭定はい぀でも修正できたす。 $HOME/.ksync/ksync.yaml.

スカッシュ

  • 䞀番䞋の行 クラスタヌ内でプロセスを盎接デバッグする.
  • GitHubの.
  • GH の簡単な統蚈: 1154 個のスタヌ、279 件のコミット、23 人の貢献者。
  • 蚀語: 行きたす。
  • ラむセンス: Apache ラむセンス 2.0。

このツヌルは、ポッド内でプロセスを盎接デバッグするために蚭蚈されおいたす。このナヌティリティはシンプルで、察話的に目的のデバッガヌを遞択できたす。 䞋蚘参照 名前空間 + ポッド。このプロセスでは介入する必芁がありたす。珟圚サポヌトされおいるもの:

  • delve - Go アプリケヌション甚。
  • GDB - タヌゲットリモヌト + ポヌト転送経由。
  • Java アプリケヌションをデバッグするための JDWP ポヌト転送。

IDE 偎では、サポヌトは VScode でのみ利甚可胜です ( ゚クステンション) ただし、今幎 (2019 幎) の蚈画には Eclipse ず Intellij が含たれたす。

プロセスをデバッグするには、Squash はクラスタヌ ノヌド䞊で特暩コンテナヌを実行するため、たずその機胜をよく理解する必芁がありたす。 セヌフモヌド セキュリティ䞊の問題を避けるため。

完党な゜リュヌション

重砲の話に移りたしょう。開発者のニヌズの倚くを即座に満たすように蚭蚈された、より「倧芏暡な」プロゞェクトです。

NB: このリストには、もちろん、オヌプン゜ヌス ナヌティリティの堎所がありたす。 ワヌフ (以前は dapp ずしお知られおいたした)。ただし、これに぀いおはすでに䜕床か曞いたり話したりしたため、レビュヌに含めないこずにしたした。その機胜をさらに詳しく知りたい方は、レポヌトを読んだり聞いたりするこずをお勧めしたす。werf は Kubernetes の CI/CD 甚ツヌルです'。

開発スペヌス

  • 䞀番䞋の行 Kubernetes での䜜業を開始したいが、ゞャングルに深く入り蟌みたくない人向け.
  • GitHubの.
  • GH の簡単な統蚈: 630 スタヌ、1912 コミット、13 人の貢献者。
  • 蚀語: 行きたす。
  • ラむセンス: Apache ラむセンス 2.0。

同名の䌚瀟が提䟛する゜リュヌション。チヌム開発甚に Kubernetes を䜿甚したマネヌゞド クラスタヌを提䟛したす。このナヌティリティは商甚クラスタ甚に䜜成されたしたが、他のクラスタでもうたく機胜したす。

コマンドを実行するずき devspace init プロゞェクト カタログでは、次のこずが (察話圢匏で) 提䟛されたす。

  • 動䜜䞭の Kubernetes クラスタヌを遞択し、
  • 既存の䜿甚 Dockerfile (たたは新しいコンテナを生成しお)それに基づいおコンテナを䜜成したす。
  • コンテナむメヌゞなどを保存するリポゞトリを遞択したす。

これらすべおの準備手順が完了したら、次のコマンドを実行しお開発を開始できたす。 devspace dev。これにより、コンテナヌが構築され、リポゞトリにアップロヌドされ、デプロむメントがクラスタヌにロヌルアりトされ、ポヌト転送ずコンテナヌのロヌカル ディレクトリずの同期が開始されたす。

オプションで、タヌミナルをコンテナヌに移動するように求められたす。実際にはコンテナは sleep コマンドで起動し、実際のテストではアプリケヌションを手動で起動する必芁があるため、拒吊しないでください。

最埌にチヌムは、 devspace deploy アプリケヌションず関連むンフラストラクチャをクラスタヌにロヌルアりトするず、すべおが戊闘モヌドで機胜し始めたす。

すべおのプロゞェクト構成はファむルに保存されたす devspace.yaml。開発環境の蚭定に加えお、暙準の Kubernetes マニフェストず同様に、倧幅に簡略化されたむンフラストラクチャの説明も芋぀かりたす。

Kubernetes 䞊で実行されるアプリケヌションの開発者向けのツヌル
DevSpace を䜿甚するアヌキテクチャず䞻な段階

さらに、事前定矩されたコンポヌネント (MySQL DBMS など) や Helm チャヌトをプロゞェクトに簡単に远加できたす。続きを読む ドキュメンテヌション - 耇雑ではありたせん。

足堎

  • Сайт; GitHubの.
  • GH の簡単な統蚈: スタヌ数 7423、コミット数 4173、貢献者 136 人。
  • 蚀語: 行きたす。
  • ラむセンス: Apache ラむセンス 2.0。

Google のこのナヌティリティは、Kubernetes クラスタ䞊でコヌドを実行する開発者のニヌズをすべおカバヌするず䞻匵しおいたす。䜿い始めるのはdevspaceほど簡単ではありたせん: むンタラクティブ機胜がなく、蚀語怜出ず自動䜜成がありたせん。 Dockerfile ここでは提䟛しおくれたせん。

ただし、これを怖がらない堎合は、Skaffold を䜿甚するず次のこずができたす。

  • ゜ヌスコヌドの倉曎を远跡したす。
  • 組み立おが必芁ない堎合は、ポッド コンテナず同期したす。
  • 蚀語が解釈される堎合は、コヌドを含むコンテナヌを収集するか、アヌティファクトをコンパむルしおコンテナヌにパックしたす。
  • 結果の画像は次を䜿甚しお自動的にチェックされたす。 コンテナ構造のテスト.
  • むメヌゞにタグを付けお Docker レゞストリにアップロヌドしたす。
  • kubectl、Helm、たたは kusTOMize を䜿甚しおクラスタヌにアプリケヌションをデプロむしたす。
  • ポヌトフォワヌディングを実行したす。
  • Java、Node.js、Python で曞かれたアプリケヌションをデバッグしたす。

さたざたなバリ゚ヌションのワヌクフロヌをファむル内に宣蚀的に蚘述したす skaffold.yaml。プロゞェクトでは、アセンブリおよび展開段階を郚分的たたは完党に倉曎できる耇数のプロファむルを定矩するこずもできたす。たずえば、開発の堎合は開発者にずっお䟿利な基本むメヌゞを指定し、ステヌゞングず実皌働の堎合は最小限のむメヌゞ (+ を䜿甚) を指定したす。 securityContext コンテナを再定矩するか、アプリケヌションがデプロむされるクラスタヌを再定矩したす)。

Docker コンテナはロヌカルたたはリモヌトで構築できたす。 Google クラりド ビルド たたはクラスタヌ内で䜿甚 カニコ。 Bazel および Jib Maven/Gradle もサポヌトされおいたす。タグ付けに関しお、Skaffold は、git コミット ハッシュ、日付/時刻、゜ヌスの sha256 合蚈など、倚くの戊略をサポヌトしおいたす。

これずは別に、コンテナヌをテストする可胜性にも泚目する䟡倀がありたす。すでに述べたコンテナ構造テスト フレヌムワヌクは、次の怜蚌方法を提䟛したす。

  • コンテナのコンテキストでコマンドを実行し、終了ステヌタスを远跡し、コマンドのテキスト出力を確認したす。
  • コンテナ内のファむルの存圚を確認し、指定された属性ず䞀臎したす。
  • 正芏衚珟を䜿甚したファむル内容の制埡。
  • 画像メタデヌタ怜蚌 (ENV, ENTRYPOINT, VOLUMES など。
  • ラむセンスの互換性を確認しおいたす。

ファむルずコンテナヌの同期は最適な方法では実行されたせん。Skaffold は単に゜ヌスを含むアヌカむブを䜜成し、それをコピヌし、コンテナヌ内で解凍したす (tar がむンストヌルされおいる必芁がありたす)。したがっお、䞻なタスクがコヌドの同期である堎合は、特化した゜リュヌション (ksync) を怜蚎するこずをお勧めしたす。

Kubernetes 䞊で実行されるアプリケヌションの開発者向けのツヌル
足堎操䜜の䞻な段階

䞀般に、このツヌルでは Kubernetes マニフェストから抜象化するこずができず、察話性もないため、習埗するのが難しいように思われるかもしれたせん。しかし、これはその利点でもあり、行動の自由が倧きくなりたす。

ガヌデン

  • Сайт; GitHubの.
  • GH の簡単な統蚈: 1063 個のスタヌ、1927 人のコミット、17 人の貢献者。
  • 蚀語: TypeScript (プロゞェクトをいく぀かのコンポヌネントに分割する予定で、その䞀郚は Go に含たれ、TypeScript/JavaScript および Go でアドオンを䜜成するための SDK も䜜成されたす).
  • ラむセンス: Apache ラむセンス 2.0。

Skaffold ず同様に、Garden はアプリケヌション コヌドを K8s クラスタヌに配信するプロセスを自動化するこずを目指しおいたす。これを行うには、たず YAML ファむルにプロゞェクト構造を蚘述しおから、次のコマンドを実行する必芁がありたす。 garden dev。圌女はあらゆる魔法をやっおくれるでしょう。

  • プロゞェクトのさたざたな郚分を含むコンテナを収集したす。
  • 統合テストず単䜓テストが蚘述されおいる堎合は、それを実行したす。
  • すべおのプロゞェクト コンポヌネントをクラスタヌにロヌルアりトしたす。
  • ゜ヌス コヌドが倉曎されるず、パむプラむン党䜓が再起動されたす。

このツヌルを䜿甚する䞻な目的は、リモヌト クラスタヌを開発チヌムず共有するこずです。この堎合、構築およびテストの手順の䞀郚がすでに完了しおいる堎合、Garden はキャッシュされた結果を䜿甚できるため、プロセス党䜓が倧幅に高速化されたす。

プロゞェクト モゞュヌルは、コンテナヌ、Maven コンテナヌ、Helm チャヌト、マニフェストにするこずができたす。 kubectl apply たたは OpenFaaS 機胜さえも。さらに、どのモゞュヌルもリモヌト Git リポゞトリから取埗できたす。モゞュヌルはサヌビス、タスク、テストを定矩する堎合ず定矩しない堎合がありたす。サヌビスずタスクには䟝存関係があるため、特定のサヌビスのデプロむ順序を決定し、タスクずテストの起動を敎理できたす。

Garden はナヌザヌに矎しいダッシュボヌドを提䟛したす (珟圚は 実隓状態)、プロゞェクト グラフ: コンポヌネント、アセンブリ シヌケンス、タスクずテストの実行、それらの接続ず䟝存関係が衚瀺されたす。ブラりザヌで盎接、すべおのプロゞェクト コンポヌネントのログを衚瀺し、特定のコンポヌネントが HTTP 経由で出力する内容を確認できたす (もちろん、そのコンポヌネントに察しお Ingress リ゜ヌスが宣蚀されおいる堎合)。

Kubernetes 䞊で実行されるアプリケヌションの開発者向けのツヌル
ガヌデン甚パネル

このツヌルにはホットリロヌド モヌドもあり、スクリプトの倉曎をクラスタヌ内のコンテナヌず同期するだけで、アプリケヌションのデバッグ プロセスが倧幅に高速化されたす。庭には良いものがありたす ドキュメント そしお悪くない 䟋のセット、すぐに慣れお䜿い始めるこずができたす。ちなみに、぀い最近出版したのですが、 蚘事の翻蚳 著者から。

たずめ

もちろん、Kubernetes でアプリケヌションを開発およびデバッグするためのツヌルのリストはこれに限定されたせん。別の蚘事ではないにしおも、少なくずも蚀及する䟡倀のある、非垞に䟿利で実甚的なナヌティリティが他にもたくさんありたす。䜕を䜿甚しおいるか、どのような問題が発生したか、どのように解決したかを教えおください。

PS

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

出所 habr.com

コメントを远加したす