Skaffold v2 渲染与部署架构深度解析

Skaffold v2 渲染与部署架构深度解析

skaffold Easy and Repeatable Kubernetes Development skaffold 项目地址: https://gitcode.com/gh_mirrors/sk/skaffold

前言

在现代云原生应用开发中,Kubernetes 配置管理一直是一个复杂且具有挑战性的任务。作为 Kubernetes 开发工具链中的重要一环,Skaffold 项目正在经历一次重大的架构演进。本文将深入剖析 Skaffold v2 版本中全新的渲染(Render)与部署(Deploy)架构设计,帮助开发者理解其核心思想和技术实现。

核心概念解析

DRY 与 WET 配置

在 Skaffold v2 的设计中,配置被明确分为两种状态:

  • DRY 配置:原始应用配置,可能包含变量、基座/覆盖层(kustomize 结构化布局)等未展开的元素。这类配置尚未经过任何验证或操作检查,不能直接被集群理解。

  • WET 配置:经过处理的应用程序配置,已经从 DRY 结构扁平化,并通过了一系列验证、生成和转换操作,是纯粹的 Kubernetes 资源,可以直接应用到集群。

这种区分使得配置管理过程更加清晰和可控。

现有架构的问题

当前工作流分析

Skaffold 目前的工作流主要包含以下几个步骤:

  1. 构建容器镜像
  2. 标签管理
  3. 配置验证
  4. 配置生成/转换
  5. 部署到集群

当前支持四种"部署器"(deployer):kpt、kustomize、helm 和 kubectl。每种部署器在不同步骤中执行的操作存在显著差异。

主要问题总结

  1. 部署器范围混淆:部署器名称与实际功能不符。例如,kustomize "部署器"实际上没有部署操作(依赖 kubectl),但却被称为部署器。

  2. 混合使用问题:不同部署器的混合使用通常意味着用户在使用变通方案填补功能空白,这会加剧已知问题并使 Skaffold 更加脆弱。

  3. 当前 kpt 部署器的限制:基于 kpt v0.34.0 设计的部署器存在兼容性问题,缺乏配置资源路径 DAG 检测,处理方式不够声明式原生。

Skaffold v2 架构设计

总体设计思路

Skaffold v2 的核心设计是将配置管理明确分为两个正交的关注点:

  1. 配置水合(渲染):将 DRY 配置转换为 WET 配置
  2. 配置部署:将 WET 配置应用到 Kubernetes 控制平面

新架构将完全依赖 kpt 作为技术基础,提供配置打包、水合和部署的标准 API 和工具链。

新渲染功能设计

两种渲染模式
  1. kpt 管理模式:适用于已经使用 kpt 水合功能的用户,直接指向声明式的 Kptfile。

  2. Skaffold 管理模式:在 skaffold.yaml 中直接定义水合管道,包含三类操作:

    • 生成:定义配置来源(原始清单、kustomize 资源、helm 图表等)
    • 转换:定义变更配置的操作(仅允许白名单工具)
    • 验证:定义验证配置的操作(仅允许白名单工具)
配置示例
apiVersion: skaffold/v3
kind: Config
render:
  generate:
    manifests:
      - k8s-pod.yaml
    helmCharts:
      - path: charts/myapp
        valuesFile: values/prod.yaml
  transform:
    - name: set-annotations
  validate:
    - name: kubeval
  output: rendered/

新部署功能设计

部署部分大幅简化:

  • 不再支持 helm 安装(仅支持 helm 图表渲染)
  • 仅使用 kpt live 应用 WET 配置
  • 不再需要指定部署器名称
deploy:
  dir: rendered/
  inventoryID: my-app
  inventoryNamespace: default

技术实现细节

kpt 管道集成

无论是 kpt 管理模式还是 Skaffold 管理模式,最终都由 kpt fn render 命令驱动:

  1. 对于 kpt 管理模式,直接从 .render.kpt 路径读取 Kptfile
  2. 对于 Skaffold 管理模式,动态创建 Kptfile

Skaffold 会创建临时目录 .kpt-hydrated 缓存 kustomize DRY 配置、helm 图表和原始清单,kpt 将在临时目录中就地水合配置。

kpt live 集成

kpt live 依赖 ResourceGroup 准确地将 WET 配置部署到集群:

  1. skaffold devskaffold deploy 会检测并在获得用户许可后安装 ResourceGroup 控制器
  2. 使用 kpt live apply 命令执行实际部署

内置 kpt

Skaffold 将通过 go bindata 嵌入 kpt,与 skaffold 二进制一起发布:

  • 确保版本匹配
  • 用户不再需要单独安装 helm、kubectl、kustomize 和 kpt
  • helm 和 kustomize 作为 kpt 函数使用

迁移方案

Helm 部署器迁移

用户可以选择:

  1. 继续使用 helm 部署器(但不会获得新 kpt 功能支持)
  2. 迁移到新架构的 kpt 渲染和部署

Skaffold 提供 fix 命令帮助迁移,该命令会重新生成 skaffold.yaml。迁移后,如果用户在 skaffold.yaml 中更改 helm 配置,Skaffold 将自动重新创建相应的 kpt 资源。

总结

Skaffold v2 的渲染与部署架构通过明确分离配置水合和部署关注点,并统一基于 kpt 实现,解决了当前版本中的主要痛点。这一设计:

  1. 提供了更清晰的配置管理流程
  2. 消除了工具链版本冲突问题
  3. 增强了部署的可靠性和准确性
  4. 为未来功能扩展奠定了更好的基础

对于现有用户,Skaffold 提供了平滑的迁移路径;对于新用户,这一架构将提供更一致和可靠的开发体验。随着云原生技术的不断发展,这种基于标准化工具链的架构设计将更好地满足日益复杂的 Kubernetes 应用开发需求。

skaffold Easy and Repeatable Kubernetes Development skaffold 项目地址: https://gitcode.com/gh_mirrors/sk/skaffold

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎玫洵Errol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值