Jika anda pernah menggunakan carta Helm, anda mungkin sudah biasa dengan cabaran mengesahkan nilai.yaml. Walaupun pengesahan JSON Schema terbina dalam Helm berfungsi, ia boleh menyusahkan dan mengehadkan. Hari ini, saya ingin memperkenalkan anda kepada Helm CEL, pemalam yang membawa kuasa Bahasa Ungkapan Biasa (CEL) Google kepada pengesahan carta Helm.
Sebelum terjun, jom cepat-cepat cover apa itu CEL. Common Expression Language (CEL) ialah bahasa ungkapan ringkas yang dicipta oleh Google yang membolehkan anda menulis peraturan pengesahan yang ringkas dan berkuasa. Ia digunakan dalam pengesahan CRD Kubernetes, konfigurasi Istio dan banyak projek lain dalam ekosistem asli awan.
Mula-mula, pasang pemalam:
helm plugin install https://github.com/idsulik/helm-cel
Daripada membuat values.schema.json, anda akan mencipta fail values.cel.yaml dalam direktori carta anda. Berikut ialah contoh mudah:
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"
Untuk mengesahkan carta anda:
helm cel ./mychart
Mari kita lihat beberapa corak pengesahan biasa dan cara ia dinyatakan dalam Skema JSON dan CEL.
Skema JSON:
{ "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"
Skema JSON:
{ "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"
Skema JSON boleh menjadi agak bertele-tele untuk pengesahan yang kompleks. Berikut ialah contoh CEL yang akan menjadi lebih rumit dalam Skema JSON:
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"
Salah satu ciri terbaik Helm CEL ialah mesej ralatnya yang jelas. Apabila pengesahan gagal, anda mendapat output berguna seperti ini:
❌ Validation failed: replica count must be at least 1 Rule: values.replicaCount >= 1 Path: replicaCount Current value: 0
Ekspresi CEL disusun dan dinilai dengan cekap. Pemalam menambah overhed minimum pada aliran kerja Helm anda, menjadikannya sesuai untuk kedua-dua pembangunan dan saluran paip CI/CD.
Helm CEL membawa cara yang lebih ekspresif dan boleh diselenggara untuk mengesahkan carta Helm anda. Jika anda pernah mendapati diri anda bergelut dengan Skema JSON atau inginkan peraturan pengesahan yang lebih fleksibel, cubalah. Gabungan sintaks yang biasa, ungkapan kuat dan mesej ralat yang jelas menjadikannya tambahan yang berharga kepada mana-mana kit alat pengguna Helm.
Apakah corak pengesahan yang anda ingin lihat? Beritahu saya dalam ulasan di bawah!
Atas ialah kandungan terperinci Memperkenalkan Helm CEL: Cara yang Lebih Ekspresif untuk Mengesahkan Carta Helm Anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!