1 - 概念
十二因子应用程序
十二因子应用 是一种构建现代应用程序的方法论,可以在分布式系统中进行扩展。
十二因子是对多年软件即服务应用经验的宝贵总结,特别是基于 Heroku 平台的经验。
Workflow 旨在运行遵循 十二因子应用 方法论和最佳实践的应用程序。
Kubernetes
Kubernetes 是 Google 开发并捐赠给 云原生计算基金会 的开源集群管理器。Kubernetes 管理集群上的所有活动,包括:期望状态收敛、稳定服务地址、健康监控、服务发现和 DNS 解析。
Workflow 基于 Kubernetes 抽象如 Services、Deployments 和 Pods 来提供开发者友好的体验。从应用程序源代码直接构建容器、聚合日志、管理部署配置和应用发布只是 Workflow 添加的一些功能。
Drycc Workflow 是一组可通过 Helm 安装的 Kubernetes 原生组件。熟悉 Kubernetes 的系统工程师会觉得运行 Workflow 很轻松。
有关更多详细信息,请参阅 组件 概述。
容器
[容器][] 是一个开源项目,用于构建、运输和运行任何应用程序作为轻量级、可移植、自给自足的容器。
如果您尚未将应用程序转换为容器,Workflow 提供了简单直接的“源代码到容器镜像”功能。通过社区 buildpacks 支持多种语言运行时,在容器中构建您的应用程序可以像 git push drycc master 一样简单。
使用 Dockerfile 或引用外部容器镜像的应用程序将不经修改地启动。
应用程序
Workflow 围绕 [应用程序][] 或应用的理念设计。
应用程序有三种形式之一:
- 存储在
git仓库中的源文件集合 - 存储在
git仓库中的 Dockerfile 和相关源文件 - 对容器仓库中现有镜像的引用
应用程序由唯一的名称标识以便轻松引用。如果您在创建应用程序时未指定名称,Workflow 会为您生成一个。Workflow 还管理相关信息,包括域名、SSL 证书和开发者提供的配置。
构建、发布、运行

构建阶段
builder 组件处理传入的 git push drycc master 请求并管理您的应用程序打包。
如果您的应用程序使用 buildpack,builder 将启动一个临时作业来提取和执行打包指令。生成的应用程序工件由平台存储,用于运行阶段执行。
如果 builder 找到 Dockerfile,它将遵循这些指令创建容器镜像。生成的工件存储在 Drycc 管理的注册表中,将在运行阶段引用。
如果另一个系统已经构建并打包了您的应用程序,可以直接使用该容器工件。当引用 外部容器镜像 时,builder 组件不会尝试重新打包您的应用。
发布阶段
在发布阶段,build 与 应用程序配置 结合创建新的编号 release。每当创建新构建或更改应用程序配置时,就会创建新发布。以“只写账本”的方式跟踪发布,使回滚到任何以前的发布变得容易。
运行阶段
运行阶段通过更改引用新发布的 Deployment 对象,将新发布部署到底层 Kubernetes 集群。通过管理期望副本计数,Workflow 编排应用程序的零停机滚动更新。一旦成功更新,Workflow 将删除对旧发布的最后引用。请注意,在部署期间,您的应用程序将在混合模式下运行。
后备服务
Workflow 将所有持久服务如数据库、缓存、存储、消息系统和其他 [后备服务][] 视为与您的应用程序分开管理的资源。这种理念与十二因子最佳实践一致。
应用程序使用 [环境变量][] 附加到后备服务。因为应用与后备服务解耦,它们可以独立扩展、使用其他应用提供的服务,或切换到外部或第三方供应商服务。
另请参阅
2 - 架构
所有组件都作为一组容器镜像发布,可以部署到任何兼容的 Kubernetes 集群。
概述

操作员使用 Helm 配置和安装 Workflow 组件,这些组件直接与底层 Kubernetes 集群对接。服务发现、容器可用性和网络都委托给 Kubernetes,而 Workflow 提供干净简单的开发者体验。
平台服务

Drycc Workflow 为您的 Kubernetes 集群提供额外功能,包括:
- 源到镜像构建器,通过 Buildpacks 或 Dockerfiles 编译您的应用程序代码
- 简单 REST API,为 CLI 和任何外部集成提供支持
- 应用程序发布和回滚
- 对应用程序资源的身份验证和授权
Kubernetes 原生
所有平台组件和通过 Workflow 部署的应用程序都期望在现有的 Kubernetes 集群上运行。这意味着您可以愉快地在通过 Drycc Workflow 管理的应用程序旁边运行您的 Kubernetes 原生工作负载。

应用程序布局和边缘路由
默认情况下,Workflow 为每个应用程序创建命名空间和服务,因此您可以通过标准 Kubernetes 机制轻松将您的应用程序连接到集群上的其他服务。

路由器组件负责将 HTTP/s 流量路由到您的应用程序,以及代理 git push 和平台 API 流量。
默认情况下,路由器组件作为类型为 LoadBalancer 的 Kubernetes 服务部署;根据您的配置,这将自动配置云原生负载均衡器。
路由器通过使用 Kubernetes 注解自动发现可路由的应用程序、SSL/TLS 证书和应用程序特定配置。对路由器配置或证书的任何更改都会在几秒钟内应用。
拓扑
Drycc Workflow 不再为您的部署规定特定的拓扑或服务器计数。平台组件可以在单服务器配置以及多服务器生产集群上愉快运行。
3 - 组件
所有 Workflow 组件都作为服务(以及相关控制器)部署在您的 Kubernetes 集群中。如果您感兴趣,我们提供了更详细的 Workflow 架构 说明。
Workflow 的所有组件都是以可组合性为理念构建的。如果您需要为您的特定部署定制其中一个组件,或者在您自己的项目中需要该功能,我们邀请您尝试使用!
Controller
项目位置: drycc/controller
controller 组件是一个 HTTP API 服务器,作为 drycc CLI 的端点。controller 提供所有平台功能以及与您的 Kubernetes 集群的接口。controller 将其所有数据持久化到数据库组件。
Passport
项目位置: drycc/passport
passport 组件公开一个 Web API 并提供 OAuth2 身份验证。
Database
项目位置: drycc/postgres
database 组件是一个托管的 PostgreSQL 实例,保存平台的大部分状态。备份和 WAL 文件通过 WAL-E 推送到对象存储。当数据库重新启动时,备份从对象存储中获取并重放,因此不会丢失数据。
Builder
项目位置: drycc/builder
builder 组件负责通过 Git 接受代码推送并管理您的 Application 的构建过程。构建过程是:
- 通过 SSH 接收传入的
git push请求 - 通过 SSH 密钥指纹验证用户
- 授权用户访问推送代码到应用程序
- 启动应用程序构建阶段(见下文)
- 通过 Controller 触发新的 Release
Builder 目前支持基于 buildpack 和 Dockerfile 的构建。
项目位置: drycc/imagebuilder
对于基于 Buildpack 的部署,builder 组件将在 drycc 命名空间中启动一个一次性 Job。此作业运行 imagebuilder 组件,该组件处理默认和自定义 buildpacks(由 .packbuilder 指定)。完成的镜像推送到集群上的托管容器注册表。有关 buildpacks 的更多信息,请参阅 使用 buildpacks。
与基于 buildpack 的不同,对于包含根目录中 Dockerfile 的应用程序,它生成一个容器镜像(使用底层容器引擎)。有关更多信息,请参阅 使用 Dockerfiles。
Object Storage
项目位置: drycc/storage
所有需要持久化数据的 Workflow 组件都会将它们发送到为集群配置的对象存储。例如,数据库发送其 WAL 文件,注册表存储容器镜像,slugbuilder 存储 slugs。
Workflow 支持集群内或集群外存储。对于生产部署,我们强烈推荐您配置 集群外对象存储。
为了便于实验、开发和测试环境,默认的 Workflow 图表包括通过 storage 的集群内存储。
如果您也对使用 Kubernetes 持久卷感到满意,您可以配置存储以使用您的环境中可用的持久存储。
Registry
项目位置: drycc/registry
registry 组件是一个托管的容器注册表,保存从 builder 组件生成的应用程序镜像。Registry 将容器镜像持久化到本地存储(在开发模式下)或为集群配置的对象存储。
Quickwit
项目位置: drycc/quickwit
Quickwit 是第一个直接在云存储上执行复杂搜索和分析查询的引擎,具有亚秒级延迟。由 Rust 和其解耦的计算和存储架构提供支持,它被设计为资源高效、易于操作,并可扩展到 PB 级数据。
Quickwit 非常适合日志管理、分布式跟踪,以及通常不可变的数据,如对话数据(电子邮件、文本、消息平台)和基于事件的分析。
Fluentbit
项目位置: drycc/fluentbit
Fluent Bit 是一个快速且轻量级的遥测代理,用于 Linux、macOS、Windows 和 BSD 系列操作系统的日志、指标和跟踪。Fluent Bit 以强大的性能为重点而构建,允许从不同来源收集和处理遥测数据而无复杂性。
HelmBroker
项目位置: drycc-addons/helmbroker
Helm Broker 是一个服务代理,它在服务目录中将 Helm 图表公开为服务类。为此,Helm Broker 使用插件的概念。插件是 Helm 图表的抽象层,提供将图表转换为服务类所需的所有信息。
Victoriametrics
项目位置: drycc/victoriametrics
Victoriametrics 是一个开源的系统监控和警报工具包,最初由 SoundCloud 构建。它于 2012 年开源,是继 Kubernetes 之后第二个加入并毕业于云原生计算基金会的项目。Victoriametrics 将所有指标数据存储为时间序列,即指标信息与其记录的时间戳一起存储,可选的键值对称为标签也可以与指标一起存储。