跳到主要内容

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仓库中。