现状

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。

DHorse改用fabric8的SDK与k8s集群交互的更多相关文章

  1. kubernetes生态--交付prometheus监控及grafana炫酷dashboard到k8s集群

    由于docker容器的特殊性,传统的zabbix无法对k8s集群内的docker状态进行监控,所以需要使用prometheus来进行监控: 什么是Prometheus? Prometheus是由Sou ...

  2. Centos下部署最后一版支持Docker的k8s集群

    部署版本 首先要确定部署的版本 查询Kubernetes对Docker支持的情况 kubernetes/dependencies.yaml at master · kubernetes/kuberne ...

  3. China Azure中部署Kubernetes(K8S)集群

    目前China Azure还不支持容器服务(ACS),使用名称"az acs create --orchestrator-type Kubernetes -g zymtest -n kube ...

  4. k8s集群Canal的网络控制 原

    1 简介 直接上干货 public class DispatcherServlet extends HttpServlet { private Properties contextConfigProp ...

  5. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

  6. k8s重要概念及部署k8s集群(一)--技术流ken

    重要概念 1. cluster cluster是 计算.存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用. 2.master master是cluster的大脑,他的主要职责是调度,即决 ...

  7. K8S集群 NOT READY的解决办法 1.13 错误信息:cni config uninitialized

    今天给同事 一个k8s 集群 出现not ready了 花了 40min 才搞定 这里记录一下 避免下载 再遇到了 不清楚. 错误现象:untime network not ready: Networ ...

  8. Kubeadm安装的K8S集群1年证书过期问题的解决思路

    这个问题,很多使用使用kubeadm的用户都会遇到. 网上也有类似的帖子,从源代码编译这种思路, 在生产环境,有些不现实. 还是使用kubeadm的命令操作,比较自然一点. 当然,自行生成一套证书,也 ...

  9. 自建k8s集群日志采集到阿里云日志服务

    自建k8s集群 的master 节点安装 logtail 采集工具 wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.c ...

  10. k8s学习笔记之二:使用kubeadm安装k8s集群

    一.集群环境信息及安装前准备 部署前操作(集群内所有主机): .关闭防火墙,关闭selinux(生产环境按需关闭或打开) .同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 .关闭swap ...

随机推荐

  1. React中编写操作树形数据的自定义Hook

    什么是 Hook hook 即为钩子,是一种特殊的函数,它可以让你在函数式组件中使用一些 react 特性,目前在 react 中常用的 hook 有以下几类 useState: 用于在函数组件中定义 ...

  2. DevOps | 产研协同效能提升之评审、审批流、质量卡点

    研发过程中有各种需求的评审.审批流和质量卡点,有的是为了质量把关,有的是为了彰显权力,还有一些是为了信息告知.本文主要讨论在软件开发过程中涉及的评审.审批和质量卡点三种情况,同时探讨对研发流程的影响, ...

  3. 将Dubbo注册到Nacos,与DubboAdmin的部署

    王有志,一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群:共同富裕的Java人 本文是<从 0 开始学 Dubbo>系列文章中应用篇的番外篇. 在这篇文章中我会和大家一起部署 ...

  4. linux 查看进程使用的内存大小

    你可以使用 ps 命令结合 grep 命令来查看进程使用的内存大小.以下是示例代码: ps aux | grep <进程名> 这个命令会列出所有匹配 <进程名> 的进程,并显示 ...

  5. KVM "shutting down, reason=crashed" 问题处理

    打开debug日志抓取信息 2022-10-12 07:42:43.698+0000: 63115: debug : processMonitorEOFEvent:4814 : Monitor con ...

  6. DateTime和DateTimeOffset是同胞兄弟吗?

    小编在日常开发中,用得最多的时间类型就是DateTime,直到一次偶然的邂逅,让小编遇见了DateTimeOffset.当时小编也是一脸迷茫,因为在小编的C#编程字典里就没出现过DateTimeOff ...

  7. 用 Python 自动创建 Markdown 表格 - 每天5分钟玩转 GPT 编程系列(4)

    目录 1. 他们居然问我要 Prompts 2. 让 GPT-4 来写代码 2.1 我对 DevChat 说 2.2 DevChat 回答 2.3 我又对 DevChat 说 2.4 DevChat ...

  8. Apache-Log4j2-Rce漏洞复现

    最近最热门的无非是最近爆出的超大boss-Apache log4j2组件的rce漏洞.安全圈俗称'过年',漏洞影响范围之广,危害之大堪比当年的永恒之蓝.由于最近爆出,危害程度目前还正在不断扩大中.超多 ...

  9. 8.0 Python 使用进程与线程

    python 进程与线程是并发编程的两种常见方式.进程是操作系统中的一个基本概念,表示程序在操作系统中的一次执行过程,拥有独立的地址空间.资源.优先级等属性.线程是进程中的一条执行路径,可以看做是轻量 ...

  10. N1nEmAn-2023集训wp

    week1 2022-12-28 WP 0x00 T1 reverse3 前几天没注意到要发wp,现在补一下.最近在学汇编,pwn题没做新的了.想到之前了解到hws的pwn会考花指令,听hjx他们说那 ...