首页 > 其他分享 >DHorse改用fabric8的SDK与k8s集群交互

DHorse改用fabric8的SDK与k8s集群交互

时间:2023-10-30 19:22:51浏览次数:40  
标签:null DHorse pageParam 官方 fabric8 k8s sdk

现状

dhorse 1.4.0版本之前,一直使用k8s官方提供的sdk与k8s集群交互,官方sdk的Maven坐标如下:

<dependency>
	<groupId>io.kubernetes</groupId>
	<artifactId>client-java</artifactId>
	<version>18.0.0</version>
</dependency>

但是自从1.4.0版本以后,dhorse开始支持fabric8的sdk,fabric8的sdk的Maven坐标如下:

<dependency>
	<groupId>io.fabric8</groupId>
	<artifactId>kubernetes-client</artifactId>
	<version>6.9.0</version>
</dependency>

那么,为什么要替换为fabric8的sdk与k8s交互呢?

k8s官方与fabric8的对比

1.社区方面

两者的关注度上,都差不多,没有太大差别;

但是,fabric8的sdk提供的文档和示例更加完善,而k8s官方提供的示例较少;

2.功能方面

fabric8不仅支持k8s,同时也支持OpenShift,而官方sdk支持k8s;

3.包大小

k8s官方sdk依赖的sdk过大,有30M左右,而fabric8只有不到10M;

使用官方的sdk也会导致dhorse的安装包过大。

4.API使用方面

举个例子,以查询k8s集群的命名空间列表为例,说明代码如下。

官方:

ApiClient apiClient = this.apiClient(clusterPO.getClusterUrl(), clusterPO.getAuthToken());
CoreV1Api coreApi = new CoreV1Api(apiClient);
List<ClusterNamespace> namespaces = new ArrayList<>();
String labelSelector = null;
if(pageParam != null && !StringUtils.isBlank(pageParam.getNamespaceName())) {
	labelSelector = "kubernetes.io/metadata.name=" + pageParam.getNamespaceName();
}
try {
	V1NamespaceList namespaceList = coreApi.listNamespace(null, null, null, null,
		labelSelector, null, null, null, null, null);
} catch (ApiException e) {
	String message = e.getResponseBody() == null ? e.getMessage() : e.getResponseBody();
	LogUtils.throwException(logger, message, MessageCodeEnum.CLUSTER_NAMESPACE_FAILURE);
}

fabric8:

try(KubernetesClient client = client(clusterPO.getClusterUrl(), clusterPO.getAuthToken())){
	ListOptions o = new ListOptions();
	if(pageParam != null && !StringUtils.isBlank(pageParam.getNamespaceName())) {
		o.setLabelSelector("kubernetes.io/metadata.name=" + pageParam.getNamespaceName());
	}
	namespaceList = client.namespaces().list(o);
}

可以看出,官方提供的API接口不够简洁,而且抛出了不必要的异常。

结论

综上,dhorse后续版本会默认选择fabric8的sdk与k8s器群交互,并计划在v1.6的版本里下掉k8s官方的sdk。

标签:null,DHorse,pageParam,官方,fabric8,k8s,sdk
From: https://www.cnblogs.com/tiandizhiguai/p/17798584.html

相关文章

  • k8s及其基本组件下载
    k8s_install.sh!/usr/bin/envbashset-eget_version(){containerd_version="v1.7.7"runc_version="v1.1.9"cni_version="v1.3.0"cri_tools_version="v1.27.1"kubernetes_version="v1.27.7"kubernetes_release_v......
  • k8s及其基本插件安装
    k8s_install.sh#!/bin/bashset-emaster1="10.1.1.60"master2="10.1.1.61"master3="10.1.1.62"containerd_version=v1.7.7runc_version=v1.1.9cni_version=v1.3.0cri_tools_version=v1.27.1kubernetes_version=v1.27.7kubernete......
  • K8s:Pod 中 command、args 与 Dockerfile 中 CMD、 ENTRYPOINT 的对应关系
    写在前面前几天被问到,这里整理笔记之前也没怎么注意这个问题理解不足小伙伴帮忙指正曾以为老去是很遥远的事,突然发现年轻是很久以前的事了。时光好不经用,抬眼已是半生,所谓的中年危机,真正让人焦虑的不是孤单、不是贫穷、更不是衰老,而是人到中年你才发现,你从来没有按照自己喜欢的方......
  • k8s1.26.5 安装 flink1.17.1
    标签(空格分隔):kubernetes系列一:系统环境介绍系统:centos7.9x64k8s集群版本:k8s1.26.5采用kubesphere做页面caclico版本:calicov3.26.1containerd版本:containerd://1.6.24hadoop版本:hadoop3.3.6helm版本:helm3.9.0二:编译得到fl......
  • 本地k8s部署kubesphere及踩坑记录
    什么是KubeSphere首先介绍一下kubesphere是什么,是从官网上摘抄的。KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多云与多集群管理,提供全栈的IT自动化运维能力,简化企业的DevOps工作流。它的架构可以非常方便地使第三方应用与云原生生......
  • k8s-label和selector
    说明k8s通过lable来为资源打上标签,通过selector来查找。而不是像传统mysql对象之间关联使用强关联外键属性比如deployment需要关联RS则通过RS打上标签,deployment通过配置select选择器去查找标签的特性label有如下的一些特点:label可以被附加到各种资源对象上一个资源对象......
  • shell 脚本一键部署 k8s 高可用集群
    github地址:https://github.com/Johnny-Demo/deploy/tree/k8s-cluster有不理解的地方可以私信我......
  • k8s接入外部metrics数据进行hpa扩缩容
    一般来说我们只会按照系统设置的cpu和mem去动态扩缩容,但是其实这样很不灵活,比如,jvm占的大小并不等同于真正应用所占的内存,如果有一种可能,可以再监控数据里拿出来一个衡量指标数据,然后依照这个数据进行动态扩缩容,这样的话就会灵活很多,研究了2天,今天终于研究明白了,赶紧记录一下第一......
  • k8s之基础篇
        相关概念: kube-apierver:控制平面组件,负责kubernetes api, 处理接受的请求工作  kube-controller-manager:控制平面组件, 负责运行控制器进程  kube-scheduler:控制平面组件, 负责见识新创建,未指定运行节点的pods,选择节点让pod运行 cloud-controller-manager......
  • K8S 权限管理
    k8s权限管理目录k8s权限管理1、k8s用户1.1、k8s用户概念1.2、User&ServiceAccount的区别1.3、k8s用户创建1.3.1、创建用户私钥1.3.2、创建证书签名请求1.3.3、集群证书签署2、k8s角色2.1、Role&ClusterRole2.1.1、Role2.1.2、ClusterRole2.2、Rolebinding&ClusterRoleBindi......