Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung von Helm CEL: Eine ausdrucksstärkere Möglichkeit, Ihre Helm-Diagramme zu validieren

Einführung von Helm CEL: Eine ausdrucksstärkere Möglichkeit, Ihre Helm-Diagramme zu validieren

Barbara Streisand
Barbara StreisandOriginal
2024-11-22 16:35:16658Durchsuche

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

Wenn Sie mit Helm-Diagrammen gearbeitet haben, sind Sie wahrscheinlich mit der Herausforderung der Validierung von „values.yaml“ vertraut. Die in Helm integrierte JSON-Schema-Validierung funktioniert zwar, kann aber umständlich und einschränkend sein. Heute möchte ich Ihnen Helm CEL vorstellen, ein Plugin, das die Leistungsfähigkeit von Googles Common Expression Language (CEL) in die Helm-Diagrammvalidierung einbringt.

Was ist CEL?

Bevor wir eintauchen, wollen wir kurz erläutern, was CEL ist. Common Expression Language (CEL) ist eine von Google entwickelte einfache Ausdruckssprache, mit der Sie prägnante, leistungsstarke Validierungsregeln schreiben können. Es wird bei der Kubernetes CRD-Validierung, der Istio-Konfiguration und vielen anderen Projekten im Cloud-nativen Ökosystem verwendet.

Warum CEL anstelle des JSON-Schemas verwenden?

  1. Ausdrucksstärker: Mit CEL können Sie komplexe Validierungsregeln natürlicher und lesbarer schreiben
  2. Vertraute Syntax: Wenn Sie Programmiersprachen wie Python oder JavaScript verwenden, wird sich die Syntax von CEL natürlich anfühlen
  3. Typsicher: CEL bietet eine starke Typprüfung und bleibt dabei flexibel
  4. Für Cloud Native entwickelt: CEL wird bereits im gesamten Kubernetes-Ökosystem verwendet

Erste Schritte

Installieren Sie zunächst das Plugin:

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

Anstatt eine Datei „values.schema.json“ zu erstellen, erstellen Sie eine Datei „values.cel.yaml“ in Ihrem Diagrammverzeichnis. Hier ist ein einfaches Beispiel:

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"

So validieren Sie Ihr Diagramm:

helm cel ./mychart

Beispiele aus der Praxis

Sehen wir uns einige gängige Validierungsmuster an und wie sie sowohl im JSON-Schema als auch in CEL ausgedrückt werden.

1. Erforderliche Felder

JSON-Schema:

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

CEL:

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

2. Bedingte Anforderungen

JSON-Schema:

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

CEL:

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

3. Komplexe Validierungen

Das JSON-Schema kann bei komplexen Validierungen recht ausführlich werden. Hier ist ein CEL-Beispiel, das im JSON-Schema viel komplizierter wäre:

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"

Fehlermeldungen, die Sinn machen

Eine der besten Funktionen von Helm CEL sind die klaren Fehlermeldungen. Wenn die Validierung fehlschlägt, erhalten Sie eine hilfreiche Ausgabe wie diese:

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

Leistungsüberlegungen

CEL-Ausdrücke werden effizient kompiliert und ausgewertet. Das Plugin fügt Ihrem Helm-Workflow nur minimalen Overhead hinzu und eignet sich daher sowohl für Entwicklungs- als auch für CI/CD-Pipelines.

Nächste Schritte

  1. Installieren Sie das Plugin: Helm-Plugin installieren https://github.com/idsulik/helm-cel
  2. Weitere Beispiele finden Sie im GitHub-Repository
  3. Beginnen Sie mit dem Schreiben Ihrer eigenen Validierungsregeln!

Abschluss

Helm CEL bietet eine aussagekräftigere und wartbarere Möglichkeit, Ihre Helm-Diagramme zu validieren. Wenn Sie jemals Probleme mit dem JSON-Schema hatten oder flexiblere Validierungsregeln wünschen, probieren Sie es aus. Die Kombination aus vertrauter Syntax, leistungsstarken Ausdrücken und klaren Fehlermeldungen macht es zu einer wertvollen Ergänzung für das Toolkit jedes Helm-Benutzers.

Welche Validierungsmuster würden Sie gerne sehen? Lass es mich unten in den Kommentaren wissen!

Das obige ist der detaillierte Inhalt vonEinführung von Helm CEL: Eine ausdrucksstärkere Möglichkeit, Ihre Helm-Diagramme zu validieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn