使用非结构化代码库

通过非结构化代码库,您可以采用最方便的方式组织代码库。这种灵活性可让您将现有 Kubernetes 配置同步到 Config Sync 代码库。例如,如果要将 Helm 图表同步到您的集群,则可以运行 helm template 命令并提交渲染清单。如需了解详情,请参阅将 Config Sync 与 Helm 搭配使用教程。

对于大多数应用场景,我们建议使用非结构化仓库。但是,您还可以创建分层仓库,以将配置分为不同的类别。

限制

非结构化代码库存在以下限制:

  • 您不能在非结构化仓库中使用 HierarchyConfig Kubernetes 对象。

  • 非结构化代码库不支持抽象命名空间

  • 如果您使用的是 nomos vet 命令,请添加 --source-format=unstructured 标志。例如:

    nomos vet --source-format=unstructured
    

命名空间级对象

您可以在非结构化代码库中声明 NamespaceSelector。要声明 NamespaceSelector,请添加 metadata.namespaceNamespaceSelector 注释。如果同时声明这两个注释,则这样的声明是无效的。如果命名空间级资源未声明 metadata.namespaceNamespaceSelector 注释,则 Config Sync 使用集群的“默认”命名空间。如需了解详情,请参阅限制配置影响的命名空间

集群级对象

在非结构化代码库中,ClusterSelectors 会正常运行。

配置非结构化代码库

如需配置非结构化代码库,请在 RootSync 对象中将 spec.sourceFormat 的值设置为 unstructured

  # root-sync.yaml
  apiVersion: configsync.gke.io/v1beta1
  kind: RootSync
  metadata:
    name: ROOT_SYNC_NAME
    namespace: config-management-system
  spec:
    sourceFormat: unstructured
    git:
      repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
      branch: main
      dir: config-sync-quickstart/multirepo/root
      auth: ssh
      secretRef:
        name: SECRET_NAME

请替换以下内容:

  • ROOT_SYNC_NAME:添加 RootSync 对象的名称。该名称在集群中必须是唯一的,并且不能超过 26 个字符。
  • SECRET_NAME 替换为 Secret 的名称。

将分层代码库转换为非结构化代码库

如果您使用的是分层代码库,并且想要将其转换为非结构化代码库,请在代码库中运行以下命令:

nomos hydrate PATH

PATH 替换为目录的路径。

此命令会在当前工作目录中创建一个 compiled/ 目录。在该目录中,系统会为每个注册集群创建一个子目录,该子目录具有完全解析的配置,并且每个子目录都可以在非结构化代码库中使用。

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

如果您希望手动转换代码库,请按照以下说明操作:

  1. 从 Git 代码库中移除 system/ 目录中的 Repo 配置。非结构化代码库不需要 Repo 资源。

  2. 非结构化代码库不支持抽象命名空间目录。因此,您必须声明最初包含在 namespaces/ 目录及其子目录中的所有资源的命名空间。

  3. 非结构化代码库不支持命名空间继承。因此,您必须声明在后代命名空间中最初继承的所有资源,也就是最初位于 namespaces/ 目录下的资源。

非结构化代码库的示例格式

以下示例演示了如何在非结构化代码库中组织配置(包括 Google Cloud 资源):

├── 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

在此示例中,原始配置位于 raw-configs 目录中。然后,您可以使用脚本或自动化流水线来呈现原始配置并将输出存储在 manifests 目录中。配置 Config Sync 时,您可以将其配置为从 manifests 目录同步。

后续步骤