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

现状

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

xml 复制代码
<dependency>
	<groupId>io.kubernetes</groupId>
	<artifactId>client-java</artifactId>
	<version>18.0.0</version>
</dependency>

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

xml 复制代码
<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集群的命名空间列表为例,说明代码如下。

官方:

java 复制代码
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:

java 复制代码
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。

相关推荐
SirLancelot12 天前
K8s-kubernetes(二)资源限制-详细介绍
微服务·云原生·容器·kubernetes·k8s·devops·kubelet
静谧之心7 天前
分层架构下的跨层通信:接口抽象如何解决反向调用
java·开发语言·设计模式·架构·golang·k8s·解耦
昕光xg8 天前
istio笔记03--快速上手多集群mesh
云原生·k8s·istio·服务网格·kind
Kookoos15 天前
ABP VNext + NATS JetStream:高性能事件流处理
微服务架构·abp vnext·nats jetstream·事件流处理
G皮T15 天前
【云计算】云主机的亲和性策略(一):快乐旅行团
云原生·云计算·公有云·集群架构·云主机·亲和性·反亲和性
志凌海纳SmartX17 天前
金融专题|某跨境支付机构:以榫卯企业云平台 VPC 功能保障业务主体安全
私有云·vpc·smartx
退役小学生呀20 天前
十七、K8s 可观测性:全链路追踪
linux·云原生·容器·kubernetes·k8s
GEM的左耳返21 天前
互联网大厂Java面试:微服务与AI技术深度交锋
spring cloud·ai·微服务架构·java面试·rag技术
岚天start21 天前
在K8S环境中,telnet nodePort端口是通的,但是 ss 获取不到端口号原因解析
iptables·kubernetes·k8s·telnet·ss
Kentos(acoustic ver.)23 天前
云原生 —— K8s 容器编排系统
云原生·容器·kubernetes·云计算·k8s