3.flux组件
整体架构图
五大组件
Flux 包含五个主要组件:源控制器(Source Controller)、Helm控制器(Helm Controller)、Kustomize控制器(Kustomize Controller)、通知控制器(Notification Controller)和 镜像自动控制器( image-automation-controller)。
source controller
源管理组件的主要作用是提供一个通用的接口来获取构件(artifacts)。源API定义了一组Kubernetes对象,集群管理员和各种自动化运维操作者可以与之交互,以将Git和Helm仓库的操作卸载给专用的控制器。
功能:
- 验证源定义
- 对源进行身份验证(SSH、用户名/密码、API令牌)
- 验证源的真实性(PGP)
- 基于更新策略(semver)检测源的变化
- 按需和按计划获取资源
- 将获取的资源打包为一个众所周知的格式(tar.gz、yaml)
- 通过源标识符(SHA、版本、时间戳)进行构件定位
- 使构件对感兴趣的第三方在集群内可用
- 通知感兴趣的第三方源的变化和可用性(状态条件、事件、钩子)
kustomize controller
kustomize-controller是一个专门用于运行持续交付流水线的Kubernetes运算符,它针对使用Kubernetes清单定义和使用Kustomize组装的基础架构和工作负载进行操作。
功能:
- 从多个来源(由source-controller提供)调和集群状态
- 使用Kustomize生成清单(从普通的Kubernetes YAML或Kustomize overlays)
- 使用Mozilla SOPS和KMS解密Kubernetes密钥
- 根据Kubernetes API验证清单
- 扮演服务账户(多租户RBAC)
- 对部署的工作负载进行健康评估
- 按特定顺序运行流水线(依赖关系)
- 清理删除的源对象(垃圾回收)
- 报告集群状态变化(由notification-controller提供告警)
helm controller
Helm控制器是一个Kubernetes operator,允许使用Kubernetes清单以声明性方式管理Helm Chart发布。
通过名为HelmRelease的Kubernetes自定义资源来描述Helm发布的期望状态。基于集群中HelmRelease资源的创建、修改或删除,控制器执行Helm操作。
功能:
- 监视HelmRelease对象并生成HelmChart对象
- 支持从HelmRepository和GitRepository源生成的HelmChart构件
- 从HelmChart对象中获取由source-controller生成的构件
- 监视HelmChart对象的修订更改(包括来自HelmRepository源的图表的语义版本范围)
- 执行自动化的Helm操作,包括Helm测试、回滚和卸载
- 为Helm安装、升级或测试操作失败提供广泛的配置选项,包括自动纠正(回滚、卸载、重试)的配置选项
- 按照一组HelmRelease对象中定义的depends-on关系,按特定顺序运行Helm安装/升级操作
- 清理集群中已删除的Helm发布(垃圾回收)
- 报告Helm发布的状态(由notification-controller提供告警功能)
- 内置与Kustomize兼容的Helm后处理程序,支持策略合并、JSON 6902和镜像补丁
notification controller
通知控制器是一个专门处理入站和出站事件的Kubernetes operator。
该控制器处理来自外部系统(如GitHub、GitLab、Bitbucket、Harbor、Jenkins等)的事件,并通知GitOps工具集控制器有关源更改的情况。
该控制器处理由GitOps工具集控制器(源控制器、Kustomize控制器、Helm控制器)发出的事件,并根据事件的严重性和涉及的对象将它们分派到外部系统(如Slack、Microsoft Teams、Discord、Rocker)中。
image automation controller
image-reflector-controller和image-automation-controller共同工作,以在新的容器镜像可用时更新Git仓库。
image-reflector-controller扫描镜像仓库并在Kubernetes资源中反映镜像元数据。 image-automation-controller根据最新扫描的镜像更新YAML文件,并将更改提交到指定的Git仓库中。