>백엔드 개발 >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 차트를 사용해 본 적이 있다면 아마도 value.yaml 유효성 검사에 익숙할 것입니다. Helm에 내장된 JSON 스키마 유효성 검사는 작동하지만 번거롭고 제한적일 수 있습니다. 오늘은 Google CEL(Common Expression Language)의 강력한 기능을 Helm 차트 검증에 적용하는 플러그인인 Helm CEL을 소개하고자 합니다.

CEL이란 무엇입니까?

본론에 앞서 CEL이 무엇인지 빠르게 알아보겠습니다. CEL(Common Expression Language)은 간결하고 강력한 유효성 검사 규칙을 작성할 수 있도록 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을 생성하는 대신 차트 디렉터리에 value.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의 가장 큰 특징 중 하나는 명확한 오류 메시지입니다. 검증에 실패하면 다음과 같은 유용한 출력이 표시됩니다.

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

성능 고려 사항

CEL 표현식은 효율적으로 컴파일되고 평가됩니다. 플러그인은 Helm 워크플로에 최소한의 오버헤드를 추가하므로 개발 및 CI/CD 파이프라인 모두에 적합합니다.

다음 단계

  1. 플러그인 설치: helm 플러그인 설치 https://github.com/idsulik/helm-cel
  2. 더 많은 예제는 GitHub 저장소를 확인하세요
  3. 자신만의 유효성 검사 규칙을 작성해 보세요!

결론

Helm CEL은 Helm 차트를 검증할 수 있는 더욱 표현력이 뛰어나고 유지 관리가 쉬운 방법을 제공합니다. JSON 스키마를 사용하는 데 어려움을 겪고 있거나 보다 유연한 유효성 검사 규칙을 원하는 경우 한번 시도해 보십시오. 친숙한 구문, 강력한 표현, 명확한 오류 메시지의 조합으로 Helm 사용자의 툴킷에 귀중한 추가 기능을 제공합니다.

어떤 검증 패턴을 확인하고 싶으신가요? 아래 댓글로 알려주세요!

위 내용은 Helm CEL 소개: Helm 차트를 검증하는 보다 표현적인 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.