这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

理解 Workflow

理解 Workflow 的架构设计。

1 - 概念

Drycc Workflow 是一个轻量级应用程序平台,将十二因子应用作为容器部署并扩展到 Kubernetes 集群。

十二因子应用程序

十二因子应用 是一种构建现代应用程序的方法论,可以在分布式系统中进行扩展。

十二因子是对多年软件即服务应用经验的宝贵总结,特别是基于 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 围绕 [应用程序][] 或应用的理念设计。

应用程序有三种形式之一:

  1. 存储在 git 仓库中的源文件集合
  2. 存储在 git 仓库中的 Dockerfile 和相关源文件
  3. 对容器仓库中现有镜像的引用

应用程序由唯一的名称标识以便轻松引用。如果您在创建应用程序时未指定名称,Workflow 会为您生成一个。Workflow 还管理相关信息,包括域名、SSL 证书和开发者提供的配置。

构建、发布、运行

Git Push Workflow

构建阶段

builder 组件处理传入的 git push drycc master 请求并管理您的应用程序打包。

如果您的应用程序使用 buildpack,builder 将启动一个临时作业来提取和执行打包指令。生成的应用程序工件由平台存储,用于运行阶段执行。

如果 builder 找到 Dockerfile,它将遵循这些指令创建容器镜像。生成的工件存储在 Drycc 管理的注册表中,将在运行阶段引用。

如果另一个系统已经构建并打包了您的应用程序,可以直接使用该容器工件。当引用 外部容器镜像 时,builder 组件不会尝试重新打包您的应用。

发布阶段

在发布阶段,build应用程序配置 结合创建新的编号 release。每当创建新构建或更改应用程序配置时,就会创建新发布。以“只写账本”的方式跟踪发布,使回滚到任何以前的发布变得容易。

运行阶段

运行阶段通过更改引用新发布的 Deployment 对象,将新发布部署到底层 Kubernetes 集群。通过管理期望副本计数,Workflow 编排应用程序的零停机滚动更新。一旦成功更新,Workflow 将删除对旧发布的最后引用。请注意,在部署期间,您的应用程序将在混合模式下运行。

后备服务

Workflow 将所有持久服务如数据库、缓存、存储、消息系统和其他 [后备服务][] 视为与您的应用程序分开管理的资源。这种理念与十二因子最佳实践一致。

应用程序使用 [环境变量][] 附加到后备服务。因为应用与后备服务解耦,它们可以独立扩展、使用其他应用提供的服务,或切换到外部或第三方供应商服务。

另请参阅

2 - 架构

Drycc Workflow 使用面向服务的架构构建。

所有组件都作为一组容器镜像发布,可以部署到任何兼容的 Kubernetes 集群。

概述

系统概述

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

平台服务

Workflow 概述

Drycc Workflow 为您的 Kubernetes 集群提供额外功能,包括:

  • 源到镜像构建器,通过 Buildpacks 或 Dockerfiles 编译您的应用程序代码
  • 简单 REST API,为 CLI 和任何外部集成提供支持
  • 应用程序发布和回滚
  • 对应用程序资源的身份验证和授权

Kubernetes 原生

所有平台组件和通过 Workflow 部署的应用程序都期望在现有的 Kubernetes 集群上运行。这意味着您可以愉快地在通过 Drycc Workflow 管理的应用程序旁边运行您的 Kubernetes 原生工作负载。

Workflow 和 Kubernetes

应用程序布局和边缘路由

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

应用程序配置

路由器组件负责将 HTTP/s 流量路由到您的应用程序,以及代理 git push 和平台 API 流量。

默认情况下,路由器组件作为类型为 LoadBalancer 的 Kubernetes 服务部署;根据您的配置,这将自动配置云原生负载均衡器。

路由器通过使用 Kubernetes 注解自动发现可路由的应用程序、SSL/TLS 证书和应用程序特定配置。对路由器配置或证书的任何更改都会在几秒钟内应用。

拓扑

Drycc Workflow 不再为您的部署规定特定的拓扑或服务器计数。平台组件可以在单服务器配置以及多服务器生产集群上愉快运行。

3 - 组件

Workflow 由许多小型、独立的服务的组合而成,创建了一个分布式 CaaS。

所有 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 的构建过程。构建过程是:

  1. 通过 SSH 接收传入的 git push 请求
  2. 通过 SSH 密钥指纹验证用户
  3. 授权用户访问推送代码到应用程序
  4. 启动应用程序构建阶段(见下文)
  5. 通过 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 将所有指标数据存储为时间序列,即指标信息与其记录的时间戳一起存储,可选的键值对称为标签也可以与指标一起存储。

另请参阅