VS Code编辑k8s values.yaml报Map keys must be unique错误的关闭方法
Red Hat提供的VS Code YAML扩展(扩展ID:redhat.vscode-yaml)默认遵循YAML 1.2规范校验映射键唯一性。开发Helm Chart时,K8s资源配置内的重复注解键虽然在集群侧可正常生效,但会触发Map keys must be unique错误提示。
触发错误的典型配置片段如下:
annotations: kubernetes.io/ingress.class: "internal-nginx" nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/use-regex: "true"
可按以下三个作用域分别关闭该提示:
单文件级别关闭
在需要关闭提示的YAML文件最顶部添加如下行内配置注释即可,配置仅对当前文件生效,不影响其他文件的校验规则:
# yaml-language-server: $allowDuplicateKeys = true
添加后无需重启编辑器,扩展会自动重新加载校验规则,当前文件的重复键错误会立即消失。
文件夹级别关闭
在目标文件夹根目录下创建.vscode/settings.json文件(若文件已存在则直接追加配置项),加入如下核心配置:
{ "yaml.allowDuplicateKeys": true }
该配置仅对当前VS Code打开的文件夹生效,文件夹下所有YAML文件都会关闭重复键校验,不会影响其他目录下的文件校验规则。如果需要精细化控制,可配合文件路径匹配规则,仅对Helm模板目录等特定路径下的YAML关闭该规则,其余路径保持默认校验即可。
代码仓库级别关闭
配置逻辑和文件夹级别完全一致,只需要将配置好的包含"yaml.allowDuplicateKeys": true规则的.vscode/settings.json文件提交到代码仓库根目录即可。所有协作者使用VS Code拉取并打开该仓库根目录时,会自动加载该配置,无需手动修改本地编辑器设置。如果仓库内同时存在非K8s/Helm场景的YAML文件(比如CI配置、项目配置文件),建议搭配路径匹配规则,仅对Helm Chart相关的YAML路径关闭重复键校验,避免遗漏其他场景下的重复键错误。
注:该配置仅关闭重复键的唯一性校验,不会影响YAML语法错误、结构合法性等其他校验能力。
内容的提问来源于stack exchange,提问作者Juno Wong

