ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Renovate 的 aws-eks-addon 数据源:自动化 EKS 插件版本更新实战指南

Renovate 的 aws-eks-addon 数据源:自动化 EKS 插件版本更新实战指南 Renovate 的 aws-eks-addon 数据源自动化 EKS 插件版本更新实战指南【免费下载链接】renovateHome of the Renovate CLI: Cross-platform Dependency Automation by Mend.io项目地址: https://gitcode.com/GitHub_Trending/re/renovateRenovate 内置的aws-eks-addondatasource 通过 AWS 官方 API 查询 Amazon EKS 上可用 Addon插件的版本列表用于自动发现并升级 EKS 插件版本。本文以 lib/modules/datasource/aws-eks-addon/readme.md 为骨架结合该数据源的源码实现与测试用例完整讲解 AWS 凭证配置、IAM 最小权限、自定义 manager 的 regex 匹配方案以及如何在 Terraform、YAML 等配置文件中为 EKS Addon 开启版本更新。读完本文你将能够在自己的仓库中直接落地一套可运行的 EKS Addon 依赖自动升级配置。一、数据源定位与工作原理aws-eks-addon是 Renovate 中负责 EKS Addon 版本发现的数据源。它在 lib/modules/datasource/aws-eks-addon/index.ts 中实现核心逻辑是调用 AWS SDK for JavaScript v3 的DescribeAddonVersionsCommand命令见 index.ts#L38-L43向 AWS EKS API 查询指定插件在特定 Kubernetes 版本下的可用版本列表并把结果整理为 Renovate 标准的releases结构version插件版本号如v1.18.1-eksbuild.3default是否为当前集群配置下的 AWS 默认推荐版本compatibleWith该版本兼容的 Kubernetes 集群版本列表。该数据源声明了caching trueindex.ts#L17getReleases通过withCache以datasource-aws-eks-addon:getReleases:{packageName}为键做结果缓存index.ts#L70-L79避免重复请求 AWS API。查询请求固定使用maxResults: 1index.ts#L41即只取一个 Addon 的信息块再从该 Addon 的addonVersions中展开全部版本从而以最少的 API 开销获取完整版本列表。二、AWS 凭证配置Renovate 与 AWS 服务交互时统一使用 AWS SDK for JavaScript因此可以像使用awsCLI 一样通过标准方式提供凭证具体说明见 docs/usage/calling-aws-services.md通过AWS_REGION环境变量或~/.aws/config设置区域通过AWS_ACCESS_KEY_ID与AWS_SECRET_ACCESS_KEY环境变量或~/.aws/credentials提供凭证通过AWS_PROFILE环境变量选择使用的 profile。2.1 为数据源单独配置 hostRules 凭证除默认凭证链外还可以专门为该数据源配置一条hostRules。设置hostType为aws-eks-addonusername为 Access Key IDpassword为 Secret Access Key可选token为 Session Token{ hostRules: [ { hostType: aws-eks-addon, username: access-key-id, password: secret-access-key, token: session-token } ] }从源码看这些凭证仅用于 EKS Addon 查询。在 getClient 中Renovate 先通过hostRules.find({ hostType: AwsEKSAddonDataSource.id })查找上述配置若同时存在username和password则直接使用accessKeyId / secretAccessKey / sessionToken构造 AWS 凭证否则回退到fromNodeProviderChain(profile ? { profile } : undefined)即 AWS 默认凭证提供者链环境变量 → 共享凭证文件 → 实例角色等与awsCLI 的行为一致。测试 index.spec.ts#L174-L198 专门验证了「host rule 凭证优先于 profile」这一优先级即使 packageName 中传入了profile只要存在 hostRules 凭证就会使用 hostRules 中的凭证。2.2 IAM 最小权限该数据源只需要一个 API 调用eks:DescribeAddonVersions因此最小 IAM 权限策略如下{ Sid: AllowDescribeEKSAddonVersions, Effect: Allow, Action: [eks:DescribeAddonVersions], Resource: * }出于安全最佳实践建议为 Renovate 使用独立的 IAM 用户/角色仅授予上述权限避免授予 EKS 集群的写权限或其它敏感权限。三、使用方式custom manager minified JSON packageName由于 Renovate 目前没有专门解析 EKS Addon 的原生 manager需要借助custom managerregex 类型识别仓库中的插件版本声明。关键点在于必须把 Kubernetes 版本与插件名打包成一个 minified压缩无空格JSON 对象作为packageName传给数据源。例如获取 Kubernetes 1.30 的vpc-cni版本{kubernetesVersion:1.30,addonName:vpc-cni}minified JSON 对象支持以下字段完整字段定义与校验规则见 schema.ts字段是否必填说明addonName必填插件名称需匹配^[a-z0-9][a-z0-9-]*[a-z0-9]$如vpc-cni、kube-proxykubernetesVersion可选集群 Kubernetes 版本格式必须为主.次如1.30缺省时不按集群版本过滤default可选传true时仅返回 AWS 标记为默认版本的插件版本支持布尔值或字符串true/falseregion可选指定查询的 AWS 区域profile可选指定使用的 AWS 凭证 profile校验由 zod schemaEksAddonsFilter完成schema.ts#L5-L21schema.spec.ts 中的用例给出了合法与非法输入的边界kubernetesVersion: 130缺少点号分隔、addonName: kube_proxy含下划线、缺少addonName的 JSON 都会被判定为非法解析失败时数据源会记录Error parsing eks-addons config.警告并返回空结果index.ts#L27-L34。3.1 在注释中声明 eksAddonsFilter推荐的做法是在被监控文件中的版本行上方用# renovate: eksAddonsFilter{...}注释声明过滤条件。数据源会在每个 Addon 上查询默认版本或指定 Kubernetes 版本的版本示例如下# discover kube-proxy addon versions without specifying a cluster version. renovate: eksAddonsFilter{addonName:kube-proxy} # discover kube-proxy default addon versions renovate: eksAddonsFilter{addonName:kube-proxy, default:true} # discover vpc-cni addon versions on Kubernetes 1.30 in us-east-1 region using environmental AWS credentials. renovate: eksAddonsFilter{kubernetesVersion:1.30,addonName:vpc-cni,region:eu-west-1} # discover vpc-cni addon versions on Kubernetes 1.30 in us-east-1 region using AWS credentials from renovate-east profile. renovate: eksAddonsFilter{kubernetesVersion:1.30,addonName:vpc-cni,region:us-east-1,profile:renovate-east}说明虽然 EKS 通常在不同区域支持相同的插件版本但依然可以通过region字段按区域发现版本region会传入 AWS SDK 构造的EKSClient中index.ts#L88测试 index.spec.ts#L271-L298 验证了 packageName 中的 region 确实被透传给 AWS 客户端profile仅在未配置 hostRules 凭证时生效凭证优先级见 2.1 节。3.2 完整 custom manager 配置示例下面是一个可复制使用的完整配置匹配所有 Terraform 文件并识别其中的版本声明{ packageRules: [ { matchDatasources: [aws-eks-addon], overrideDepName: {{replace .*\addonName\:\([^\])\.* $1 depName}} } ], customManagers: [ { customType: regex, managerFilePatterns: [/.*\\.tf/], matchStrings: [ .*# renovate: eksAddonsFilter(?packageName.*?)\n.*?[a-zA-Z0-9-_:]*[ ]*?[:|][ ]*?[\|]?(?currentValue[a-zA-Z0-9-_.])[\|]?.* ], datasourceTemplate: aws-eks-addon, versioningTemplate: aws-eks-addon // Optional. Default value is aws-eks-addon } ] }配置要点matchDatasources限定只对aws-eks-addon数据源的依赖生效overrideDepName使用 Renovate 模板的replace函数从 minified JSON 的depName中提取addonName作为依赖展示名让 PR 标题更友好managerFilePatterns限定匹配/.*\.tf/Terraform 文件可按需替换为.yaml、.yml、.json等扩展名matchStrings中的正则负责两件事捕获# renovate: eksAddonsFilter...注释作为packageName命名组并捕获紧随其后的版本赋值语句中的版本值作为currentValuedatasourceTemplate固定为aws-eks-addonversioningTemplate默认即为aws-eks-addon可省略。四、被监控文件的两种写法4.1 Terraform 变量声明上面的配置可以识别如下 Terraform 变量声明在default值上方带 eksAddonsFilter 注释variable vpc_cni_version { type string description EKS vpc-cni add-on version # kubernetesVersion and addonName provided # renovate: eksAddonsFilter{kubernetesVersion:1.30,addonName:vpc-cni} default v1.18.1-eksbuild.3 }Renovate 发现default v1.18.1-eksbuild.3为当前版本按注释中的过滤条件查询vpc-cni在 Kubernetes 1.30 下的新版本并生成升级 PR。4.2 YAML 清单声明对于name version键值对形式的清单如某些 IAC 工具或自研清单只提供addonName与default过滤条件addons: - name: vpc-cni # only addon name and the supported default version # renovate: eksAddonsFilter{addonName:vpc-cni, default:true} version: v1.18.5-eksbuild.1此时 Renovate 仅把 AWS 标记为默认的版本作为可升级目标避免升级到非默认可能不稳定的版本。五、版本号解析规则aws-eks-addon数据源默认关联同名的aws-eks-addonversioning见 index.ts#L16其实现位于 lib/modules/versioning/aws-eks-addon/index.ts。它基于正则表达式解析版本号^v?(?major\d)\.(?minor\d)\.(?patch\d)(?compatibility-eksbuild\.)(?build\d)$即合法的插件版本形如v1.19.0-eksbuild.1其构成包括Major / Minor / Patch遵循语义化版本 2.0 的三段式分别表示破坏性变更、新功能增强与缺陷修复-eksbuild.N构建元数据表示 EKS 构建系统生成的特定构建/发布用于区分同版本号下不同独立构建的产物便于追踪与排障。正因版本含-eksbuild.N构建号插件版本并非纯 SemVer因此必须使用该专用 versioning 而非通用semver才能正确比较与排序。六、测试验证与行为边界仓库中的测试用例从行为层面印证了上述设计见 index.spec.ts查询不存在的 AddonAWS 返回空时结果返回null且请求参数严格为{ kubernetesVersion, addonName, maxResults: 1 }index.spec.ts#L97-L116缺少addonName的 packageName 被 schema 拒绝并产生警告日志index.spec.ts#L118-L132仅提供addonName时返回该插件全部版本并附带compatibleWith兼容集群版本与default标记index.spec.ts#L134-L163提供default: true时仅保留defaultVersion: true的版本index.spec.ts#L209-L233对缺少基本字段的畸形版本条目会被过滤掉不会进入发布列表index.spec.ts#L264-L266。七、常见问题与注意事项minified JSON 不能有空格packageName必须压缩为一行无空格的 JSON否则正则捕获与 schema 解析都可能失败。凭证优先级hostRules 凭证 profile 默认凭证提供者链同时配置时应理解这一优先级避免误用凭证。addonName命名规则只能使用小写字母、数字与连字符如aws-cloudwatch-controller下划线等字符会被 schema 拒绝。default: true的取舍开启后只跟踪 AWS 默认推荐版本适合追求稳定的集群关闭则跟踪该插件全部可用版本更新更激进。匹配文件范围managerFilePatterns只匹配.tf文件若在 YAML 清单中使用需同时调整为正则或使用多个 custom manager。IAM 权限收敛仅授予eks:DescribeAddonVersions即可无需 EKS 写权限。八、进一步阅读数据源核心实现lib/modules/datasource/aws-eks-addon/index.ts过滤条件 schema 定义与校验lib/modules/datasource/aws-eks-addon/schema.ts数据源行为测试lib/modules/datasource/aws-eks-addon/index.spec.ts插件版本号解析规则lib/modules/versioning/aws-eks-addon/index.tsAWS 凭证配置通用说明docs/usage/calling-aws-services.md【免费下载链接】renovateHome of the Renovate CLI: Cross-platform Dependency Automation by Mend.io项目地址: https://gitcode.com/GitHub_Trending/re/renovate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表