Spring Cloud 架得动微服务,撑得起 K8s 吗?一篇讲透云原生的秘密!

举报
bug菌 发表于 2025/06/05 17:13:46 2025/06/05
【摘要】 🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前序

🧠“Spring Cloud + Kubernetes,听上去就像把两个重量级技术硬碰硬,是不是会崩?到底怎么配合才丝滑?本篇一次性讲透!”

✨前言:当微服务遇上容器编排,会擦出什么火花?🔥

“微服务架构搞定了,接下来我们部署到 Kubernetes 上吧!”
  ——听起来是不是很理所当然?但真正做的时候你会发现,微服务的理念K8s 的生态机制之间,有点像新婚夫妇:看着很配,磨合期却满是挑战。

这篇文章不是炫技,不是拽术语,而是告诉你:怎么把 Spring Cloud 微服务落地到 K8s 集群里,实现真正意义上的高可用、弹性伸缩、自动化部署。

🧩目录概览(你关心的我全讲了)

  1. 🧱 为什么要把 Spring Cloud 迁入 Kubernetes?
  2. 📦 Spring Cloud 服务如何容器化?
  3. 🧭 Kubernetes 中如何服务发现?Eureka 还香不香?
  4. 🚪 网关 Gateway + K8s 的正确打开方式
  5. 🧾 Config Server、Bus 怎么玩儿得转?
  6. 🛠️ 实战部署:一键起飞的微服务集群
  7. 🧠 深度思考:Spring Cloud + K8s,到底谁该负责服务治理?
  8. 🔚 总结:技术是桥梁,不是墙

🧱 为什么要把 Spring Cloud 迁入 Kubernetes?

“本地跑得好好的,为啥非得上 K8s?”🤔

理由其实只有一个字:“稳”

  • ☁️ 容器化部署更一致:开发、测试、生产环境一模一样,解决“本地跑得好,服务器炸成狗”的问题。
  • 🚀 弹性伸缩稳如狗:配合 K8s 的 HPA,QPS 一高自动扩容,省运维、省人力。
  • 📈 运维自动化:滚动升级、探针、限流、熔断……统统标配!

📦 Step 1:Spring Cloud 服务如何容器化?🛳️

老规矩:先 Docker 化!没这步别谈什么部署上云。

✅ Dockerfile 示例

FROM openjdk:17-jdk
COPY target/user-service.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

编译命令:

mvn clean package -DskipTests
docker build -t user-service:1.0 .

然后推到镜像仓库(Harbor、DockerHub、阿里云都行):

docker tag user-service:1.0 your-registry/user-service:1.0
docker push your-registry/user-service:1.0

🧭 服务发现:Eureka 在 Kubernetes 里还有必要吗?🤯

你没听错!在 Kubernetes 里,Eureka 可以直接被“弃用”

为啥?因为 Kubernetes 本身就内置了 DNS + Service 的服务发现机制。你部署一个 Deployment,它自动注册成了 ClusterIP Service,通过服务名就能互相访问

http://user-service:8080/user/1

不再需要 Eureka,也就省去了注册中心单点风险和资源占用!

👀 小贴士:如果你团队已经深度依赖 Eureka,也可以继续用,但建议逐步迁移到原生 Service Discovery 模式。

🚪 Gateway + K8s:微服务流量的“唯一入口”

在 K8s 中,Spring Cloud Gateway 依然是统一网关的首选,但部署方式略有不同:

  1. 创建 Deployment + Service(一般是 NodePort)
  2. 或者更高级点:Ingress + Gateway 配合

✅ Deployment 示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: gateway
spec:
  replicas: 2
  selector:
    matchLabels:
      app: gateway
  template:
    metadata:
      labels:
        app: gateway
    spec:
      containers:
        - name: gateway
          image: your-registry/gateway:1.0
          ports:
            - containerPort: 8080

✅ Service + Ingress 示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gateway-ingress
spec:
  rules:
    - host: api.yourdomain.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: gateway
                port:
                  number: 8080

这样就可以通过域名+统一入口访问所有服务,兼容 Nginx-ingress 或 Traefik。

🧾 Config Server & Bus:配置中心还能用吗?能!但别太耍花活!

Spring Cloud Config 依然是香的,但需要注意几点:

  • 将配置文件仓库(Git)公开或挂载成 volume
  • Config Server 作为一个服务部署
  • 使用 Config Client 拉取远程配置
  • Bus 推荐使用 RabbitMQ(可用 Helm 一键部署)
spring:
  cloud:
    config:
      uri: http://config-service:8888
spring:
  cloud:
    bus:
      enabled: true
      refresh:
        enabled: true

更新配置刷新只需发个 POST 请求即可:

curl -X POST http://gateway-service:8080/actuator/bus-refresh

🛠️ 实战部署:一键起飞的 Spring Cloud + K8s 微服务集群

项目结构简览:

microservice-on-k8s/
├── k8s/
│   ├── gateway/
│   ├── user-service/
│   ├── order-service/
│   ├── config-server/
│   └── ingress/
├── scripts/
│   └── deploy.sh
└── docker/
    └── Dockerfiles

配合 Helm、kubectl、Kustomize,你可以:

  • 一键部署所有组件
  • 滚动升级新版本
  • 动态配置热更新
  • 自动探测健康状态

🚀 Bonus:推荐开源工具

  • [Helm]https://helm.sh/: 包管理神器
  • [Kustomize]https://kustomize.io/: 适配多环境部署配置
  • [Argo CD]https://argo-cd.readthedocs.io/: GitOps 持续部署

🧠 深度思考:谁该负责服务治理?

Spring Cloud 和 Kubernetes 都在强调“服务治理”,但边界不同:

能力 Spring Cloud Kubernetes
服务发现 ✅(Eureka) ✅(Core DNS)
配置中心 ⛔(需外接)
负载均衡 ✅(Ribbon) ✅(kube-proxy)
熔断限流 ✅(Sentinel) ⛔(需接入)
监控链路 ✅(Zipkin) ⛔(需 Prometheus/Jaeger)

建议:核心治理仍然放在 Spring Cloud,K8s 负责底层调度、弹性和自动化。这才是两者真正的“联姻”,而不是互相抢饭碗。

🔚 总结:技术是桥梁,不是墙 🧱➡️🌉

别再纠结“Spring Cloud 是不是过时了”,“K8s 会不会替代它”。他们根本不是对手,而是搭档。

  • 用 Spring Cloud 管理微服务的逻辑和通信
  • 用 Kubernetes 管理服务的部署、扩缩容和集群稳定性

二者合璧,才是现代云原生微服务的真正打开方式!

💬 如果你看完有点点启发,别忘了点赞、收藏、分享给同样“在迁移边缘徘徊”的同事们!下一篇我会带你深入部署 CI/CD 流水线,把微服务推到 K8s 的每一寸土地!敬请期待 🚀

🧧福利赠与你🧧

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」专栏(全网一个名),bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

✨️ Who am I?

我是bug菌(全网一个名),CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。