65 | 基于Kubernetes的微服务架构
周志明
你好,我是周志明。
在这一年,容器管理领域的独角兽 Rancher Labs,宣布放弃其内置了数年的容器管理系统 Cattle,提出了“All-in-Kubernetes”战略,从 2.0 版本开始把 1.x 版本能够支持多种容器管理工具的 Rancher,“反向升级”为只支持 Kubernetes 一种容器管理系统。
在这一年,Kubernetes 的主要竞争者 Apache Mesos 在 9 月正式宣布了“Kubernetes on Mesos”集成计划,由竞争关系转为对 Kubernetes 提供支持,使其能够与 Mesos 的其他一级框架(如HDFS、Spark 和Chronos,等等)进行集群资源动态共享、分配与隔离。
在这一年,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-235
- 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-253
- Demon.Lee"之所以在微服务架构里,我们选择在应用层面,而不是基础设施层面去解决这些分布式问题,完全是因为由硬件构成的基础设施,跟不上由软件构成的应用服务灵活性的无奈之举。" 一句话就让我明白了! 已在本地的minikube中跑起来了,开始慢慢消化。2021-04-232
- 码小呆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
收起评论