一、Spring Cloud Kubernetes 本地开发环境调试
上面文章使用Spring Cloud Kubernetes在k8s环境中实现了服务注册发现、服务动态配置,但是需要放在k8s环境中才能正常使用,在本地开发环境中可能没有k8s环境,如何本地开发调试呢?
这点Spring Cloud官方已经考虑到了这个问题,Spring Cloud Kubernetes项目的代码依赖于Fabric8 Kubernetes Java客户端,这是一个流畅的DSL,可以使用协议与K8s Server进行REST API通信。
官方的介绍如下:
https://docs.spring.io/spring-cloud-kubernetes/reference/3.1-SNAPSHOT/kubernetes-awareness.html
整体本地开发环境构建的过程基本包括如下几步:
- 将
k8s master节点的~/.kube/config文件复制到本机电脑的用户目录下的.kube目录中。 - 本地环境安装
kubectl工具。 - 本地环境安装
KT-Connect工具 - 使用
ktctl connect连接k8s环境。
二、将 k8s 的 config 复制到本机电脑
进入到已部署好的k8s master节点中:
cd~/.kube ll
将config文件复制出来放到本机电脑的C:\Users\{你的用户名}\.kube目录下。
修改文件中的clusters.cluster.server为k8s master节点的ip,如果已经是,则不用修改:
三、部署 kubectl 工具
下载kubectl:
https://kubernetes.io/docs/tasks/tools/
根据自己的环境下载后,配置环境变量,在Path中新增一个,指向kubectl.exe所在目录。
验证是否正常,打开CMD窗口,查看kubectl的版本:
kubectl version--client--output=yamlkubectl会自动读取上面的config配置文件,所以此时可以直接查看k8s中的资源:
kubectl get pods-nkube-system四、部署 KT-Connect
KtConnect是一款基于k8s环境用于提高本地测试联调效率的小工具。
功能包括:
Connect:建立数据代理通道,实现本地服务直接访问k8s集群内网(包括Pod IP和Service域名)Exchange:让集群服务流量重定向到本地,实现快速验证本地版本和调试排查问题Mesh:创建路由规则重定向特定流量,实现多人协作场景下互不影响的本地调试Preview:暴露本地服务到集群,实现无需发布即可在线预览集成效果
下载KT-Connect,进入下面连接,根据自己电脑系统情况,下载相应软件包,这里我下载的Windows x86 64位:
https://github.com/alibaba/kt-connect/blob/master/docs/zh-cn/guide/downloads.md
下载后,解压可以看到ktctl.exe和wintun.dll。
配置环境变量,在Path中新增一个,指向这两个文件所在目录。
以管理员身份打开 CMD 窗口,查看版本,验证是否正常:
ktctl-v连接K8s,会自动在k8s中部署kt-connect服务。
ktctl connect注意该CMD窗口不要关闭,关闭后会自动停掉连接。
kubectl get pods五、本地环境调试
这里测试使用上篇文章实践的消费者服务,如果不清楚的可以在下面文章中找到搭建过程:
Spring Cloud 基于 K8s 原生能力实践 服务注册发现、服务动态配置
其中服务提供者需要已经部署到k8s环境中:
本地IDEA启动服务消费者,启动时,指定环境变量KUBERNETES_NAMESPACE为k8s部署服务的命名空间,上篇文章中我们使用的cloud:
启动服务:
服务启动成功。
5.1 服务注册发现测试
调用http://localhost:8080/discoveryInfo查看服务信息:
已经能成功拿到k8s中的服务信息。
调用http://localhost:8080/rpc测试RPC远程调用,并且多次调用:
调用正常,并可以看到负载均衡效果。
5.2 服务动态配置测试
调用http://localhost:8080/config查看配置信息:
成功读取到ConfigMap中的配置信息。
尝试修改K8s中的配置文件:
kubectl edit configmap consumerconfig-ncloud可以在IDEA看到触发了restart_context策略:
再次查看配置信息:
也已经生效,可以感觉出来和在k8s中几乎一样使用。