ホームページ >バックエンド開発 >Golang >Helm CEL の紹介: Helm チャートを検証するためのより表現力豊かな方法

Helm CEL の紹介: Helm チャートを検証するためのより表現力豊かな方法

Barbara Streisand
Barbara Streisandオリジナル
2024-11-22 16:35:16749ブラウズ

Introducing Helm CEL: A More Expressive Way to Validate Your Helm Charts

Helm チャートを使用したことがある場合は、values.yaml を検証するという課題に精通しているでしょう。 Helm の組み込み JSON スキーマ検証は機能しますが、煩雑で制限がかかる場合があります。今日は、Google の Common Expression Language (CEL) の機能を Helm チャートの検証にもたらすプラグインである Helm CEL を紹介したいと思います。

CELとは何ですか?

本題に入る前に、CEL とは何かについて簡単に説明しましょう。 Common Expression Language (CEL) は、Google が作成したシンプルな式言語で、簡潔で強力な検証ルールを作成できます。これは、Kubernetes CRD 検証、Istio 構成、およびクラウドネイティブ エコシステムの他の多くのプロジェクトで使用されます。

JSON スキーマの代わりに CEL を使用する理由

  1. より表現力豊か: CEL を使用すると、より自然で読みやすい方法で複雑な検証ルールを作成できます
  2. 使い慣れた構文: Python や JavaScript などのプログラミング言語を使用している場合、CEL の構文は自然に感じられます
  3. タイプセーフ: CEL は柔軟性を維持しながら強力な型チェックを提供します
  4. クラウドネイティブ向けに構築: CEL はすでに Kubernetes エコシステム全体で使用されています

はじめる

まず、プラグインをインストールします:

helm plugin install https://github.com/idsulik/helm-cel

values.schema.json を作成する代わりに、チャート ディレクトリにvalues.cel.yaml ファイルを作成します。簡単な例を次に示します:

rules:
  - expr: "has(values.service) && has(values.service.port)"
    desc: "service port is required"

  - expr: "values.service.port >= 1 && values.service.port <= 65535"
    desc: "service port must be between 1 and 65535"

  - expr: "!(has(values.replicaCount)) || values.replicaCount >= 1"
    desc: "if replicaCount is set, it must be at least 1"

チャートを検証するには:

helm cel ./mychart

実際の例

いくつかの一般的な検証パターンと、それらが JSON スキーマと CEL の両方でどのように表現されるかを見てみましょう。

1. 必須フィールド

JSON スキーマ:

{
  "required": ["service"],
  "properties": {
    "service": {
      "required": ["port"],
      "properties": {
        "port": {
          "type": "integer"
        }
      }
    }
  }
}

セル:

rules:
  - expr: "has(values.service) && has(values.service.port)"
    desc: "service port is required"

2. 条件付き要件

JSON スキーマ:

{
  "if": {
    "properties": {
      "persistence": {
        "const": true
      }
    }
  },
  "then": {
    "required": ["storageClass"]
  }
}

セル:

rules:
  - expr: "!has(values.persistence) || !values.persistence || has(values.storageClass)"
    desc: "storageClass is required when persistence is enabled"

3. 複雑な検証

JSON スキーマは、複雑な検証では非常に冗長になる可能性があります。 JSON スキーマではさらに複雑になる CEL の例を次に示します。

rules:
  - expr: |
      !has(values.resources) || 
      (!has(values.resources.limits) && !has(values.resources.requests)) ||
      (has(values.resources.limits.memory) && has(values.resources.requests.memory) &&
       int(values.resources.requests.memory) <= int(values.resources.limits.memory))
    desc: "If resources are specified, memory request must not exceed memory limit"

意味のあるエラーメッセージ

Helm CEL の最も優れた機能の 1 つは、明確なエラー メッセージです。検証が失敗すると、次のような役立つ出力が得られます:

❌ Validation failed: replica count must be at least 1
   Rule: values.replicaCount >= 1
   Path: replicaCount
   Current value: 0

パフォーマンスに関する考慮事項

CEL 式は効率的にコンパイルされ、評価されます。このプラグインは Helm ワークフローに最小限のオーバーヘッドを追加するため、開発と CI/CD パイプラインの両方に適しています。

次のステップ

  1. プラグインをインストールします: helm plugin install https://github.com/idsulik/helm-cel
  2. その他の例については、GitHub リポジトリを確認してください
  3. 独自の検証ルールを作成してみましょう!

結論

Helm CEL は、Helm チャートを検証するためのより表現力豊かで保守しやすい方法を提供します。 JSON スキーマと格闘している場合や、より柔軟な検証ルールが必要な場合は、ぜひ試してみてください。使い慣れた構文、強力な式、明確なエラー メッセージの組み合わせにより、Helm ユーザーのツールキットへの価値ある追加となります。

どのような検証パターンを希望しますか?以下のコメント欄でお知らせください!

以上がHelm CEL の紹介: Helm チャートを検証するためのより表現力豊かな方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。