Spring Cloud Kubernetes 本地开发环境调试

一、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 节点中:

shell 复制代码
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 的版本:

shell 复制代码
kubectl version --client --output=yaml

kubectl 会自动读取上面的 config 配置文件,所以此时可以直接查看 k8s 中的资源:

shell 复制代码
kubectl get pods -n kube-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 窗口,查看版本,验证是否正常:

shell 复制代码
ktctl -v

连接 K8s ,会自动在 k8s 中部署 kt-connect 服务。

shell 复制代码
ktctl connect

注意该 CMD 窗口不要关闭,关闭后会自动停掉连接。

shell 复制代码
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 中的配置文件:

shell 复制代码
kubectl edit configmap consumerconfig -n cloud

可以在 IDEA 看到触发了 restart_context 策略:

再次查看配置信息:

也已经生效,可以感觉出来和在 k8s 中几乎一样使用。

相关推荐
paopaokaka_luck3 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
雷一言说5 小时前
Spring AI 2.0 Tool Calling 实战:用一个订单查询跑通整个调用链
spring
程序猿阿越5 小时前
从 StatefulSet 到容器挂载:CSI 源码走读
后端·kubernetes·源码阅读
xieliyu.10 小时前
【JavaEE进阶】Spring Boot 日志:从 System.out 到 @Slf4j,6 个级别 + 4 类配置一篇讲透
java·spring boot·spring·java-ee·springboot·logback·slf4j
IT_Octopus10 小时前
Apollo 配置中心入门:一所“小学校“读懂 Portal、Meta Server、Config Service
java·后端·spring
weixin_5394467811 小时前
Ubuntu部署Minikube
kubernetes
fb_1234513 小时前
K8s存储与配置核心实战
云原生·容器·kubernetes
ly768914 小时前
Spring Security 过滤器链定制:认证、CORS 与 CSRF 的先后顺序
java·spring boot·spring·spring security·csrf·cors·过滤器链
A-刘晨阳14 小时前
【云原生】nerdctl 部署及使用指南
运维·docker·kubernetes·云计算·1024程序员节·nerdctl