这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
特性功能
用户在使用特性功能时,需要开启相应的特性门控。
例如开启 clustersynchro manager 的 SyncAllResources
来允许使用 全资源通配符
# 忽略其他参数
./bin/clustersynchro-manager --feature-gates=SyncAllResources=true
Clusterpedia APIServer 和 Clusterpedia ClusterSynchro Manager 分别具有不同的特性门控
APIServer
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-system 和 default 命名空间下的 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 |