
Shipper API参考手册Application、Release、CapacityTarget等核心对象详解【免费下载链接】shipperKubernetes native multi-cluster canary or blue-green rollouts using Helm项目地址: https://gitcode.com/gh_mirrors/sh/shipperShipper是一个Kubernetes原生的多集群蓝绿部署和金丝雀发布工具它通过扩展Kubernetes API提供了高级的发布策略和多集群编排能力。 本文将详细介绍Shipper的核心API对象帮助您快速掌握这个强大的Kubernetes发布管理工具。什么是ShipperShipper是一个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竞争者在末尾条件ConditionsAborting表示是否正在进行中止操作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: 0CapacityTarget对象容量管理的关键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集群是否可操作ReadyKubernetes是否已达到与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.apiMasterKubernetes集群API服务器的URLShipper使用此URL连接到集群进行管理.spec.capabilities必需字段列出集群具有的能力能力是可用于在发布时选择集群的任意标签.spec.region必需字段指定集群所属的区域.spec.schedulerunschedulable可选字段导致在发布集群选择期间忽略集群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的发布策略允许您定义复杂的发布流程暂存阶段Staging现有版本incumbent保持100%容量和流量新版本contender仅获得1%容量0%流量用于验证新版本的基本功能50/50阶段两个版本各获得50%容量和流量用于A/B测试和性能比较完全上线阶段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/【免费下载链接】shipperKubernetes native multi-cluster canary or blue-green rollouts using Helm项目地址: https://gitcode.com/gh_mirrors/sh/shipper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考