RootSync 和 RepoSync 字段

本页面介绍了 RootSync、RepoSync 和 ResourceGroup 对象中的不同字段。

RootSync、RepoSync 和 ResourceGroup 对象简介

如果您使用 Google Cloud Console 或 Google Cloud CLI 安装 Config Sync,Config Sync 会自动创建一个名为 root-sync 的 RootSync 对象。如果您使用 kubectl 安装 Config Sync,则需要手动创建 RootSync 对象。您会在配置从多个代码库同步时创建 RepoSync 对象。

创建这些对象后,系统会启用 RootSync 和 RepoSync API,并且您可以使用其他 Config Sync 功能,例如从多个代码库同步以及同步 Kustomize 和 Helm 配置

对于同步到集群的各 Git 代码库,所有资源的协调状态会汇总到一个名为 ResourceGroup 的资源中。Config Sync 会自动生成 ResourceGroup 自定义资源 (CR)。您不需要声明它,如果您修改 Config Sync 生成的 ResourceGroup CR,则可能会导致 Config Sync 出现意外故障。

下图展示了 Config Sync 如何创建 RootSync、RepoSync 和 ResourceGroup 资源的概览:

运算符执行

创建完毕后,Reconciler Manager 会处理 Root Reconciler 和每个 Namespace Reconciler 进程的生命周期:

协调器执行

RootSync 和 RepoSync 字段

RootSync 和 RepoSync CRD 使用相同的字段,不同的只有 spec.sourceFormat

源代码格式的配置

说明
spec.sourceFormat sourceFormat 指定代码库的格式。可选。
此字段的验证区分大小写。
  • 对于 RootSync 对象,该值必须为 hierarchyunstructured 中的一个。如果未指定,默认值将为 hierarchy,但建议您将其指定为 unstructured
  • 对于 RepoSync 对象,该值必须为 unstructured,默认值也是 unstructured
如需了解详情,请参阅代码库源代码格式

源代码类型的配置

从 Anthos Config Management 1.12.0 版开始,Config Sync 支持从 OCI 映像同步(预览版)。您可以配置 spec.sourceType 来指定源代码类型。

说明
spec.sourceType sourceType 指定可靠来源的类型。必须是 gitoci 中的一个。可选。
如果未指定,则会设置为 git。此字段的验证区分大小写。
只能指定 spec.gitspec.oci 中的一项,具体取决于源代码类型。

适用于 Git 代码库的配置

说明
spec.git.auth 为访问 Git 代码库而配置的 Secret 类型,必须为 sshcookiefilegcenodegcpserviceaccounttokennone。此字段的验证区分大小写。必填。
spec.git.gcpServiceAccountEmail 用于为 RootSync 或 RepoSync 控制器的 Kubernetes 服务帐号添加注释的 Google Cloud 服务帐号。仅在 spec.git.authgcpserviceaccount 时才会用到此字段。
spec.git.branch 需与其同步的代码库的 Git 分支。默认值:master
spec.git.dir Git 代码库中指向您要同步的配置所在的根目录的绝对路径。默认值:代码库的根目录 (/)
spec.git.period 连续两次同步操作之间的时长。默认值:15s
spec.git.repo 需与其同步的 Git 代码库的网址。必填。
spec.git.revision 要签出的 Git 修订版本(标记、提交或哈希)。默认值:HEAD
spec.git.secretRef.name 用于连接到 Git 可靠来源的 Secret 的名称。
spec.git.noSSLVerify noSSLVerify 指定是启用还是停用 SSL 证书验证。默认值:false。
如果 noSSLVerify 设置为 true,则指示 Git 跳过 SSL 证书验证。
Anthos Config Management 1.8.2 版及更高版本支持此字段。

Git 代码库的代理配置

如果您的组织的安全政策要求您通过 HTTP(S) 代理路由流量,则可以使用该代理的 URI 将 Config Sync 配置为与 Git 主机进行通信。

说明
spec.git.proxy 代理网址,包含使用代理配置对 Git 代码库的访问权限的方案。例如 https://proxy.internal.business.co:443。此字段仅在 spec.git.authcookiefilenonetoken 时有效。

OCI 映像的配置

说明
spec.oci.auth 为访问 OCI 映像而配置的身份验证类型。必须为 gcenodegcpserviceaccountnone。此字段的验证区分大小写。必填。
spec.oci.gcpServiceAccountEmail 用于为 RootSync 或 RepoSync 控制器的 Kubernetes 服务帐号添加注释的 Google Cloud 服务帐号。仅在 spec.oci.authgcpserviceaccount 时才会用到此字段。
spec.oci.dir OCI 映像中指向您要同步的配置所在的根目录的绝对路径。默认值:映像的根目录 (/)。
spec.oci.period 连续两次同步操作之间的时长。默认值:15s
spec.oci.image 要从中同步的 OCI 映像网址。必填。

用于替换根协调器或命名空间协调器的资源请求和限制的配置

对于 Autopilot 集群,Config Sync 会忽略资源限制替换值。只有当存在一个或多个资源请求值大于注释中声明的相应调整输出值,或当存在一个或多个资源请求值小于注释中声明的相应输入值时,系统才会应用资源请求替换值。如需了解详情,请参阅 Config Sync 的集群要求

说明
spec.override.resources 容器资源请求和限制替换值的列表。可选。
列表中的每一项均包含三个字段:
  • containerName:此字段可以是 git-syncoci-synchydration-controllerreconciler
  • cpuRequest(可选)
  • cpuLimit(可选)
  • memoryRequest(可选)
  • memoryLimit(可选)

如果未提供资源请求或限制的替换值,则使用默认资源请求或限制值。

要提取的 Git 提交次数的配置

说明
spec.override.gitSyncDepth gitSyncDepth 让您可以替换要提取的 Git 提交次数。
不得小于 0。
如果此字段为 0,则 Config Sync 执行完整克隆;如果此字段大于 0,则会执行浅层克隆。
如果未提供此字段,Config Sync 会自动对其进行配置。

用于捕获资源级别状态的配置

说明
spec.override.statusMode statusMode 可让您启用或停用资源级状态捕获。
默认值为 enabled
如需停用资源级状态捕获,请将此字段设置为 disabled

用于替换协调超时的配置

说明
spec.override.reconcileTimeout reconcileTimeout 允许您替换放弃操作之前等待应用组中的资源进行协调所花费时间的阈值。一个提交作业中的所有资源可以位于多个应用组中,具体取决于依赖项
默认超时为 5m
使用字符串指定此字段值,例如 30s5m

渲染过程中的 shell 访问的配置

说明
spec.override.enableShellInRendering enableShellInRendering 指定在渲染过程中是要启用还是停用 shell 访问。Kustomize 远程库需要 shell 访问。将此字段设置为 true 可在渲染过程中启用 shell 访问,并支持从公共代码库中拉取远程库。
默认值为 false

对象的状态

说明
status.observedGeneration 上次由 Config Sync 观察到并对其执行操作的 RootSync 或 RepoSync 资源的规范世代 (metadata.generation)。此值可以与 metadata.generation 进行比较,这是一个整数,会由 API 服务器根据规范变更进行更新。
status.reconciler 与同步资源相对应的协调器进程的名称。
status.source.gitStatus.repo 所提取的 Git 代码库网址。
status.source.gitStatus.revision 所提取的 Git 修订版本(标记、提交或哈希)。
status.source.gitStatus.branch 所提取的代码库的 Git 分支。
status.source.gitStatus.dir Git 代码库中指向包含要同步到的配置所在根目录的绝对路径。
status.source.ociStatus.image 所提取的 OCI 映像网址。
status.source.ociStatus.dir OCI 映像中指向您要同步的配置所在的根目录的绝对路径。
status.source.commit 从来源网址提取的最近提交或摘要的哈希值。
status.source.errors 读取代码库时发生的任何错误的列表。
status.rendering.gitStatus.repo 所渲染的 Git 代码库网址。
status.rendering.gitStatus.revision 所渲染的 Git 修订版本(标记、提交或哈希)。
status.rendering.gitStatus.branch 所渲染的代码库的 Git 分支。
status.rendering.gitStatus.dir Git 代码库中指向您要渲染的配置所在的根目录的绝对路径。
status.rendering.ociStatus.image 所渲染的 OCI 映像网址。
status.rendering.ociStatus.dir OCI 映像中指向您要渲染的配置所在的根目录的绝对路径。
status.rendering.commit 最近渲染的提交或摘要的哈希值。即使提交或摘要由于错误而仅部分同步,系统也会更新此值。
status.rendering.errors 渲染由 status.rendering.commit 所指示的更改的资源时发生的任何错误的列表。
status.sync.gitStatus.repo 所同步的 Git 代码库的网址。
status.sync.gitStatus.revision 所同步的 Git 修订版本(标记、提交或哈希)。
status.sync.gitStatus.branch 所同步的代码库的 Git 分支。
status.sync.gitStatus.dir Git 代码库中指向包含要同步到的配置所在根目录的绝对路径。
status.sync.ociStatus.image 所同步的 OCI 映像网址。
status.sync.ociStatus.dir OCI 映像中指向您要同步的配置所在的根目录的绝对路径。
status.sync.commit 最近同步到集群的提交或摘要的哈希值。即使提交或摘要由于错误而仅部分同步,系统也会更新此值。
status.sync.errors 应用由 status.sync.commit 所指示的更改的资源时发生的任何错误的列表。
status.conditions RootSync 当前状态的最新可用观察结果。

ResourceGroup 字段

规范与状态字段

说明
spec.resources 从 RepoSync CR 或 RootSync CR 中指定的 Git 代码库应用于集群的资源的标识符(组、种类、命名空间、名称)列表。可选。
列表中的每个项均包含四个字段:groupkindnamespacename

状态字段

说明
status.observedGeneration 上次由 ResourceGroup 控制器观察到并对其执行操作的 RootSync 或 RepoSync 资源的规范世代 (metadata.generation)。此值可以与 metadata.generation 进行比较,这是一个整数,会由 API 服务器根据规范变更进行更新。
status.conditions 针对当前 ResourceGroup 所观察到的最新条件。此条件分为两种不同的类型:ReconcilingStalled。如果 Reconciling 类型的条件为 true,则表示当前 ResourceGroup 正在协调。如果 Stalled 类型的条件为 true,则表示协调已停滞。如果两者都为 false,则表示当前的 ResourceGroup 已经过协调,并且状态是最新的。
status.resourceStatuses “.spec.resources”中包含的资源的状态列表。每个列表项均包含资源的标识符(组、种类、命名空间或名称)和状态。状态可为 InProgressCurrentFailedTerminatingNotFoundUnknown 之一。

CR 示例

以下部分展示了 RootSync 和 Reposync CR 的示例。

RootSync CR

以下 CR 是通过使用 kubectl describe rootsync root-sync -n config-management-system 生成的。

Name:         root-sync
Namespace:    config-management-system
Labels:       <none>
Annotations:  configmanagement.gke.io/managed-by-hub: true
              configmanagement.gke.io/update-time: 1623779339
API Version:  configsync.gke.io/v1beta1
Kind:         RootSync
Metadata:
  Creation Timestamp:  2021-06-15T17:49:35Z
  Generation:          1
  Managed Fields:
    API Version:  configsync.gke.io/v1beta1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .:
          f:configmanagement.gke.io/managed-by-hub:
          f:configmanagement.gke.io/update-time:
      f:spec:
        .:
        f:git:
          .:
          f:auth:
          f:branch:
          f:dir:
          f:period:
          f:repo:
          f:secretRef:
        f:sourceFormat:
    Manager:      Google-GKEHub-Controllers-ACM
    Operation:    Update
    Time:         2021-06-15T17:49:35Z
    API Version:  configsync.gke.io/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:status:
        .:
        f:conditions:
        f:observedGeneration:
        f:reconciler:
        f:source:
          .:
          f:gitStatus:
        f:sync:
    Manager:      reconciler-manager
    Operation:    Update
    Time:         2021-06-15T17:49:47Z
    API Version:  configsync.gke.io/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:status:
        f:source:
          f:commit:
          f:gitStatus:
            f:branch:
            f:dir:
            f:repo:
            f:revision:
        f:sync:
          f:commit:
          f:lastUpdate:
    Manager:         reconciler
    Operation:       Update
    Time:            2021-06-15T17:51:28Z
  Resource Version:  4850
  Self Link:         /apis/configsync.gke.io/v1beta1/namespaces/config-management-system/rootsyncs/root-sync
  UID:               3fd2ea19-7e16-4c69-a3a1-90b9d90677eb
Spec:
  Git:
    Auth:    none
    Branch:  init
    Dir:     config-sync-quickstart/multirepo/root
    Period:  0s
    Repo:    https://github.com/GoogleCloudPlatform/anthos-config-management-samples
    Secret Ref:
  Source Format:  unstructured
Status:
  Conditions:
    Last Transition Time:  2021-06-15T17:50:15Z
    Last Update Time:      2021-06-15T17:50:15Z
    Status:                False
    Type:                  Reconciling
  Observed Generation:     1
  Reconciler:              root-reconciler
  Rendering:
    Commit:  a9b7593b2df5f64b1ae5e5eb2d9cafa619029589
    LastUpdate: 2021-06-15T17:51:08Z
    Git Status:
      Branch:    init
      Dir:       quickstart/multirepo/root
      Repo:      https://github.com/GoogleCloudPlatform/anthos-config-management-samples
      Revision:  HEAD
    Message: Rendering skipped
  Source:
    Commit:  a9b7593b2df5f64b1ae5e5eb2d9cafa619029589
    LastUpdate: 2021-06-15T17:51:12Z
    Git Status:
      Branch:    init
      Dir:       quickstart/multirepo/root
      Repo:      https://github.com/GoogleCloudPlatform/anthos-config-management-samples
      Revision:  HEAD
  Sync:
    Commit:       a9b7593b2df5f64b1ae5e5eb2d9cafa619029589
    Last Update:  2021-06-15T17:51:28Z
    Git Status:
      Branch:    init
      Dir:       quickstart/multirepo/root
      Repo:      https://github.com/GoogleCloudPlatform/anthos-config-management-samples
      Revision:  HEAD
Events:           <none>

RepoSync CR

以下 CR 是通过使用 kubectl describe reposync repo-sync -n config-management-system 生成的。

Name:         repo-sync
Namespace:    gamestore
Labels:       app.kubernetes.io/managed-by=configmanagement.gke.io
              configsync.gke.io/declared-version=v1alpha1
Annotations:  config.k8s.io/owning-inventory: config-management-system_root-sync
              configmanagement.gke.io/cluster-name: cs-cluster-1
              configmanagement.gke.io/managed: enabled
              configmanagement.gke.io/source-path: quickstart/multirepo/root/reposync-gamestore.yaml
              configmanagement.gke.io/token: a9b7593b2df5f64b1ae5e5eb2d9cafa619029589
              configsync.gke.io/declared-fields: {"f:spec":{}}
              configsync.gke.io/git-context:
                {"repo":"https://github.com/GoogleCloudPlatform/anthos-config-management-samples","branch":"init","rev":"HEAD"}
              configsync.gke.io/manager: :root
              configsync.gke.io/resource-id: configsync.gke.io_reposync_gamestore_repo-sync
API Version:  configsync.gke.io/v1beta1
Kind:         RepoSync
Metadata:
  Creation Timestamp:  2021-06-15T17:51:27Z
  Generation:          1
  Managed Fields:
    API Version:  configsync.gke.io/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:config.k8s.io/owning-inventory:
          f:configmanagement.gke.io/cluster-name:
          f:configmanagement.gke.io/managed:
          f:configmanagement.gke.io/source-path:
          f:configmanagement.gke.io/token:
          f:configsync.gke.io/declared-fields:
          f:configsync.gke.io/git-context:
          f:configsync.gke.io/manager:
          f:configsync.gke.io/resource-id:
        f:labels:
          f:app.kubernetes.io/managed-by:
          f:configsync.gke.io/declared-version:
      f:spec:
        f:git:
          f:auth:
          f:branch:
          f:dir:
          f:repo:
        f:sourceFormat:
    Manager:      configsync.gke.io
    Operation:    Apply
    Time:         2021-06-15T17:51:27Z
    API Version:  configsync.gke.io/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:status:
        f:source:
          f:commit:
          f:gitStatus:
            f:branch:
            f:dir:
            f:repo:
            f:revision:
        f:sync:
          f:commit:
          f:lastUpdate:
    Manager:      reconciler
    Operation:    Update
    Time:         2021-06-15T17:51:53Z
    API Version:  configsync.gke.io/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:spec:
        f:git:
          f:period:
          f:secretRef:
      f:status:
        .:
        f:conditions:
        f:observedGeneration:
        f:reconciler:
        f:source:
          .:
          f:gitStatus:
        f:sync:
    Manager:         reconciler-manager
    Operation:       Update
    Time:            2021-06-15T17:51:53Z
  Resource Version:  5216
  Self Link:         /apis/configsync.gke.io/v1beta1/namespaces/gamestore/reposyncs/repo-sync
  UID:               80d0a0d3-4ec6-4ccd-9a9d-4e2ddf0b7bbd
Spec:
  Git:
    Auth:         none
    Branch:       init
    Dir:          quickstart/multirepo/namespaces/gamestore
    Repo:         https://github.com/GoogleCloudPlatform/anthos-config-management-samples
  Source Format:  unstructured
Status:
  Conditions:
    Last Transition Time:  2021-06-15T17:51:56Z
    Last Update Time:      2021-06-15T17:51:56Z
    Status:                False
    Type:                  Reconciling
  Observed Generation:     1
  Reconciler:              ns-reconciler-gamestore
  Rendering:
    Commit:  a9b7593b2df5f64b1ae5e5eb2d9cafa619029589
    Last Update:  2021-06-15T17:51:03Z
    Git Status:
      Branch:    init
      Dir:       quickstart/multirepo/namespaces/gamestore
      Repo:      https://github.com/GoogleCloudPlatform/anthos-config-management-samples
      Revision:  HEAD
    Message: Rendering skipped
  Source:
    Commit:  a9b7593b2df5f64b1ae5e5eb2d9cafa619029589
    Last Update:  2021-06-15T17:51:33Z
    Git Status:
      Branch:    init
      Dir:       quickstart/multirepo/namespaces/gamestore
      Repo:      https://github.com/GoogleCloudPlatform/anthos-config-management-samples
      Revision:  HEAD
  Sync:
    Commit:       a9b7593b2df5f64b1ae5e5eb2d9cafa619029589
    Last Update:  2021-06-15T17:51:53Z
    Git Status:
      Branch:    init
      Dir:       quickstart/multirepo/namespaces/gamestore
      Repo:      https://github.com/GoogleCloudPlatform/anthos-config-management-samples
      Revision:  HEAD
Events:           <none>

后续步骤