Shipper API参考手册:Application、Release、CapacityTarget等核心对象详解

Shipper API参考手册:Application、Release、CapacityTarget等核心对象详解

【免费下载链接】shipper Kubernetes native multi-cluster canary or blue-green rollouts using Helm 【免费下载链接】shipper 项目地址: https://gitcode.com/gh_mirrors/sh/shipper

Shipper是一个Kubernetes原生的多集群蓝绿部署和金丝雀发布工具,它通过扩展Kubernetes API提供了高级的发布策略和多集群编排能力。🚀 本文将详细介绍Shipper的核心API对象,帮助您快速掌握这个强大的Kubernetes发布管理工具。

什么是Shipper?

Shipper是一个Kubernetes扩展,专门用于实现复杂的发布策略和多集群编排。它让您能够使用kubectl来操作代表各种发布策略的对象,如蓝绿部署或金丝雀发布。这些策略可以部署到单个集群,也可以部署到全球多个集群。Shipper通过提供更高级别的API来简化CI/CD流水线脚本,让开发团队专注于应用程序特有的部分。

Application对象:应用管理的核心

Application对象是Shipper管理的核心,代表一个应用程序。在Shipper中,"应用程序"指的是由一个Helm Chart安装的Kubernetes对象集合。

Application规范(Spec)

.spec.revisionHistoryLimit

  • 可选字段,表示.status.history中关联的Release对象数量
  • 开发环境可以设置为较小值(如1),生产环境建议设置为较大值(如10或20)

.spec.template

  • 必需字段,作为Release对象的模板
  • 与Release对象的.spec.environment具有相同模式
  • 支持SemVer约束或特定Chart版本

Application状态(Status)

.status.history

  • 属于此Application的Release序列
  • 按生成顺序排列:最旧的Release在列表开头,最新的Release(竞争者)在末尾

条件(Conditions)

  • Aborting:表示是否正在进行中止操作
  • ReleaseSynced:表示竞争者Release是否反映了当前Application状态
  • RollingOut:表示发布是否正在进行中
  • ValidHistory:表示历史记录是否形成有效序列

Release对象:发布过程的管理者

Release对象包含Shipper运行特定版本应用程序所需的所有信息。每个Release都有独特的标签来帮助识别相关资源。

Release规范(Spec)

.spec.targetStep

  • 定义此Release应尝试完成的策略步骤
  • 用户推进或回滚发布的主要接口

.spec.environment

  • 包含应用程序部署所需的所有信息
  • 包含Chart定义、集群要求和发布策略

环境配置详解

Chart配置

chart:
  name: reviews-api
  version: 0.0.1
  repoUrl: localhost

集群要求

clusterRequirements:
  regions:
  - name: foo
  - name: bar
  capabilities:
  - gpu
  - pci

发布策略

strategy:
  steps:
  - name: staging
    capacity:
      incumbent: 100
      contender: 1
    traffic:
      incumbent: 100
      contender: 0

CapacityTarget对象:容量管理的关键

CapacityTarget是Release Controller用于改变应用程序在集群集合中副本数量的接口。它由Capacity Controller处理。

CapacityTarget规范(Spec)

.spec.clusters

  • 关联Release对象所在的集群列表
  • 每个条目包含集群名称和百分比
  • 百分比定义了Release在该集群中相对于最终副本数量的容量

CapacityTarget状态(Status)

.status.clusters

  • 表示所有需要安装关联Release对象的集群的容量状态
  • 包含可用副本数、实现百分比等信息

条件状态

  • Operational:集群是否可操作
  • Ready:是否正确数量的Pod正在运行且全部就绪

InstallationTarget对象:安装目标的定义

InstallationTarget描述了应该安装Release的具体集群集合。它由Release Controller的调度器在根据clusterRequirements选择具体集群后创建。

InstallationTarget规范(Spec)

.spec.clusters

  • 关联Release应该安装的集群名称列表
  • 安装意味着渲染Chart中的所有对象并将其插入集群

InstallationTarget状态(Status)

.status.clusters

  • 表示所有需要安装关联Release对象的集群的安装状态
  • 包含状态(失败或已安装)和消息信息

条件状态

  • Operational:集群是否可操作
  • Ready:Kubernetes是否已达到与InstallationTarget对象相关的期望状态

TrafficTarget对象:流量控制的核心

TrafficTarget是基于权重在不同Release之间转移流量的接口。目前仅支持原生Kubernetes流量转移:Pod标签和Service对象。

TrafficTarget规范(Spec)

.spec.clusters

  • 集群条目列表以及此Release在该集群中的期望流量权重
  • Traffic Controller通过汇总所有可用TrafficTarget对象的权重来计算正确的流量比例

TrafficTarget状态(Status)

.status.clusters

  • 表示所有需要安装关联Release对象的集群的流量状态
  • 包含实现流量权重等信息

条件状态

  • Operational:集群是否可操作
  • Ready:是否成功实现了期望的流量权重

Cluster对象:集群配置的基础

Cluster对象代表Shipper可以部署到的Kubernetes集群。它是一个管理接口,用于启用Shipper连接到集群进行管理,并允许管理员影响Release如何调度到此集群。

Cluster规范(Spec)

.spec.apiMaster

  • Kubernetes集群API服务器的URL
  • Shipper使用此URL连接到集群进行管理

.spec.capabilities

  • 必需字段,列出集群具有的能力
  • 能力是可用于在发布时选择集群的任意标签

.spec.region

  • 必需字段,指定集群所属的区域

.spec.scheduler

  • unschedulable:可选字段,导致在发布集群选择期间忽略集群
  • weight:可选字段,为集群分配权重,影响发布集群选择期间的优先级
  • identity:可选字段,为集群分配不同于.metadata.name值的身份

实际应用示例

创建Application对象

apiVersion: shipper.booking.com/v1alpha1
kind: Application
metadata:
  name: reviewsapi
  namespace: default
spec:
  revisionHistoryLimit: 10
  template:
    clusterRequirements:
      regions:
      - name: eu-west
      capabilities: []
    chart:
      name: nginx
      version: 0.1.0
      repoUrl: https://chartmuseum.local/charts
    values:
      replicaCount: 10
    strategy:
      steps:
      - name: staging
        capacity:
          incumbent: 100
          contender: 1
        traffic:
          incumbent: 100
          contender: 0
      - name: 50/50
        capacity:
          incumbent: 50
          contender: 50
        traffic:
          incumbent: 50
          contender: 50
      - name: full on
        capacity:
          incumbent: 0
          contender: 100
        traffic:
          incumbent: 0
          contender: 100

发布策略详解

Shipper的发布策略允许您定义复杂的发布流程:

  1. 暂存阶段(Staging)

    • 现有版本(incumbent)保持100%容量和流量
    • 新版本(contender)仅获得1%容量,0%流量
    • 用于验证新版本的基本功能
  2. 50/50阶段

    • 两个版本各获得50%容量和流量
    • 用于A/B测试和性能比较
  3. 完全上线阶段(Full on)

    • 新版本获得100%容量和流量
    • 旧版本完全下线

核心工作流程

1. 创建Application

用户创建Application对象,定义应用程序的基本配置和发布策略模板。

2. 生成Release

当Application的.spec.template发生变化时,Shipper会自动创建一个新的Release对象。

3. 调度集群

Release Controller根据clusterRequirements选择目标集群,并创建InstallationTarget。

4. 安装应用程序

Installation Controller在目标集群中安装Chart。

5. 调整容量

Capacity Controller根据策略步骤调整每个集群中的副本数量。

6. 转移流量

Traffic Controller根据策略步骤调整流量权重。

7. 完成发布

当所有策略步骤都完成后,发布完成。

最佳实践建议

1. 版本控制

  • 使用SemVer约束来指定Chart版本范围
  • 保留足够的发布历史以便回滚

2. 集群管理

  • 为集群定义清晰的能力标签
  • 使用区域标签进行地理分布管理

3. 发布策略

  • 从小规模开始,逐步扩大
  • 在每个阶段都设置适当的监控和验证
  • 确保有完整的回滚计划

4. 监控和调试

  • 定期检查各对象的.status字段
  • 关注条件(Conditions)状态变化
  • 使用标签进行资源追踪

常见问题解决

发布卡住

检查Release的.status.conditions,查看是否有Blocked条件为True,这可能表示存在发布阻塞。

容量不匹配

检查CapacityTarget的.status.clusters,确认每个集群的achievedPercent是否达到期望值。

流量转移失败

检查TrafficTarget的.status.clusters,确认achievedTraffic是否匹配期望权重。

安装失败

检查InstallationTarget的.status.clusters,查看失败的具体原因和错误消息。

总结

Shipper通过提供一组精心设计的API对象,为Kubernetes带来了强大的多集群发布管理能力。Application、Release、CapacityTarget、InstallationTarget和TrafficTarget等核心对象共同构成了一个完整的发布管理系统。🎯

掌握这些API对象的使用方法,您将能够:

  • 实现复杂的蓝绿部署和金丝雀发布策略
  • 管理跨多个集群的应用程序部署
  • 精确控制容量和流量转移
  • 实现安全的回滚机制
  • 构建可靠的CI/CD流水线

通过合理配置这些对象,您可以构建出既灵活又可靠的发布流程,确保应用程序的平稳部署和更新。💪


了解更多Shipper的详细信息,请参考官方文档:docs/api-reference/

【免费下载链接】shipper Kubernetes native multi-cluster canary or blue-green rollouts using Helm 【免费下载链接】shipper 项目地址: https://gitcode.com/gh_mirrors/sh/shipper

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

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

抵扣说明:

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

余额充值