Heim > Artikel > Backend-Entwicklung > Einführung von Helm CEL: Eine ausdrucksstärkere Möglichkeit, Ihre Helm-Diagramme zu validieren
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.
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.
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
Sehen wir uns einige gängige Validierungsmuster an und wie sie sowohl im JSON-Schema als auch in CEL ausgedrückt werden.
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"
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"
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"
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
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.
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!