HelmOps

HelmOpsは、HelmリポジトリまたはOCIレジストリを直接指し示すことによってバンドルを作成する簡素化された方法であり、gitリポジトリを設定する必要はありません。

まとめ

+GitRepo+リソースが作成されると、SUSE® Rancher Prime Continuous Deliveryはgitリポジトリを監視し、+GitRepo+に指定されたパスから1つ以上のバンドルを作成します。これは、GitOps、つまりgit駆動型の継続的デプロイメントアプローチに従います。これには、+fleet.yaml+やその他の設定ファイルを含む可能性のあるgitリポジトリが必要です。

一方、HelmOpsは、GitOpsがgitリポジトリを使用するのと同様に、真実の源としてHelmレジストリに依存しています。HelmOpsを活用するには、+HelmOp+リソースを作成し、バンドルをクラスターにターゲットするための+GitRepo+リソースや+fleet.yaml+ファイルで利用可能なオプションに似たオプションを使用します。

HelmOpsは概念です。+HelmOp+は、SUSE® Rancher Prime Continuous Deliveryによって管理されるカスタムKubernetesリソースです。

Fleet HelmOpsコントローラーは、参照されたHelmチャートを指し示す軽量バンドルを作成し、それらをダウンロードすることはありません。ただし、すべてのターゲットとなる下流クラスターに同じ最新のチャートバージョンがデプロイされるように、チャートバージョンを解決します。これは以下のケースに適用されます:

  • ワイルドカードまたは空のバージョンが指定されている

  • https://semver.org/semanticバージョニング制約が指定されている場合、例えば+0.1.x+、< 2.0.0。サポートされている制約に関する詳細情報は バージョン制約の確認

制約が無効であるか、一致するバージョンが見つからない場合、SUSE® Rancher Prime Continuous Deliveryは説明的なエラーメッセージを表示します。

この機能を使用する際、Helmチャートは下流クラスターからダウンロードされるため、それらはHelmレジストリにアクセスできる必要があります。

HelmOpリソースの作成

Helmチャートを直接デプロイし始めるために、次のように+HelmOp+リソースを作成できます:

apiVersion: fleet.cattle.io/v1alpha1
kind: HelmOp
metadata:
name: my-awesome-helmop
namespace: "fleet-local"
spec:
helm:
releaseName: my-fantastic-chart
repo: [https://foo.bar/baz](https://foo.bar/baz)
chart: fantastic-chart
version: ''
namespace: that-amazing-namespace
helmSecretName: my-top-secret-helm-access
insecureSkipTLSVerify: false

プライベートチャートの場合、+HelmOp+リソースと同じネームスペースに、フィールド+helmSecretName+で参照されるHelmアクセスシークレットを作成する必要があります。Fleet HelmOpsコントローラーは、そのシークレットをターゲットとなるダウンストリームクラスターにコピーすることを担当し、Fleet agentがレジストリにアクセスできるようにします。

サポートされているユースケース

Helmチャートを参照するための3つのフィールドが利用可能な場合、いくつかのルールを明確にしましょう。Helmインストール ドキュメントによれば、インストールするチャートを表現する方法は6つあります。そのうちの3つは、リポジトリエイリアスまたはローカルファイルシステムを使用しており、FleetのHelmOpsコンテキストでは利用できません。これにより、3つのオプションが残ります:

絶対URL

絶対URLでHelmチャートを参照するのは、+.tgz+ファイルへのURLをチャートフィールドに提供するだけで簡単です。Helmオプションは次のようになります:

helm:
chart: [https://example.com/charts/my-chart-1.2.3.tgz](https://example.com/charts/my-chart-1.2.3.tgz)
# can be omitted

repo: ''
version: ''

この場合、空でないリポジトリまたは空でないバージョンが指定されていると、HelmOpのステータスにエラーが表示され、バンドルは作成されず、デプロイメントが中止されます。

チャート参照とリポジトリURL

Helmチャートは、オプションのバージョンを持つリポジトリとチャート名を通じて参照することもでき、これは静的バージョンまたはバージョン制約である可能性があります。

この場合、ポーリングは意味があります。なぜなら、リポジトリを使用してチャートを参照することで、SUSE® Rancher Prime Continuous Deliveryがリポジトリの+index.yaml+をチェックして、バージョンフィールドに一致する利用可能なバージョンを確認できるからです。

例:

helm:
repo: [https://foo.bar/baz](https://foo.bar/baz)
chart: fantastic-chart
version: '1.2.3'

この場合、バージョンフィールドのみが空である可能性があります。チャートまたはリポジトリフィールドのいずれかが空である場合、SUSE® Rancher Prime Continuous DeliveryはHelmOpのステータスにエラーを設定し、バンドルは作成されません。

OCIレジストリ

HelmはOCIレジストリをサポートしており、SUSE® Rancher Prime Continuous Deliveryでリポジトリフィールドを使用して参照できます。

この場合、Helmオプションは次のようになります:

helm:
repo: oci://foo.bar/baz
version: '1.2.3' # optional

リポジトリフィールドにOCI URLが提供されると、空でないチャートフィールドはHelmOpsのステータスにエラーを引き起こし、バンドルは作成されません。

この場合、SUSE® Rancher Prime Continuous DeliveryはOCIアーティファクトをダウンロードします。これは次のことを意味します:

  • `version`フィールドはOCIアーティファクトのタグを表し、これはOCIアーティファクトに保存されているチャートの実際のバージョンとは異なる場合があります。

  • SUSE® Rancher Prime Continuous Deliveryは、提供されたリポジトリとバージョン制約に一致する利用可能なOCIタグを定期的に確認できます。これはポーリング間隔を通じて設定されます。

  • OCIアーティファクトには、複数のHelmチャートが含まれている場合があります。このユースケースは、単一のHelmチャートを含むOCIアーティファクトでのみ検証されています。

ポーリング

SUSE® Rancher Prime Continuous Deliveryは、参照されたHelmレジストリをポーリングし、新しいバージョンが利用可能かどうかを定期的に確認できます。もちろん、これは+version+フィールドにバージョン制約が含まれている場合にのみ意味があります。これは複数のバージョンに解決される可能性があります。

有効にするハウツー

ポーリングには、GitOpsに存在するものと類似の+pollingInterval+フィールドが含まれます。ただし、HelmOpsの場合、デフォルトのポーリング間隔は0秒であり、ポーリングは無効になります。

SUSE® Rancher Prime Continuous DeliveryがHelmOpリソースでポーリングを有効にするためには、次の条件を満たす必要があります:

  • pollingInterval+フィールドは、ゼロ以外の期間(例:+10s、+1m+など)に設定されている必要があります。

  • version+フィールドは、有効なセマンティックバージョニング制約(例:+2.x.x、< 1.0)に設定されている必要があります。静的バージョン(例:1.2.3)ではありません。

説明

ポーリングが有効になっている場合、SUSE® Rancher Prime Continuous Deliveryは設定された間隔で次のことを行います:

  • +version+フィールドに設定されたバージョン制約に一致する最新バージョンを参照されたHelmレジストリで確認します。

  • 新しいバージョンが見つかった場合、そのバージョンをHelmOpオブジェクトから作成されたバンドルに設定し、新しいバージョンのチャートがすべてのターゲットクラスターにインストールされるようにします。

  • HelmOpリソースのステータスを更新します:

    • その+Polled+条件を設定します:

      • ポーリングが成功した場合は+true+で

      • 失敗が発生した場合は、エラーを伴って+false+となります。

    • 最後のポーリング試行の開始時刻にLast Polling Timeフィールドを更新します。たとえそれが失敗した場合でも。

プライベートHelmリポジトリを使用する

これは、フィールド helmSecretName を通じて Helm アクセスシークレットを参照することにより、gitOps と同じように機能します。

詳細については、プライベート Helm リポジトリ を参照してください。

各パスに対して別々の認証情報を使用する部分は、GitRepo とは異なり、HelmOp リソースは単一の Helm チャートのみを参照するため、関連性がありません。

ステータス更新

HelmOp リソースを作成すると、Helm オプションが有効であり、チャートバージョンが見つかる場合にバンドルが作成されます。

そのバンドルのステータスは、ターゲットクラスターごとに作成されるデプロイメントから進化し、これらのデプロイメントのステータスが進化してバンドルに戻されるにつれて、時間とともに変化します。

SUSE® Rancher Prime Continuous Delivery は、バンドルステータスからの更新を HelmOp リソース自体のステータスに伝播します。これには以下のものが含まれます。

  • 要約、期待されるクラスター数および準備完了のクラスター数を含む表示ステータス

  • リソースの状態に関する詳細情報を提供する条件、それが有効であり、そのデプロイメントが準備完了しているかどうか

  • ステータス別のリソース数

リソース数と条件に関する詳細については、ステータスフィールド を参照してください。