Config Sync 概览

借助 Config Sync,集群运维人员和平台管理员可以部署一致的配置和政策。您可以将这些配置和政策部署到各个 Kubernetes 集群、跨混合云和多云端环境的多个集群以及集群内的多个命名空间。此过程可大规模地简化并自动执行配置和政策管理。借助 Config Sync,开发团队可以独立管理集群内的命名空间,同时仍受管理员设置的政策保护措施的约束。

Config Sync 使用与 Kubernetes 本身相同的原则,可以使用一组集中的 Kubernetes 声明式配置文件(称为配置)来持续协调已注册集群的状态。配置存储在一个或多个 Git 代码库中,而 Config Sync 会使它们与配置的 Kubernetes 对象保持一致。借助此 GitOps 方法(有时也称为“配置即代码”),您可以通过一个可审核、事务性、可查看且受版本控制的流程来管理和部署通用配置。

在下图中,平台管理员通过将配置应用于集群和集群中的命名空间,为三个不同的集群创建一致的配置:

平台管理员将多个配置部署到他们的集群

Config Sync 的优势

以下要点重点说明了 Config Sync 提供的一些优势:

  • 降低“影子操作”的风险:如果未经检查的更改被推送到活跃集群,则可能很难了解记录的配置与您的实际环境之间的差异。您可以要求使用 Config Sync 应用所有集群配置更改,锁定对 Kubernetes API 的直接访问,并将更改追溯到 Git 中的可靠来源。
  • 使用 GitOps 最佳做法:在将任何更改推送到您的实际环境之前,您可以使用您偏好的任何代码库管理工具进行代码审核。使用 Config Sync 准确审核是哪些更改导致了配置更改。
  • 减少因与配置相关的中断导致的停机时间:借助 Config Sync,您可以使用“还原并调查”策略来回滚重大更改,在修复有问题的更改并将其作为新提交的更改应用之前,使实时集群恢复到良好的工作状态。
  • 使用持续集成/持续部署 (CI/CD) 流水线:您可以使用 CI/CD 工作流使用您喜欢的任何工具和格式来渲染配置、测试并验证更改,并在测试通过后自动提交它们。然后,Config Sync 会应用更改,随后监控和修正配置偏差。

了解 Config Sync

前提条件

Config Sync 使用命名空间标签注解作为其实现的核心部分。在开始使用该产品之前,充分了解这些概念会很有帮助。

配置集群

借助 Config Sync,您可以创建一组通用的配置和集群级层政策(例如政策控制器限制条件),并在已注册和已连接的集群中根据 Git 中的单一可靠来源应用这些政策。您需要先创建配置和代码库,然后才能配置集群。

配置

配置是用 YAML 或 JSON 编写的 Kubernetes 配置声明。Config Sync 会读取配置并将其应用于一个或多个集群,以在这些集群中创建或配置 Kubernetes 对象或资源,或者提供 Config Sync 本身需要的信息。配置可以包含您可使用 kubectl editkubectl apply 应用于 Kubernetes 集群的任何配置详细信息。您也可以在单个文件中声明多个配置。 Config Sync 读取三种类型的文件:.yaml.yml.json。具有其他后缀的文件会被忽略。

在编写配置之前,您应该了解 Kubernetes 对象以便为它们编写配置。

如需了解详情,请参阅配置概览配置 Kubernetes 对象,其中介绍了创建配置的方法。

代码库

代码库(或 repo)是存储配置的 Git 代码库,其中包括 Config Sync 本身的配置。配置 Config Sync 时,您可以配置代码库、分支和子目录,以便 Config Sync 监控其是否发生更改。

借助 Config Sync,您可以将多个代码库中的配置同步到同一组集群。启用从多个代码库同步后,您将能够使用更多功能(例如防止偏移忽略对象变更)。即使您只想使用根代码库并且不想使用命名空间代码库,也可以启用此功能。如需了解详情,请参阅从多个代码库同步

您可以创建根代码库和命名空间代码库:

  • 根代码库:此代码库可让您同步集群级配置和命名空间级配置。根代码库使用管理员级层凭据对应用命名空间强制执行政策,并替换从配置中声明的状态偏移的本地更改。每个集群只能有一个根代码库,并且通常由中央管理员管理此代码库。

    您可以为根代码库使用两种不同的结构:

    • 使用非结构化源格式,您可以以最方便的方式组织代码库中的配置。如果您使用 kustomizekpthelm 等工具组织和/或生成配置,则此格式尤为有用。建议大多数用户采用非结构化格式。如需了解详情,请参阅使用非结构化代码库

    • 分层或结构化源格式会将配置分成不同的类别,分别用于系统配置、集群元数据、集群级层配置和命名空间配置,以帮助您组织配置。它还支持基于目录结构跨多个命名空间的配置分层继承,如需了解详情,请参阅配置命名空间部分。分层是 Config Sync 的默认代码库格式。如需了解详情,请参阅分层代码库概览

  • 命名空间代码库:命名空间代码库为可选项,可以包含同步到集群中特定命名空间的命名空间级配置。您可以将命名空间代码库的设置和控制权委派给非管理员用户。命名空间代码库必须使用非结构化代码库格式。如需了解详情,请参阅配置从命名空间代码库同步

配置多个集群

Config Sync 可帮助您跨混合云和多云端环境的多个集群部署一致的配置和政策。

Config Sync 可为您提供以下选项,从而帮助您配置多个集群:

  • 您可以通过 Git 将配置更改编排部署到集群队列,而无需手动重复运行 kubectl apply 命令。如需了解详情,请参阅使用 Anthos Config Management 安全发布
  • 确保根据应用于每个集群的元数据,将更改推送到每个相关集群,并且仅推送到相关集群。如需了解详情,请参阅仅配置部分集群。对于非结构化分层代码库格式,集群元数据的管理方式略有不同。

我们强烈建议您注册集群。注册集群后,您可以通过 Google Cloud Console 方便地监控所有集群的当前状态,还可以跨已注册的集群启用 Config Sync 的集中配置和管理。有关详情,请参阅注册集群配置 Config Sync升级 Config Sync 版本

配置命名空间

使用 Config Sync 配置命名空间可为您提供以下功能:

  • 您可以通过跨已注册和已连接的集群,一致地使用使用命名空间范围的政策(例如 RBAC 角色)来预配 Kubernetes 命名空间。命名空间范围的政策可让您更轻松地在集群中实现和管理多租户
  • 将政策应用于多个相关的命名空间,而无需复制配置,并且能够替换或扩展一个指定命名空间或一组命名空间的配置,从而更轻松地跨租户应用一致的政策。

这些功能在非结构化分层代码库格式中的工作方式略有不同。

利用非结构化代码库,您可以使用层次结构控制器,在您为集群定义的命名空间层次结构中传播政策。如需了解详情,请参阅层次结构控制器概览

借助分层代码库,您可以使用称为“抽象命名空间”的命名空间组来控制应传播到哪些命名空间政策。抽象命名空间需要在代码库的目录树中以分层方式组织命名空间。如需了解详情,请参阅配置命名空间和命名空间级对象以及命名空间继承概览

非结构化和分层格式都还支持使用标签选择器定位非分层命名空间集。

nomos 命令

Config Sync 提供了一个 API。nomos(Windows 上的 nomos.exe)命令会使用 API、检查安装状态并验证配置

如需了解详情,请参阅使用 nomos 命令

后续步骤