这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

特性功能

用户在使用特性功能时,需要开启相应的特性门控。 例如开启 clustersynchro manager 的 SyncAllResources 来允许使用 全资源通配符

# 忽略其他参数
./bin/clustersynchro-manager --feature-gates=SyncAllResources=true

Clusterpedia APIServer 和 Clusterpedia ClusterSynchro Manager 分别具有不同的特性门控

APIServer

作用 feature gate 默认值
设置默认返回剩余的资源数量 RemainingItemCount false
原生 SQL 查询 AllowRawSQLQuery false

ClusterSynchro Manager

作用 feature gate 默认值
裁剪 metadata.managedFields 字段 PruneManagedFields true
裁剪 metadata.annotations['lastAppliedConfiguration'] 字段 PruneLastAppliedConfiguration true
允许同步所有类型的自定义资源 AllowSyncCustomResources false
允许同步所有类型的资源 AllowSyncAllResources false
集群健康检查使用独立 TCP 连接 HealthCheckerWithStandaloneTCP false

1 - 返回剩余资源数量

我们在查询时,可以通过 search label 或者 url query,要求在响应中携带剩余的资源数量。

search label url query
search.clusterpedia.io/with-continue withContinue

详细使用可以参考 响应携带剩余资源数量信息

可以通过 Feature Gates —— RemainingItemCount 来设置默认返回剩余的资源数量,这样用户就不需要在每次请求时使用 search label 或者 url query 来显示要求了。

在默认返回剩余资源数量时,用于依然可以通过 search label 或者 url quera 来不返回剩余的资源数量

kubectl get --raw="/apis/clusterpedia.io/v1beta1/resources/apis/apps/v1/deployments?withRemainingCount=false&limit=1" | jq

专属于 clusterpedia apiserver 的 Feature Gate

作用 feature gate 默认值
设置是否默认返回剩余的资源数量 RemainingItemCount false

由于该功能可能会对存储层的行为或者性能有影响,所以默认关闭

对于默认存储层,返回剩余资源数量会导致额外的 COUNT 查询

2 - 原生 SQL 查询

不同的用户的需求可能是不同的,尽管 clusterpedia 提供了很多简便的检索条件,例如指定一组命名空间或者资源名称,也可以指定 owner 进行查询,但是用户依然可能会有更加复杂的查询。

这时,用户可以使用默认存储层提供的 原生 SQL 条件查询 来传递更加复杂的检索条件

URL="/apis/clusterpedia.io/v1beta1/resources/apis/apps/v1/deployments"
kubectl get --raw="$URL?whereSQL=(cluster='global') OR (namespace IN ('kube-system','default'))"

示例中,我们传递一个用于 WHERE 查询的 SQL 语句 —— (cluster=‘global’) OR (namespace IN (‘kube-system’,‘default’)),

这个语句会检索 global 集群内所有命名空间下以及其他集群中 kube-systemdefault 命名空间下的 deployments

sql 语句需要符合具体的存储组件的 SQL 语法

该特性门控专属于 clusterpedia apiserver

作用 feature gates 默认值
允许使用原生 SQL 设置检索条件 AllowRawSQLQuery false

原生 SQL 查询当前还在 alpha 阶段,并且对 SQL 注入没有很好的防范,所以需要用户通过 Feature Gates 来开启该功能

3 - 独立健康检查连接

在 client-go 中使用相同的配置连接一个集群时,会使用同一条 TCP 连接 https://github.com/kubernetes/kubernetes/blob/3f823c0daa002158b12bfb2d53bcfe433516659d/staging/src/k8s.io/client-go/transport/transport.go#L54

这导致集群的健康检查会和资源同步的 Informer 使用相同的 TCP。在大量资源 Informer 启动时,由于 TCP 阻塞可能会导致健康检查的请求超时,这时即使集群是健康的也会导致健康检查失败。

我们现在允许健康检查使用单独的一条 TCP 连接,这样资源同步时的 TCP 拥堵并不会影响到健康检查的响应。该功能需要开启 Feature Gate —— HealthCheckerWithStandaloneTCP

作用 feature gates 默认值
集群健康检查使用独立 TCP 连接 HealthCheckerWithStandaloneTCP false

注意:开启该功能后,连接到成员集群的 TCP 长连接会从 1 变成 2,如果接入 1000 个集群,那么 ClusterSynchro Manager 会维持 2000 条 TCP 连接。

4 - 资源字段裁剪

资源的 metadata 中有一些字段在实际搜索中通常没有太大用处,所以在同步时我们会默认裁剪这些字段。

我们使用特性门控来分别控制这些字段是否在资源同步时被裁剪,这些特性门控专属于 clustersynchro manager 组件

field feature gates 默认值
metadata.managedFields PruneManagedFields true
metadata.annotations[‘lastAppliedConfiguration’] PruneLastAppliedConfiguration true

5 - 同步所有的自定义资源

自定义资源不同于 kube 的内置资源,kube 的内置资源通常不会经常性变动(依然有两种情况会导致原生资源类型资源改变), 而自定义资源的类型可能会被动态的创建和删除

用户如果想要根据被纳管集群中的 CRD 的变动来自动调节同步的资源类型,那么用户在 PediaCluster 中指定同步所有自定义资源。

spec:
  syncAllCustomResources: true

该功能可能会导致大量的长连接,所以需要在 clustersynchro manager 中开启 Feature Gate

作用 feature gate 默认值
允许同步所有的自定义资源 AllowSyncAllCustomResources true

6 - 同步所有的资源

用户可以通过 全资源通配符 来同步所有类型的资源,当被纳管集群中发生任意的资源类型变动(例如 kube 版本升级,group/version 被禁用,CRD 或者 APIService 变动)都会导致同步的资源类型发生修改。

spec:
  syncResources:
  - group: "*"
    resources:
    - "*"

请谨慎使用该功能,该功能会创建大量的长连接,未来 Clusterpedia 添加 Agent 功能后,可以避免长连接的创建

建议指定具体的资源类型,如果需要对自定义资源进行动态同步,可以使用 同步所有的自定义资源

使用全资源通配符 需要在 clustersynchro manager 中开启 Feature Gate

作用 feature gate 默认值
允许同步所有的资源 AllowSyncAllResources true