En corto
| |
Y en CI, versiones fijas de las tres piezas (helm, helmfile, helm-diff): la mitad de los errores raros de helmfile son combinaciones que no se han probado juntas.
Los errores y qué los arregla
| Mensaje | Causa | Arreglo |
|---|---|---|
helmfile diff dice que no hay cambios, pero el clúster no coincide con el chart | helm-diff compara el manifiesto del último release con el nuevo, no con el estado vivo; un kubectl edit a mano no aparece | HELM_DIFF_THREE_WAY_MERGE=true (o --three-way-merge en helm-diff) |
| El diff está lleno de cambios de comillas, orden de claves e indentación | Distintas versiones de Helm o del chart serializan distinto | HELM_DIFF_NORMALIZE_MANIFESTS=true |
key "image" already set in map al renderizar valores | La librería YAML antigua no admite claves duplicadas ni ciertos anclajes en values | HELMFILE_GOCCY_GOYAML=true en helmfile 0.x; helmfile 1.x ya usa esa librería |
Body is too long (maximum is 65536 characters) o el job se eterniza en la primera instalación | El diff de una instalación nueva es el chart entero, y el comentario en la PR o el log no lo aguantan | --skip-diff-on-install |
Error: failed to authorize: … 403 Forbidden al bajar un chart de oci://ghcr.io/… | Helm anterior a 3.8 con soporte OCI experimental, o sin helm registry login | Actualizar helm; helm registry login ghcr.io si el registro es privado |
Error: validation: more than one dependency with name or alias | Desajuste entre helm y helmfile (helm 3.15 necesitó helmfile ≥ 0.164; helm 3.13 iba con 0.158) | Actualizar helmfile a la par que helm; en 1.x ya no ocurre |
| El diff sale sin color en CI | helm-diff detecta que no hay TTY | HELM_DIFF_COLOR=true |
Adoptar recursos que ya existen
El caso típico: alguien instaló ArgoCD (o lo que sea) con kubectl apply -f, y ahora quieres que lo gestione una release de helmfile. Helm se niega a instalar sobre recursos que no son suyos (rendered manifests contain a resource that already exists … invalid ownership metadata). Desde Helm 3.2 basta con marcarlos como suyos antes de instalar:
| |
Solo marca lo que el chart va a renderizar: un recurso etiquetado que el chart no incluye no pasa nada, pero uno que el chart renderiza con otro nombre acaba duplicado.
helmfile 1.x y Helm 4
Si vienes de 0.x, esto es lo que cambia al actualizar:
- Un
helmfile.yamlcon plantillas Go tiene que llamarsehelmfile.yaml.gotmpl; el.yamla secas ya no se renderiza. environments:yreleases:van en partes separadas por---dentro del mismo archivo.helmfile deletedesaparece (esdestroy),helmfile chartstambién, y--argsse elimina.HELMFILE_SKIP_INSECURE_TEMPLATE_FUNCTIONSpasa a serHELMFILE_DISABLE_INSECURE_FEATURES.- helmfile 1.x funciona con Helm 3 y Helm 4. Con Helm 4, instala helm-diff con
helm plugin install https://github.com/databus23/helm-diff --verify=false(Helm 4 verifica la procedencia de los plugins y helm-diff no la publica).
Trampas
applysin diff previo en CI:helmfile applyya hace el diff y solo aplica si hay cambios;syncaplica siempre. En pipelines,diffen la PR yapplyen main.installed: falsedesinstala la release en el siguienteapply; útil para retirar cosas por Git, peligroso si lo copias de otro entorno.- Secretos en
values: helmfile los deja en el manifiesto del release (Secret de Helm en el namespace); usahelm-secretscon SOPS o referencias externas. --skip-diff-on-installno es--skip-diff: solo se salta el diff en releases que aún no existen. Las actualizaciones siguen mostrando su diff.- Tres binarios, tres versiones:
helm version,helmfile versionyhelm plugin listen el primer paso del pipeline, y en la imagen de CI fijadas por tag.
Referencias: helm-diff, helmfile y la propuesta de cambios para 1.0.
Ver también
- k3s: importar imágenes sin registro — cuando la release depende de una imagen que no está en ningún registro.