通过非结构化代码库,您可以采用最方便的方式组织代码库。这种灵活性可让您将现有 Kubernetes 配置同步到 Config Sync 代码库。例如,如果要将 Helm 图表同步到您的集群,则可以运行 helm template
命令并提交渲染清单。如需了解详情,请参阅将 Config Sync 与 Helm 搭配使用教程。
对于大多数应用场景,我们建议使用非结构化仓库。但是,您还可以创建分层仓库,以将配置分为不同的类别。
限制
非结构化代码库存在以下限制:
您不能在非结构化仓库中使用
HierarchyConfig
Kubernetes 对象。非结构化代码库不支持抽象命名空间。
如果您使用的是
nomos vet
命令,请添加--source-format=unstructured
标志。例如:nomos vet --source-format=unstructured
命名空间级对象
您可以在非结构化代码库中声明 NamespaceSelector。要声明 NamespaceSelector,请添加 metadata.namespace
或 NamespaceSelector
注释。如果同时声明这两个注释,则这样的声明是无效的。如果命名空间级资源未声明 metadata.namespace
或 NamespaceSelector
注释,则 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
命令。
如果您希望手动转换代码库,请按照以下说明操作:
从 Git 代码库中移除
system/
目录中的Repo
配置。非结构化代码库不需要Repo
资源。非结构化代码库不支持抽象命名空间目录。因此,您必须声明最初包含在
namespaces/
目录及其子目录中的所有资源的命名空间。非结构化代码库不支持命名空间继承。因此,您必须声明在后代命名空间中最初继承的所有资源,也就是最初位于
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
目录同步。