ARTICLE DETAIL

资讯详情

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

Kubernetes Metrics Server 发布流程详解:从版本提案到 Helm Chart 全链路实践

Kubernetes Metrics Server 发布流程详解:从版本提案到 Helm Chart 全链路实践 云原生后端容器编排弹性伸缩【免费下载链接】metrics-serverScalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.项目地址https://gitcode.com/gh_mirrors/me/metrics-server点击查看免费下载本文以 Kubernetes Metrics Server 仓库的官方发布文档RELEASE.md为主体结合仓库中的 Makefile、OWNERS、cloudbuild.yaml、Helm Chart 等源码与配置证据完整梳理 Metrics Server 主版本Release与 Helm Chart 两条发布流程并深入解释make release-tag、CI 镜像推送、发布清单生成、OWNER 审批等每个环节背后的实现细节。读完本文你将掌握 Kubernetes 生态项目典型的代码 镜像 清单 Chart四层发布模型并能在需要为 Metrics Server 做贡献或管理类似 SIG 项目发布时准确执行每一步操作。一、发布模型总览按需发布而非固定周期Metrics Server 采用按需发布released on an as-needed basis策略即没有固定的版本节奏只要仓库中存在需要交付的变更例如新功能、Bug 修复或安全补丁维护者就可以发起一次发布。这一点与很多按固定节奏发版的组件不同意味着整个发布流程是事件驱动的从提出 issue、通过 OWNER 审批、合并版本号 PR、打 tag 构建镜像到发布 GitHub Release 与 Helm Chart每一步都由明确的触发条件衔接。从仓库结构看发布流程涉及三类交付物缺一不可交付物说明仓库内对应位置源码版本通过 git tag 标记并把版本号通过 LDFLAGS 嵌入二进制Makefile、cmd/metrics-server/app/options/options.go容器镜像由 CIGoogle Cloud Build构建并推送至镜像仓库cloudbuild.yaml发布清单components.yaml、high-availability.yaml等由 kustomize 渲染manifests/overlays/releaseHelm Chart独立的 Chart 版本随 Metrics Server 版本同步发布charts/metrics-server/Chart.yaml仓库当前发布状态可从 charts/metrics-server/Chart.yaml 读出version: 3.14.0、appVersion: 0.9.0即 Metrics Server 应用当前为 0.9.0对应 Chart 3.14.0两者遵循各自独立的版本序列详见后文 Chart 发布小节。二、Metrics Server 主版本发布流程10 步RELEASE.md 将主版本发布拆解为 10 个步骤下面逐一展开并补充每个步骤在仓库中的落地依据。第 1 步提出发布提案 Issue由维护者或社区成员创建一个 Issue提议发布一个新版本。Issue 中必须包含自上次发布以来的变更日志changelog通常通过仓库的 commit 对比视图生成。这一步的核心价值是让整个社区在发布前对这个版本里到底有什么形成共识同时也是后续公告与用户升级时的重要参考依据。第 2 步至少一名 OWNER 审批LGTM发布提案必须获得至少一位 OWNER的 LGTMLooks Good To Me才能继续。在 Kubernetes 生态中OWNERS 文件定义了项目的审批权限矩阵。查看本仓库的 OWNERS 文件approvers: - serathius - dgrisonnet reviewers: - RainbowMango - dgrisonnet - serathius - slashpai - yangjunmyfm192085可以看到approvers列表当前为 serathius、dgrisonnet拥有批准发布的权限。这个设计保证了发布动作是受控的——只有项目核心维护者才能推进版本交付避免未经审核的变更进入用户集群。第 3 步合并版本号硬编码PR发布前需要创建一个 PR把硬编码在代码中的版本号提升到新版本并合并到主干。版本号在仓库中并非单一存在从源码结构看至少体现在以下几处Chart 元数据appVersion字段见 charts/metrics-server/Chart.yaml如appVersion: 0.9.0二进制构建参数Makefile 通过VERSION_LDFLAGS将GIT_TAGgit describe --abbrev0 --tags的结果注入k8s.io/client-go/pkg/version包使metrics-server --version能输出准确的版本信息见 Makefile 第 59-61 行文档兼容性矩阵README 中的 Compatibility Matrix 记录了各版本对应的 Kubernetes 支持范围。这一步骤完成后主干代码即准备好被打上新的版本号。第 4 步创建 GitHub Release 草稿OWNER 在 GitHub 上创建一个draft草稿状态的 Release。草稿化的目的是先让 CI 完成镜像构建与推送等一切就绪后再正式对外发布避免出现版本已公开但镜像不可用的中间状态。第 5 步创建 Helm Chart 发布 Issue由于 Chart 发布与主版本发布是两条并行流程详见第四节RELEASE.md 要求 OWNER 在此刻专门创建一个 Issue用于启动对应版本的 Chart 发布并用该 Issue 记录整个 Chart 发布过程形成可审计的轨迹。第 6 步打标签并触发镜像构建OWNER 在本地执行GIT_TAG$VERSION make release-tag其中$VERSION形如v0.9.0注意 Kubernetes 风格标签带v前缀。查看 Makefile 中release-tag目标第 125-128 行.PHONY: release-tag release-tag: git tag $(GIT_TAG) git push origin $(GIT_TAG)它实际做了两件事在本地打 git tag并推送到远端 origin。tag 推送后仓库的 CIprow.k8s.io会被触发开始构建并推送新镜像到gcr.io/k8s-staging-metrics-serverstaging 仓库。镜像构建与推送的具体逻辑同样在 Makefile 中可见container基于go.mod中的 Go 版本拉取基础镜像并构建第 86-90 行push把镜像打上GIT_TAG标签并推送第 105-107 行push-all/push-multi-arch为amd64 arm arm64 ppc64le s390x五个架构分别推送镜像并用 docker manifest 创建多架构清单第 109-120 行。而驱动这套流程的 CI 配置在 cloudbuild.yaml它由 Google Cloud Build 执行make push-all并注入GIT_TAG$_PULL_BASE_REF、GIT_COMMIT$_PULL_BASE_SHA——这正是 tag 推送后自动构建镜像的发令枪。第 7 步向 registry.k8s.io 推广镜像staging 仓库的镜像被验证后还需要一个 PR 将其发布到官方镜像仓库registry.k8s.io。该 PR 创建在kubernetes/k8s.io仓库的registry.k8s.io/images/k8s-staging-metrics-server/images.yaml中。这是 Kubernetes 项目的标准镜像晋升流程staging临时→ 官方 registry确保只有通过 CI 验证的镜像才能进入用户可见的官方仓库。这一步完成后用户便可通过registry.k8s.io/metrics-server/metrics-server:v0.9.0拉取镜像。第 8 步发布 GitHub Release清单自动附加一切就绪后OWNER 正式publish该 GitHub Release。发布后CI 会自动把发布清单附加到 Release 页面——这正是用户能够执行kubectl apply -f https://.../releases/latest/download/components.yaml的原因。清单由 kustomize 从仓库渲染生成。在 Makefile 的release-manifests目标第 130-135 行中可以看到三类清单的来源release-manifests: mkdir -p $(OUTPUT_DIR) kubectl kustomize manifests/overlays/release $(OUTPUT_DIR)/components.yaml kubectl kustomize manifests/overlays/release-ha $(OUTPUT_DIR)/high-availability.yaml kubectl kustomize manifests/overlays/release-ha-1.21 $(OUTPUT_DIR)/high-availability-1.21.yaml其中components.yaml对应单副本标准安装high-availability.yaml与high-availability-1.21.yaml对应高可用安装后者用于 Kubernetes v1.21差异在于 PDB 的 API 版本见 manifests/overlays/release-ha-1.21。这些 overlay 最终引用 manifests/base 下的基础资源Deployment、RBAC、Service、APIService 等例如 manifests/base/deployment.yaml 中默认的参数为--kubelet-preferred-address-typesInternalIP,ExternalIP,Hostname、--metric-resolution15s等。第 9 步发送公告邮件版本发布后向 Kubernetes SIG Instrumentation 邮件组kubernetes-sig-instrumentationgooglegroups.com发送公告主题格式为[ANNOUNCE] metrics-server $VERSION is released公告是对社区的正式通知包含版本号与关键变更方便用户评估是否升级。第 10 步关闭发布 Issue最后关闭第 1 步创建的发布提案 Issue一次完整的发布闭环结束。三、版本发布中的三个关键实现细节3.1 版本号如何嵌入二进制在 Makefile 第 60-61 行构建时通过 ldflags 注入版本信息VERSION_LDFLAGS:-X $(PKG)/version.gitVersion$(GIT_TAG) -X $(PKG)/version.gitCommit$(GIT_COMMIT) -X $(PKG)/version.buildDate$(BUILD_DATE) LDFLAGS:-w $(VERSION_LDFLAGS)GIT_TAG来自git describe --abbrev0 --tags最近的 tagGIT_COMMIT来自git rev-parse。这意味着即使是本地开发构建metrics-server --version也能追溯到对应 commit为发布后的排障提供了关键依据。3.2 发布前必须通过质量门槛虽然 RELEASE.md 没有显式列出测试步骤但从仓库工程化配置看合并发布相关 PR 前会经过严格校验Makefile 中的verify目标第 223-224 行聚合了 license 检查、golangci-lint、TOC 检查、依赖校验go mod verifygo mod tidy、OpenAPI 生成物校验与结构化日志检查test-unit第 148-149 行会运行./pkg/... ./cmd/...的全部单元测试。这些检查保证了发布出去的是经过验证的代码。3.3 多架构支持是发布的一部分发布不只是打一个 tag 那么简单Makefile 第 23 行定义了ALL_ARCHITECTURESamd64 arm arm64 ppc64le s390x第 26-30 行又扩展了 darwin/windows 平台二进制push-all会为每个架构构建镜像并最终生成多架构 manifest。因此registry.k8s.io/metrics-server/metrics-server:v0.9.0是一个多架构镜像可运行在绝大多数 Kubernetes 节点架构上。四、Helm Chart 发布流程5 步Metrics Server 的 Helm Chart 作为仓库内独立组件维护位于 charts/metrics-server其发布流程与主版本解耦、但又保持同步节奏。Chart 变更遵循 Keep a Changelog 规范记录在 charts/metrics-server/CHANGELOG.md 中。第 1 步提出 Chart 发布 Issue创建一个提议发布新 Chart 版本的 Issue。这个 Issue 同时也是整个 Chart 发布过程的文档载体所有后续动作都在其中记录。第 2 步判断目标分支大多数情况下最新 Metrics Server 版本的 Chart 发布可以直接在master分支进行。但有两种情况需要将 PR 指向发布分支release branch该版本是backport回移植master分支上的 Chart 与要发布的版本不再兼容例如 master 上已包含尚未发布的改动。这个设计保证了 release 分支上的 Chart 永远与对应 Metrics Server 版本匹配。第 3 步更新 Chart.yaml 并提交 PR创建 PR 更新 charts/metrics-server/Chart.yaml 中的两个字段appVersionMetrics Server 应用版本如0.9.0versionChart 自身版本如3.14.0遵循 SemVer。注意 Chart 版本与 appVersion 是两套独立序列Chart 可以因为模板改动如 CHANGELOG.md 中记录的namespaceOverride、cert-manager annotations 修复等单独升版而无需升级 Metrics Server 镜像。第 4 步CI 自动校验 ChartPR 提交后触发chart linting and testing GitHub Action对 Chart 进行校验。从仓库 CI 配置看Chart 测试覆盖了多种 TLS 场景见 charts/metrics-server/ci 下的ci-values.yaml、tls-certManager-values.yaml、tls-existingSecret-values.yaml、tls-helm-values.yaml例如ci-values.yaml中通过--kubelet-insecure-tls参数验证无 TLS 场景下的渲染正确性。第 5 步合并并自动发布PR 合并后GitHub Action 会自动发布 Chart推送到基于gh-pages分支的 Chart 仓库。若发布发生在 release 分支则需要手动关闭第 1 步创建的 Issue。注意README 明确建议不要直接引用master分支上的 Chart 代码因为它可能包含自上次发布以来的未发布改动查看 Chart 代码应使用 Chart release tag。五、发布全流程时间线速查为便于整体把握将两条流程合并为一张时间线视图阶段主版本发布Helm Chart 发布涉及仓库文件发起发布提案 Issue附 changelogChart 发布 Issue—审批至少 1 名 OWNER LGTM—OWNERS版本更新合并版本号 PR更新 Chart.yaml 的 version/appVersioncharts/metrics-server/Chart.yaml构建GIT_TAG$VERSION make release-tag触发 CI 推镜像合并后 CI 发布 ChartMakefile、cloudbuild.yaml分发staging → registry.k8s.io 晋升 PR推送到 gh-pages Chart 仓库—公告GitHub Release 发布 邮件[ANNOUNCE] ...——收尾关闭 Issue分支发布需手动关闭 Issue—六、实践建议与常见问题发布不是一个人能完成的从 OWNERS 和 RELEASE.md 可以看到审批、打 tag、发布 Release、发公告分别由不同角色协作完成个人 contributor 的贡献止步于提交变更 提出发布 Issue后续动作均需 OWNER 执行。版本号一致性检查合并版本号 PR 前建议核对 charts/metrics-server/Chart.yaml 的appVersion与将要打的 git tagv0.9.0一致避免出现镜像标签与代码版本错位。发布清单依赖 kustomize 产物components.yaml等清单由 manifests/overlays/release 渲染而来若发布后发现清单与预期不符应先检查 base 与 overlay 的变更manifests/base、manifests/components/release。高可用清单的分版本high-availability-1.21.yaml与high-availability.yaml并存安装时务必按集群版本选择否则可能因 PDB API 版本差异导致部署失败参见 README.md 的 High Availability 一节与 manifests/overlays/release-ha-1.21。关注 Chart 变更日志用户升级 Chart 前应阅读 charts/metrics-server/CHANGELOG.md 中的 Added/Changed/Fixed/Security 分类记录例如 3.14.0 版本中 cert-manager annotations 此前未渲染 这类修复往往影响 GitOps 工具如 ArgoCD的同步状态。七、结语Metrics Server 的发布流程完整呈现了 CNCF/Kubernetes 生态项目按需发布 OWNER 审批 CI 驱动镜像构建 官方仓库晋升 独立 Chart 同步的工程范式。以 RELEASE.md 的 10 步主流程与 5 步 Chart 流程为骨架配合仓库中的 Makefile 与 cloudbuild.yaml 实现你可以精确复现从make release-tag到用户kubectl apply -f components.yaml的完整链路。对维护者而言这是交付新版本的行动清单对贡献者而言这揭示了我的 PR 何时以及如何进入正式版本的完整答案。赞分享云原生后端容器编排弹性伸缩【免费下载链接】metrics-serverScalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.项目地址https://gitcode.com/gh_mirrors/me/metrics-server点击查看免费下载相关推荐Hue扩展开发教程如何为项目定制专属颜色功能Hue扩展开发教程如何为项目定制专属颜色功能 Hue是一款强大的颜色处理框架为iOS、macOS和tvOS平台提供了丰富的颜色操作功能。本教程将带您快速掌握如何利用Cosmos-Predict2.5-2B实现自动驾驶场景模拟与机器人训练数据生成完整商业应用指南如何利用Cosmos Predict2.5 2B实现自动驾驶场景模拟与机器人训练数据生成完整商业应用指南 Cosmos Predict2.5 2B是NVIDI人工智能大模型多模态媒体生成具身智能ExternalDNS 发布流程全指南镜像发布、版本规范与 Helm Chart 发布ExternalDNS 发布流程全指南镜像发布、版本规范与 Helm Chart 发布 本篇技术指南以 ExternalDNS 项目官方发布文档为主体结合仓云原生上一篇Jina Reader 实战3 个用法让 LLM 实时读懂网页下一篇DataX-Web UI完整使用指南快速掌握数据同步可视化工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表