一、为什么要学习K8s?
以kubernetes核心的云原生技术(以kubernetes为核心的云架构体系)正在吃掉整个世界(软件的世界),越来越多的企业把软件系统服务迁移到kubernetes环境中;无论传统企业,还是互联网公司都在进行企业数字化转型(提高企业生产效率),云原生是企业数字化(自动化,智能化)转型的唯一路径,实现企业开发效率倍增。
技术发展趋势(未来技术发展方向):
1、2021年: 阿里达摩院宣布十大颠覆性科技发展—云原生技术对IT开发行业具有颠覆性的发展;
2、云原生技术来了,Java真的快挂了吗??
JVM(jdk):
1) 优点: 跨平台, 庞大的生态体系
2) 缺点: 占内存,性能并没有一些脚本语言高(go,ruby)
云原生:跨平台(任何语言都可以借助云原生实现跨平台)
3、Jdk16 全面拥抱云原生技术 未来的java语言也会脚本化(占用内存少,体积小)
4、Spring SpringCloud 向云原生方向演进;
问题: 学习kubernetes到底对我们开发有什么帮助??
1.1、轻装上阵
一旦使用kubernetes技术,不需要关心那些和项目业务没有关系的底层代码(通信组件,协议转换,服务治理),只需要关心项目业务代码即可,因此开发团队只需要一个小而精悍的团队即可。
1.2、全面拥抱微服务架构
架构选型: 微服务架构面临:服务架构拆分,服务治理难题
微服务架构:拆分很细小,按照function进行拆分,拆分很多的服务,服务调用链路很长,一旦使用了微服务架构后,增加技术上难度(服务出现问题,很难查找)
难题是什么:
1、服务链路追踪
2、服务降级
3、服务限流
4、服务性能监控
一旦使用了kubernetes云原生技术后,就不需要关心服务治理问题,一切交给kubernetes实现,因此可以全面拥抱微服务架构。
1.3、无缝迁移
项目开发(开发环境)->发布版本->测试环境->发布版本(Q)->stable->上线(生产环境)
存在问题: 测试环境 开发环境不一致,造成项目测试没有问题,上线就发生了问题,影响项目上线时间。
1.4、弹性扩容
服务上线: 促销活动 ---- 流量增大(事先预知: 活动预演,压测预案)---- 动态扩容
突发事件 ---- 明星结婚 ---- 突发性流量 ---- 弹性扩容
扩展指标: 根据cpu使用率,内存使用率进行扩容即可
1.5、充分利用服务器资源
思考: 物理机,虚拟机时代部署服务时候,这些服务器cpu,内存释放可以被充分利用???
答案: 不能被充分利用的;
存在资源浪费原因在于:没有合理的调度服务部署(根据资源利用率,cpu空闲,内存空闲进行合理服务调度部署); 其实: 我们需要一个操作系统,此操作系统可以对服务进行调度,选择合理的资源进行分配。
Kubernetes根据调度器实现服务的动态调度,服务发布部署的,把服务调度服务到一个合适的节点中;以kubernetes为核心构建的云平台(云计算平台),充分利用服务器资源,实现服务合理部署,使得服务以更好的组态进行运行,或者计算。
Kubernetes把各个节点(服务器)调度整合在一起,形成一个整体(看起来就像是一台计算机),整个云环境cpu,内存是所有机器相加。
1.6、自动化运维平台
以kubernetes为核心构建一套devops平台,从开发,到运维整个流水线实现自动化开发流程;
1、服务部署,调度,发布
2、负载均衡
3、扩缩容
4、弹性容错
……………………
运维: 300运维可以减少至10个运维。