karmada icon indicating copy to clipboard operation
karmada copied to clipboard

API版本代沟问题

Open ikaven1024 opened this issue 2 years ago • 10 comments

按照我的理解,用户在控制面APIServer创建Workload,然后由karmada按照API Version支持能力分发到下层集群。所以Workload的版本必须需要控制面和成员集群同时支持才可以。

但是随着事件推移,成员集群的版本可能会差别越来越多,甚至出现版本代沟。例如:

API版本 Cluster1 Cluster2
alphav1 O X
betav1 X O
v1 X O

而控制面面的APIServer无法同时覆盖alphav1、alphav1、v1三个版本。 如果集群版本又升级不了,那么控制面就无法管理所有集群。

关于这个问题,不知道有什么想法?

ikaven1024 avatar Mar 28 '22 09:03 ikaven1024

很好的问题。控制面APIServer所支持的API应该是所管理集群的超集。

另外补充一点:karmada管理集群的方式通常不会变,单个API变化影响的仅仅是某个特性,不至于无法管理。

另外,可以说下你们的场景吗?比如具体哪个API变化,你们集群版本范围?

RainbowMango avatar Mar 28 '22 10:03 RainbowMango

比如有些老的集群,Deployment还在用extensions/v1beta。但是k8s 1.16之后对extensions不再支持。

那如果如法下发旧版本API,那么联邦的意义也不存在了

ikaven1024 avatar Mar 28 '22 10:03 ikaven1024

比如有些老的集群,Deployment还在用extensions/v1beta。但是k8s 1.16之后对extensions不再支持。

k8s默认不再开启extensions/v1beta, 根据这个说明 仍然可以使用:

Serving these resources can be temporarily re-enabled using the --runtime-config apiserver flag.

- apps/v1beta1=true
- apps/v1beta2=true
- extensions/v1beta1/daemonsets=true,extensions/v1beta1/deployments=true,extensions/v1beta1/replicasets=true,extensions/v1beta1/networkpolicies=true,extensions/v1beta1/podsecuritypolicies=true

RainbowMango avatar Mar 28 '22 11:03 RainbowMango

哈哈,“代沟”这词很形象。不同K8s版本API版本的代沟。

GitHubxsy avatar Mar 28 '22 12:03 GitHubxsy

以下是我的观点: 1、K8s核心的API基本已达到GA。(除非很低版本的K8s) 2、karmada用kube-apiserver作为入口组件的原因:天然支持原生API,用户不需要手动安装K8s API(API版本由kube-apiserver版本决定)。当然也随着带来与子集群版本可能不一致的问题。 3、使用general-apiserver(即去掉Core api的kube-apiserver,或者采用社区kcp),用户可以自己安装对应版本CRD(把deployment、statefulset等也看做CRD)。 如何解决上述不一致的问题: 1、升级K8s版本 (推荐) 2、为了不同版本的API保持一致性,在集群中增加webhook,将v1的deployment请求转化为v1beta1的deployment以支持老版本集群。 3、Karmada支持集群级API版本配置,将对象转化对应版本后再下发。

后话:(出现“代沟”的问题,本质问题是集群升级难的问题) 使用单集群K8s,把节点从“宠物”当成“牛”看待。 使用Karmada,把集群从“宠物”当成“牛”看待。(多集群应用分发,应用故障迁移,多集群service等可以帮助你) 我们升级维护集群再也不用担心集群故障,导致业务出现问题。

GitHubxsy avatar Mar 28 '22 14:03 GitHubxsy

我们也遇到了这个问题。中心的karmada集群版本是1.21,成员集群是1.20。cronjob的在1.21的版本号是batch/v1,1.20的版本号是batch/v1beta1,在karmada创建cronjob时,无法下发到member集群,排查后发现是由于版本号问题。社区对于这种场景有没有什么比较好的解决方案

qiuhui avatar Jun 28 '22 02:06 qiuhui

有个问题,成员集群是1.20,为什么Karmada集群(我理解是karmada-apiserver)版本选用1.21?是否其他成员集群也有1.21?

RainbowMango avatar Jun 28 '22 07:06 RainbowMango

karmada-apiserver原本是选用1.20,后续选用1.21是为了解决1.20的一些问题而引入的,成员集群都是1.20

qiuhui avatar Jul 12 '22 06:07 qiuhui

如果用不到batch/v1,或许可以使用kube-apiserver--runtime-config参数停掉,例如--runtime-config=batch/v1=false

RainbowMango avatar Jul 12 '22 08:07 RainbowMango

需要用到batch/v1,因为我们同时也会使用job

qiuhui avatar Jul 20 '22 01:07 qiuhui

A nice case: https://github.com/karmada-io/karmada/issues/2757

ikaven1024 avatar Nov 22 '22 06:11 ikaven1024