Kubernetes 官方 java 客户端之四:内部应用
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
概览
1. 本文是《Kubernetes 官方 java 客户端》系列的第四篇,以下提到的 java 客户端都是指 client-jar.jar;
2. 前文《Kubernetes官方java客户端之三:外部应用》中,咱们开发了一个名为 OutsideclusterApplication 的 SpringBoot 应用,该应用并未部署在 K8S 环境,而是远程访问 K8S 环境内部的 API Server,整体结构如下:
3. 除了前文中部署在外部的方式,还有一种常见场景:使用 java 客户端的应用自身也部署在 K8S 环境中,如下图所示,名为 DemoApplication 的 SpringBoot 应用部署在 K8S 环境内,调用 java 客户端库的 API 对 K8S 进行各种操作,整体结构如下:
4. 本文的内容就是开发上图中名为 DemoApplication 的应用,并且部署在 K8S 环境中进行验证;
额外准备
前文《Kubernetes官方java客户端之三:外部应用》的实战是一次常规的 SpringBoot 应用开发,本文的实战和前文略有不同,您需要对以下知识点有所了解:
SpringBoot 制作成 docker 镜像,首选官方推荐的方式,参考《体验 SpringBoot(2.3)应用制作 Docker 镜像(官方方案)》、《详解 SpringBoot(2.3)应用制作 Docker 镜像(官方方案)》
SpringBoot 应用在 K8S 环境下的探针技术,参考《掌握 SpringBoot-2.3 的容器探针:基础篇》、《掌握 SpringBoot-2.3 的容器探针:深入篇》、《掌握 SpringBoot-2.3 的容器探针:实战篇》
源码下载
如果您不想编码,可以在 GitHub 下载所有源码,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos):
个 git 项目中有多个文件夹,本章的应用在 kubernetesclient 文件夹下,如下图红框所示:
开发 K8S 环境内的应用:DemoApplication
打开《Kubernetes官方java客户端:准备》中创建的的 kubernetesclient 工程,在里面创建子工程,名为 helloworld,这是个 SpringBoot 工程,pom.xml 内容如下:
编写 java 代码,创建 DemoApplication.java,这里为了简单起见,将引导类和 web controller 的代码都写在 DemoApplication 类中:
还记得《Kubernetes官方java客户端之二:序列化和反序列化问题》提到的序列化问题吗?上述代码中,log.info 那段代码里对 V1PodList 执行序列化的是 Gson,并且 hello 方法返回的也不是 V1PodList 实例,而是新做的一个 List 实例,这样做是因为 jackson 对 V1PodList 做序列化会导致异常,这里要避免 jackson 参与序列化操作;
应用的代码已经写完,接下来是镜像制作用到的 Dockerfile 文件,该文件和刚才创建的 pom.xml 文件在同一个目录下(即子工程 helloworld 的文件夹下),Dockerfile 文件内容如下:
在子工程 pom.xml 文件所在目录执行以下命令完成编译构建:
接下来要制作镜像文件了,请确保当前电脑已经安装并运行了 docker,另外构建 docker 镜像的操作我仅在 macOS 和 Linux 操作系统下执行成功,在 Windows 环境能否成功请自行尝试;
在 Dockerfile 所在目录执行以下命令即可创建 docker 镜像文件:
上述命令执行成功后,镜像文件还只是在本机的 docker 仓库中,请放置到 K8S 环境可以访问的地方,我这里是在内网部署了镜像仓库 Harbor,执行以下命令即可从本地仓库推送到 Harbor(可能需要先登录,与 Harbor 的设置有关):
镜像准备完成,接下来就是在 K8S 环境部署了,在 K8S 环境创建名为 helloworld.yaml 的文件,内容如下,可见 deployment 和 service 都配置好了,另外请注意 serviceAccountName 属性的值为 kubernates-client-service-account,此 serviceAccountName 是在《Kubernetes官方java客户端之一:准备》一文中创建好的 RBAC 资源,令咱们开发的 helloworld 应用有权限请求 API Server:
helloworld.yaml 所在目录执行命令:kubectl apply -f helloworld.yaml
我这边,上图中的 Pod 所在宿主机 IP 地址是 192.168.50.135,因此用浏览器访问 http://192.168.50.135:30100/hello,如下图,可见当前 K8S 环境下所有 Pod 名称都返回了:
至此,SpringBoot 应用通过 K8S 官方 java 客户端,成功获取了自身所在 K8S 环境的信息,通过前文和本章,咱们对 K8S 官方 java 客户端已经有了基本的认识,接下来的实战会开启这个客户端更丰富的能力;
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/fd0aa885cf307ce1737b6bcfe】。文章转载请联系作者。
评论