k8s基础教程

k8s是什么Kubernetes(K8S)作为Google在2014年发布的一个开源项目,直到发展如今的地步,最大的原因离不开docker容器化的发展,而docker的如火如荼正是受益于微服务架构的推动。因此k8s也是微服务架构发展的产物,那它到底是干什么的呢?官方化的解释:“Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,它的目标是让部署容器化的应用简单并且高效,并提供了应用部署,规划,更新,维护的一种机制。”去掉冗长的修饰定语“kubernetes(以下简称k8s)是一种管理容器的应用”,以前也听人这样说过:“就是统一管理docker的平台”。虽然这写说法本质没错,但是对于初学者来说可能会显得kubernetes作用不是那么大,因为这里的管理隐形囊括的东西太多了,包括容器伸缩、部署回滚、存储编排、自我修复、服务发现和负载均衡、权限管理等功能。仔细观察其实可以发现,最前面的定义可能是相对于k8s开发初衷而言的,随着后续的发展,它所承担的任务已经远不止此了。抛开管理容器,k8s在功能上实现了微服务框架部分功能,因此,在这里我以个人的理解来进行解释:它是一个基于容器的微服务构建平台。K8s为我们带来什么Kubernetes作为一个基于容器完备的微服务构建平台(完善的集群管理能力),可以在物理机或虚拟机的Kubernetes集群上运行容器化应用,并提供一个以容器为中心的基础架构,满足在生产环境中运行应用的一些常见需求:

  • 多进程协同工作
  • 应用实例扩容缩容
  • 服务负载均衡
  • 应用健康检查
  • 平滑版本更新
  • 服务调度
  • 认证授权管理
  • ……

总之k8s能够帮助我们更加方便快速地开发复杂的微服务系统;它的设计理念(pod)全面拥抱微服务,拥有优秀的动态服务调整能力;而就k8s平台本身,基于master和worker的架构模式,也拥有极强的横向扩展能力。Springcloud VS k8s上面解释道k8s是一个基于容器的微服务构建平台,那么和我们当下火热的springcloud有什么区别或者说对比性呢?笔者对于springcloud也学习了一段时间,也搜集参考了一些网上的资料,下面给出核心参考:Springcloud和k8s都是微服务架构开发的工具,就流行度而言,目前springcloud成为现在微服务开发的主流选择,k8s处于相对辅助的位置。因为springcloud的核心Netflix系列组件在开发之初docker还未出现。就开发而言,springcloud的方式更早一些,虽然随着servermash理论的广泛传播,对k8s这类管理平台发展起到助推作用,但当下springcloud依然是该理论事实上的标杆。从开发层级来说,springcloud将微服务问题的解决方案融合到了业务逻辑层面,有过相关学习或开发经验的读者应该知道,通常以Java代码注解的形式嵌入主体代码中。因此springcloud可以说是入侵性较强的,它散布在开发的微服务代码中。而k8s则不同,k8s将解决方案抽离,从业务代码层面下沉到容器软件层面(如下图所示),这样来说,开发人员在开发阶段只需关注业务实现即可,而不需要考虑微服务的衍生问题,甚至没有感知,比如服务注册和发现、负载均衡和高可用等。从而实现微服务架构中“微服务”和“架构”的分离,各司其职。

尽管这样比较美好地说,但事实上k8s目前并不能完全取代springcloud,可取的选择是二者共同使用,我们可以根据实际情况将服务的注册发现、负载均衡、配置中心等使用k8s代替,其它方面依然沿用springcloud。但是就发展而言,k8s相对是一个更好的微服务架构方案,尤其是随着支持k8s相关servermash产品的出现,比如istio,它可以提供诸如服务接口调用、验证授权、流量控制、服务跟踪治理等相关功能,在更大程度上使得替代springcloud成为可能。另外springcloud面向Java的短板也没有迎合微服务的语言无关性,在笔者看来,被k8s取代只是时间问题。

发表评论

电子邮件地址不会被公开。 必填项已用*标注