使用 Git 代码库中的配置

Config Sync 专为管理多个集群的集群运营人员而设计。允许 Config Sync 管理整个舰队中的命名空间、Role、RoleBinding、ResourceQuota 和其他重要的 Kubernetes 对象,可以确保您的集群符合业务与合规性标准。

Config Sync 使用配置使已注册的集群保持同步。配置是存储在 Git 代码库中的 YAML 或 JSON 文件,包含您可以通过 kubectl apply 命令手动应用于集群的相同类型的配置详细信息。您可以为集群中存在的任何 Kubernetes 对象创建配置。 本主题包含以下内容:

  • 如何整理目录中的配置。
  • 如何初始化 Git 代码库以存储配置。
  • 如何将 Config Sync 配置为从配置读取。

将配置存储在代码库中

Config Sync 使用 Git 代码库进行配置存储和版本控制,并根据其内容采取措施。在 Config Sync 中,此代码库称为“repo”。 代码库有两种不同的格式:非结构化分层

  • 使用非结构化源格式,您可以以最方便的方式组织代码库中的配置。如果您使用 kustomizekpthelm 等工具组织和/或生成配置,则此格式尤为有用。
  • 分层或结构化源格式将配置分为不同的类别,可帮助您整理配置。这些类别包括系统配置、集群元数据、集群级层配置和命名空间配置。如需详细了解分层代码库结构,请参阅分层代码库的结构

下表突出显示了分层代码库格式和非结构化代码库格式之间的差异:

功能 分层代码库格式 非结构化代码库格式
命名空间选择器 支持 支持
集群选择器 支持 支持
抽象命名空间 支持 不支持
Repo 个对象 支持 不支持
HierarchyConfig 对象 支持 不支持
层次结构控制器中的分层命名空间 不支持 支持
用作命名空间代码库的格式 不支持 支持
用作根代码库的格式 支持 支持
与层次结构控制器搭配使用 不推荐 支持
nomos init 命令 支持 不支持
nomos hydrate 命令 支持 不支持
nomos vet 命令 支持 通过 --source-format=unstructured 标志支持
所有其他 nomos 命令 支持 支持

非结构化配置布局示例

以下示例演示了组织配置(包括 Google Cloud 资源)的方法。

您可以将原始配置放入 raw-configs 目录中,使用脚本或自动流水线渲染原始配置,然后将输出存储在 manifests 目录中。最后,将 Config Sync 配置为从 manifests 目录同步。

├── manifests
│   ├── access-control
│   │   ├── ...
│   ├── change-control
│   │   ├── ...
│   ├── git-ops
│   │   └── ...
│   ├── logging-monitoring
│   │   └── ...
│   ├── networking
│   │   └── ...
│   ├── project-factory
│   │   └── ...
│   └── resource-hierarchy
│   │   └── ...
├── raw-configs
│   ├── access-control
│   │   └── ...
│   ├── change-control
│   │   └── ...
│   ├── git-ops
│   │   └── ...
│   ├── logging-monitoring
│   │   └── ...
│   ├── networking
│   │   └── ...
│   ├── project-factory
│   │   └── ...
│   └── resource-hierarchy
│   │   └── ...
└── scripts
    └── render.sh

初始化 Git 代码库

初始化代码库的方式取决于其结构。

  • 对于非结构化格式,您可以初始化空的 Git 代码库,并开始在该代码库中添加配置。
  • 对于分层格式,您可以使用 nomos init 命令初始化代码库,也可以手动创建目录结构。

将 Config Sync 配置为从代码库中读取内容

您可以在安装 Config Sync 时配置代码库的位置,日后还可以在 Operator 的配置文件中修改其配置。除了代码库的位置之外,您还可以指定要监控的 Git 分支和子目录(如果 Git 代码库包含除配置之外的其他内容)。

更新配置文件后,您可以使用 kubectl apply 命令将其应用到集群。Config Sync 不管理 Operator 本身的配置。

您可以授予用户访问给定产品团队的部署代码库的权限。但是,请注意,当您向用户授予对部署代码库的访问权限时,该用户也会被授予与运行该代码库的调节者相同的 RBAC。

如需配置 Config Sync 和代码库之间的身份验证和授权,请参阅有关配置 git-creds Secret 的安装步骤。

忽略对象变更

如果您不希望 Config Sync 在集群存在后保留该对象的状态,则可以将 client.lifecycle.config.k8s.io/mutation: ignore 注释添加到您希望 Config Sync 忽略变更的对象。如需使用注释,您需要启用从多个代码库同步,并使用 1.7.0 版或更高版本。如果您使用 Google Cloud Console 或 gcloud 命令行工具安装 1.7.0 版或更高版本的 Config Sync,则默认启用从多个代码库同步。如果您使用 kubectl 安装了 Config Sync,请在 ConfigManagement 对象中将 spec.enableMultiRepo 设置为 true

以下示例向您展示如何将注释添加到对象中:

metadata:
  annotations:
    client.lifecycle.config.k8s.io/mutation: ignore 

您无法在集群中的受管对象上手动修改此注释。

后续步骤