最好的Kubernetes客户端Java库fabric8io,快来自定义你的操作
发布时间:2025-05-22 01:11:44 发布人:远客网络
一、最好的Kubernetes客户端Java库fabric8io,快来自定义你的操作
本文将为您介绍Java方面最好用的Kubernetes客户端库fabric8io/kubernetes-client,它支持Kubernetes和OpenShift,被许多项目引用,如Spring Cloud、Spark、Istio Java API等。通过使用此库,您可以更灵活地管理和使用Kubernetes应用。
在使用该库之前,您需要引入最新版本的依赖。例如,使用maven引入最新版本的依赖为5.0.0,此依赖包含了相关的核心类、模型类、Json和okhttp3等。您可以通过阅读此依赖来学习优秀的项目是如何组织和管理的。
创建客户端是使用此库的基础步骤。最简单的方式是使用默认配置,从目录~/.kube/config中读取配置文件。如果需要修改配置,可以通过系统属性和环境变量进行调整,或者通过Java来自定义配置。
使用fabric8io/kubernetes-client进行资源操作非常灵活。创建命令空间、Pod等操作时,通过Builder模式创建对象,并通过createOrReplace方法可新建或替换已有资源。查看资源时,可以查询所有资源或通过条件选项过滤。修改资源时,通过edit方法定位并进行修改。删除资源则通过先定位再操作实现。
除了直接使用Java操作,fabric8io/kubernetes-client还支持通过yaml文件描述资源,更直观和方便。完成yaml文件的编写后,通过库加载对应的对象进行各种增删改查操作。同时,通过监听资源事件进行反应,如记录日志到数据库等,此功能非常实用。
总的来说,fabric8io/kubernetes-client是操作Kubernetes集群的优秀Java客户端库。它提供了简单易用的API,丰富的示例,以及强大的资源操作功能,使项目管理和使用Kubernetes应用变得更加灵活和高效。使用此API,您可以在项目中更灵活地管理和使用Kubernetes应用。代码请查看:github.com/LarryDpk/pks...
为了持续获取更多更新信息,请关注我们的微信公众号。
多读书,多分享;多写作,多整理。
二、基于Kubernetes的持续部署方案
1、本技术方案为基于Kubernetes为核心的持续部署(下文简称CD)方案,可以满足开发方的程序级日志查看分析,运维方的快速扩容与日常运维分析,并且可以保证用户的服务体验。并且整套放在可以在资源利用率上进一步提升,在不降低服务可靠性的前提下降低资源使用成本。
2、本方案适用于以Tomcat为容器的JavaWeb项目的持续部署过程,在Kubernetes方案中,所有的Node节点均采用统一配置,根据业务环境的需求进行节点数量的控制。
3、 Kubernetes集群部署模式:Stacked etcd topology
4、 Kubernetes的安装使用kubeadm安装为高可用集群,并选用Stacked etcd topology模式。
5、详情参考。
6、 Kubernetes生态技术选型:网络层面选型Weave
7、容器网络解决方案。Weave创建的虚拟网络可以将部署在多个主机上的容器连接起来。对容器来说,Weave就像一个巨大的以太网交换机,所有容器都被接入这个交换机,容器可以直接通信,无需 NAT和端口映射。
8、原理详解:
9、 Kubernetes生态技术选型:对外服务选型NodePort
10、 Kubernetes目前支持NodePort、LoadBanlace、Ingress三种对外提供服务的模式,其中LoadBanlace需要云平台的支持,阿里云提供了解决方案,但腾讯云未找到,Ingress技术为新出技术。整体评估采用NodePort方式更为灵活,每个服务一个唯一的对外IP地址,并且使用Nginx进行负载均衡(采用Nginx主要为日志分析)。
11、介绍与使用方法:。
12、在业务上,Kubernetes默认配置两套Namespace,分别为Master存放正式环境,Develop配置测试环境。
13、正式环境Web端口以32001开始,测试环境以31001开始,且一一对应。
14、 K8s-Master下的data目录下为k8s-cd-config, k8s-cd-config目录存放各业务的yaml配置,二级目录为域名,三级目录划分Master(正式),Develop(测试),目录下以版本号-构建ID-GITID.yaml命名文件,时间最后一个即为当前线上的使用配置文件,为了运维方便,在二级目录同级内,生成一个软链连接到最新的正式与测试配置文件。注意,k8s-cd-config仅在其中一台Master中存在。
15、节点下的/data一级目录下分Filebeat、Dockerlibs、Nodelogs,其中Dockerlibs存放Docker相关数据,Nodelogs目录通过volume的方式挂载入Kubernetes的Pod, Nodelogs下分Develop与Master目录,区分正式环境与测试环境,每个Master与Develop下分为accesslogs、devlogs、tomcatlogs分别存放访问日志,开发部日志,Tomcat日志,日志目录下为项目(域名),域名下为Pod名称目录。
16、注意事项:节点加入集群后,一定要下载手工下载kubernetes-dashboard-amd64镜像,防止dashboard所在节点挂掉以后dashboard无法在其他节点启动。
17、 Harbor重定义其Registry的存储路径直接使用docker-compose安装。template存放基础进项,各域名分组存放业务镜像。
18、分组下镜像以站点域名:版本号-类型-CDGITLAB为名称,并基于版本号确定不同的站点版本。
19、 Harbor数据目录统一存放在/data下。
20、 Harbor默认不设置备份,对于业务镜像无需进行备份,每次进行构建即可,对于模板类镜像,在Jenkins机器上均可以找到,若Harbor出现问题,则直接重建,并将Jenkins上的模板镜像进行重新push。
21、注意:为了业务的稳定性,Harbor由独立的服务运行(基于Docker),并不运行在Kubernetes内。
22、 Jenkins下的data目录分为dockerlibs、thinbackups、gitlab-files、jks-cd-config。
23、 Dockerlibs存放Docker相关文件,thinbackups存放每日的Jenkins备份,gitlab-files存放构建GitLab的文件(运维可以在此操作pull,push),jks-cd-config为jks构建目录。
24、 Jenkins机使用/data/jks-cd-config目录存放构建内容,二级目录为域名,三级目录为版本号(以开发部版本号为准),三级目录下存放ROOT.war,四级目录为构建ID_GITID,目录下存放构建的原始数据。
25、 Jenkins的分组分为template与各domain,template存放模板,domain以域名的形式存放正式项目:
26、新项目由运维手工创建,后续的秩序构建过程由开发部调用API完成。
27、 Jenkins构建时,需要传递三参数,1:程序版本号,2:类型:apply与delete,3:正式环境还是测试环境,正式环境为Master,测试环境为Develop,对应Kubernetes的Namespace。
28、此部分功能后期将通过开发部的构建凭条调用JenkinsAPI实现。
29、 APIDoc:
30、 Token:
31、 Jenins安装ThinBackup插件,配置每小时进行一次全局备份,且最多保留10份,备份后数据传至异地。
32、注意:为了业务的稳定性,Jenkins由独立的服务运行,并不运行在Kubernetes内。
33、 CD GitLab项目下分两个组template与各domain,template存放模板文件。例如:
34、 default下以域名划分项目,每个项目划分Master与Develop两个分支,分别存放正式环境与测试环境CD文件。
35、 GitLab使用gitlab-rake gitlab:backup:create进行每日定期备份,并传送至异地。
36、 ES数据通过索引仅保留近10天的数据,每日通过脚本方式进行数据删除。ES的数据保存在/data/elasticsearch目录下。
37、在每个Node节点启动一个Filebeat进程,用于日志的采集工作,filebeat分别监控:
38、其中,tomcatlogs日志需要进行特殊处理,进行多行合并,数据写入ES时,使用processors. Dissect进行目录名称截取,并使用域名作为ES的索引使用。
39、截取gy. wtype( master或develop), ltype(accesslogs、tomcatlogs、devlogs),domain(xxx.gyyx.cn)。
40、 Kibana目前我们仅使用其discover节点,用于日志数据的查询,在配置方面。
41、 Kibana配置使用“域名-*”方式进行配置,每次新增域名,需要在此进行手工配置。
42、 Kibana使用discover查看时,默认展示一个域名下所有的日志,可以通过gy.wtype筛选选择查看测试环境还是正式环境,或者通过gy.ltype哪种日志类型。
43、容器资源使用WeaveScope进行资源消耗监控。
44、扫描添加我微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!
三、Kubernetes系列(九)fabric8io Java Client
本文将深入探讨 Kubernetes领域下广泛使用的开源 Java客户端工具 fabric8io/kubernetes-client。
项目托管在 GitHub上,地址为:
目前,fabric8io Kubernetes Client的最新版本为 6.0.0,该版本支持 Kubernetes 1.23.3、1.22.1、1.20.2、1.19.1等多个版本。更多版本适配信息请查阅项目首页的 Readme文档。
通过读取 Config文件获取 Client的方式如下,当然,您也可以通过环境变量、token等方式获取,实际操作类似:
以下是 fabric8io Kubernetes Client在不同场景下的使用示例:
Node相关、Namespace相关、Deployment相关、Service相关、Pod相关、ConfigMap相关、PVC相关、StorageClass相关、IngressClass相关、Ingress相关。