web-dev-qa-db-ja.com

ドラフトとヘルムvs Ksonnet?

これらのすべてのツールを理解しているように DraftHelm および Ksonnet には、グラフの作成やkubernetes構成の展開などの機能が重複しています。

これらのツールの目的は、アプリケーションとk8s環境を記述および構成することであることを理解しています。

Draftを使用して、Dockerfile、Chartを作成できます。それでも、HelmとKsonnetでも同じことができます。

私の質問は、これらのコンポーネントがCI/CDでパイプラインを作成する場合、順序は何ですか?

例えば、

draft-> ksonnet> helmまたは

ドラフト->ヘルム-> ksonnet

15
Suresh Vishnoi

要するに、drafthelmは多かれ少なかれ補完的であり、ksonnetは直交しており、特にhelmの代替手段を提供します。

詳細な説明では、回答を3つの主要なセクションに分けます。最初のセクションでは、draftおよびhelm相互作用、2番目はksonnetが他と直交する方法を説明し、最後に、これらを尊重してこれらを理解する方法を説明するセクションCI/CDへ。

ヘルムとドラフト

HelmとDraftは、Kubernetesのパッケージ管理システムとみなすことができるHelmが、本質的にKubernetesアプリケーション開発ツールであるDraftが提供する機能の一部を提供するという意味で補完的です。

DraftとHelmの関係は、Kubernetesアプリケーション開発を簡素化するという目標を追求するために、現在のアプリケーションタイプから推論されたメタデータを使用してHelmチャートを作成することを要約することで要約できます既存のアプリケーションを使用して、アプリケーションの開発バージョンをデプロイ/更新するために、どのようにそれを行うかについて何も知らなくてもよい。

Kubernetesパッケージ管理用ヘルム

前述のように、HelmはKubernetesベースのアプリケーション用のパッケージ管理システムです。次の機能を提供します。

  • Kubernetesマニフェスト(「チャート」と呼ばれる)を定義するためのテンプレートアプローチ
  • パッケージ管理。リリースされたパッケージをホストするための基本的なパッケージリポジトリサービスを含みます。
  • Helmアプリケーションの展開、更新、削除などのアプリケーションライフサイクル管理
  • パッケージの依存関係

Helmは、Kubernetesマニフェストのパラメーター化にテンプレート化されたYAMLアプローチを採用し、依存パッケージ間で値を共有およびオーバーライドできます。つまり、想定されるパッケージAはパッケージBに依存します。パッケージAは、パッケージBに設定された構成値を再利用でき、それらのパラメーターを独自の値でオーバーライドできます。特定の展開内のすべてのパッケージの値は、Helmコマンドラインツールを使用してオーバーライドすることもできます。

また、Helmが「Tiller」というクラスター側コンポーネントの可用性に依存して、テンプレートを具体化し、生成されたKubernetesマニフェストをクラスターにデプロイする作業を実際に行うという事実も注目に値します。

Kubernetesアプリケーション開発用ドラフト

Draftの目的は、プロジェクトの実行に必要なHelmチャート/パッケージおよび対応するdockerイメージを迅速に構築およびデプロイすることにより、 Kubernetesアプリケーションの開発を劇的に簡素化する です。

  • Kubernetesクラスター
  • KubernetesクラスターにインストールされたHelmのTillerポッド
  • Dockerレジストリ

ドラフトインストールガイド は、これらのピースをセットアップして自分で試してみるための詳細を提供します。

Draftは、アプリケーションヘルムチャートとDockerfileの両方を含む高レベルの「パッケージング」形式を提供することでHelmを構築します。後者は、Dockerfileにドッカーイメージを構築する機能を提供します。

最後に、特定のプログラミング言語のサポートが組み込まれており、draft createを使用して新しいドラフトプロジェクトを最初に作成するときに、使用しているプログラミング言語とフレームワークを推測しようとします。

Kubernetesパッケージ管理用のKsonnet

前述のように、Ksonnetはさまざまな意味でHelmと直交しており、異なる用語でラップされたパッケージ管理に関して本質的に同じ機能を提供します- コアコンセプトドキュメント を参照Draftと互換性がなく、Draftと同じ懸念に対処していないことに注意してください。

KsonnetとHelmは、Kubernetesマニフェストを生成および展開するために相互に互換性のないアプローチを取っているため、直交していると言います。 Helmはテンプレート化されたYAMLを使用しますが、Ksonnetは "データテンプレート"言語Jsonnet を使用してKubernetesマニフェストを生成します。また、Helmの場合のように「依存」パッケージを想定するのではなく、Ksonnetは、依存サービスを構成可能な「プロトタイプ」として表現することにより、依存サービス間の境界線を曖昧にします。最後に、マニフェストテンプレートを確認および展開するクラスター側アプリケーションに依存するのではなく、Ksonnetにはkubectl applyに類似したapplyサブコマンドがあります。

CI/CD

では、これらの部品はCI/CDワークフローのどこに収まるのでしょうか?基本的に、相互に互換性のない2つのツールセットがあるため、ケースバイケースでそれらを検討してみましょう。

ドラフト+ヘルム

ドラフトデザインのQ&Aセクション によれば、アプリケーションが開発で実行されることを主に関心を持つ開発者からkubernetes、helm、およびdockerを扱う複雑さの多くを抽象化することを目的とした開発者ツールとしてのみ意味されます集まる。

これを念頭に置いて、このツールセットを含むCDアプローチでは、次のことを行う必要があります。

  • 必要に応じてdocker CLIを使用してdockerイメージを構築します
  • helm CLIを使用してHelmパッケージをビルドします
  • helm CLIを使用してHelmリポジトリにHelmパッケージを展開します
  • helm CLIを使用して、適切なステージング/製品KubernetesクラスターにHelmパッケージをインストール/更新します。

クソネット

Ksonnet CDワークフローは、上記のhelmワークフローと比較してやや省略されています。

  • 必要に応じてdocker CLIを使用してdockerイメージを構築します
  • ks CLIを使用してKsonnetマニフェストを適用する

Helmを使用すると、アプリケーションのパッケージをHelmレジストリに展開して再使用できますが、Ksonnetマニフェストに 再利用可能なプロトタイプ が含まれている場合、別のKsonnetベースのアプリケーションで使用できます Ksonnetレジストリドキュメント。 で説明されているgitリポジトリで利用可能

つまり、Ksonnet定義がCI/CDでどのように処理されるかは、それらをどのgitリポジトリに格納するか、およびどのように構造化するかに大きく依存します。

34
Wayne Warren