周志明的软件架构课
周志明
博士,远光软件研究院院长,《深入理解 Java 虚拟机》《凤凰架构》等书作者
54204 人已学习
免费领取
课程目录
已完结/共 74 讲
架构师的视角 (24讲)
周志明的软件架构课
15
15
1.0x
00:00/00:00
登录|注册

65 | 基于Kubernetes的微服务架构

你好,我是周志明。
我在第 5 讲中,曾经把 2017 年描述为是“后微服务时代”的开端,这是容器生态发展历史中具有里程碑意义的一年。
在这一年,长期作为 Docker 竞争对手的RKT 容器一派的领导者 CoreOS,宣布放弃自己的容器管理系统 Fleet,未来将会把所有容器管理的功能转移到 Kubernetes 之上去实现。
在这一年,容器管理领域的独角兽 Rancher Labs,宣布放弃其内置了数年的容器管理系统 Cattle,提出了“All-in-Kubernetes”战略,从 2.0 版本开始把 1.x 版本能够支持多种容器管理工具的 Rancher,“反向升级”为只支持 Kubernetes 一种容器管理系统。
在这一年,Kubernetes 的主要竞争者 Apache Mesos 在 9 月正式宣布了“Kubernetes on Mesos”集成计划,由竞争关系转为对 Kubernetes 提供支持,使其能够与 Mesos 的其他一级框架(如HDFSSparkChronos,等等)进行集群资源动态共享、分配与隔离。
在这一年,Kubernetes 的最大竞争者 Docker Swarm 的母公司 Docker,终于在 10 月被迫宣布 Docker 要同时支持 Swarm 与 Kubernetes 两套容器管理系统,事实上承认了 Kubernetes 的统治地位。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了基于Kubernetes的微服务架构在实际应用中的发展历程和关键技术组件。首先回顾了Kubernetes在容器生态中的重要地位,强调了其在容器管理领域的统治地位。随后,详细描述了一个名为Fenix's Bookstore的小型书店在引入Kubernetes后的架构演进和升级目标,包括环境感知、配置中心、服务发现、负载均衡、服务网关、服务熔断和认证授权等技术组件的应用。文章还介绍了在Kubernetes集群环境中运行程序的方法,以及通过Skaffold工具实现的自动化命令行工具。最后,强调了Kubernetes的实现版本中,通过删除配置中心、服务注册中心的工程,并新增以YAML配置文件为载体的Kubernetes资源描述,实现了基础设施层面的解决方案。整体而言,本文为读者提供了深入了解和实践的指导,展示了Kubernetes在微服务架构中的重要作用和实际应用。

该试读文章来自《周志明的软件架构课》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • zhanyd
    同样的需求,我们是不是可以跳过微服务,直接用Kubernetes代替了?
    2021-04-23
    5
  • good boby
    跟随周老师的课程成长许多,非常感谢周老师的无私付出,现对以上负载均衡知识点发表个人一些看法: 一、讲解一下Ribbon与K8s负载均衡本质。 1、Ribbon实现负载均衡本质:动态代理(LoadBalancerlnterceptor) + restTemplate,其中LoadBalancerlnterceptor负责http请求拦截,restTempate负责http请求,IPing 负责检查Client的健康性,从Eureka Client拉取服务列表并缓存到本地。 2、k8s 的天生自代负载均衡,并且可以动态去扩展 pod的replication数量。Service是同类pod的接口性抽象,并为外部提供统一访问接口(k8s所有与负载均衡,路由到终端端点(endpoint),直到最后的pod。kube-proxy 可分为 userspace、iptables(默认)、ipvs。Service分为4类(ClusterIP 、NotePort、LoadBalancer、ExternalName)。 二、在业务架构层实现负载均衡策略与k8s上实现负载均衡策略优缺点分析。 1、ribbon实现负载均衡。ribbon本质上采用的restTemplate实现的网络通讯,其可以选择Aphache http、HttpUrlConnection、okhttp3。默认采用的Aphache的http通讯框架,okhttp3通讯框架大幅提高了http性能,可以进行考虑。 2、k8s天生自带负载均衡、自动扩展特性,那么在大规模并发访问上,可以动态扩展pod的副本数量来提高系统可靠性。但是其在细节优化上存在一定的瓶颈,例如业务层采用okhttp3框架。
    2021-04-25
    3
  • Demon.Lee
    "之所以在微服务架构里,我们选择在应用层面,而不是基础设施层面去解决这些分布式问题,完全是因为由硬件构成的基础设施,跟不上由软件构成的应用服务灵活性的无奈之举。" 一句话就让我明白了! 已在本地的minikube中跑起来了,开始慢慢消化。
    2021-04-23
    2
  • 码小呆
    Kubernetes的配置感觉有点多
    2022-05-26
  • Demon.Lee
    请教老师一个部署的问题:前端代码与后端代码在k8s体系下怎么部署才是最佳实践。 参考官网上的例子(https://kubernetes.io/zh/docs/tasks/access-application-cluster/connecting-frontend-backend/),我理解是将前端代码放在nginx里面,同时在nginx.conf中配置后台api的反向代理(我的理解是解决跨域问题),然后将其部署为一个pod,并暴露出该前端工程的service ip和nodePort。 1)如果这里不直接暴露前端服务ip和nodePort,而走ingress,是否有必要,个人感觉又绕了一层。 2)nginx.conf中给后台服务配置的反向代理,也是后台服务的ingress地址,而不是后台服务的内部ip和端口。这么考虑,有两个原因,一是前端代码如果某一天单独拎出去部署,而不是在k8s中,不受影响;二是通过ingress-nginx Prometheus可以拿到相关api调用的监控指标。 老师的这个例子,前端代码直接在zuul网关中,跟我们的情况有些不同。 想听听老师的想法,我们的部署方案是否欠妥,最佳实践又是怎样的,谢谢。
    2021-06-17
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部