当前位置: 首页 > news >正文

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

现状

在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。

http://www.lryc.cn/news/213440.html

相关文章:

  • 如何在阿里云国际站服务器上添加IP白名单?
  • GPT实战系列-ChatGLM2模型的微调训练参数解读
  • RabbitMQ入门到实战教程,消息队列实战,改造配置MQ
  • phar反序列化学习
  • 十年回望 -- JAVA
  • Linux 环境下 安装 Elasticsearch 7.13.2
  • 心理咨询预约小程序
  • 常用排序算法的理解
  • Python小程序 - 文件解析
  • .mxdown-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • audio 标签动态src 且src是http无法播放问题
  • Leetcode—485.最大连续1的个数【中等】明天修改
  • JavaWeb 怎么在servlet向页面输出Html元素?
  • Spring及SpringBoot中AOP的使用
  • cmake多目录构建初步成功
  • idea插件(一)-- SequenceDiagram(UML自动生成工具)
  • STM32 APP跳转到Bootloader
  • [RISC-V]verilog
  • Log4j-tag丢失
  • 代码随想录算法训练营第五十六天|1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划
  • 虚拟机和Windows的文件传输
  • leetcode分类刷题:二叉树(八、二叉搜索树特有的自顶向下遍历)
  • Vue 插槽 组件插入不固定内容
  • webpack打包时配置环境变量
  • 【c++|opencv】一、基础操作---3.访问图像元素
  • 机器视觉3D项目评估的基本要素及测量案例分析
  • 力扣日记10.31-【栈与队列篇】前 K 个高频元素
  • TensorFlow案例学习:简单的音频识别
  • css小程序踩坑记录
  • Android sqlite分页上传离线订单后删除