Kubernetes 是一个容器集群管理系统,为容器化的应用程序提供部署运行、维护、扩展、资源调度、服务发现等功能。
Kubernetes 结合了社区的最佳创意和实践, 旨在帮助开发人员将容器打包、动态编排, 同时帮助各大公司向微服务方向进行技术演进。
它具有以下特点:
1)Planet Scale (大容量)
使用Kubemetes 的各大公司(包括Google )每周运行了数十亿个容器, 这些容器的平台采用同样的设计原则。这些平台在不增加团队成员的情况下,可以让容器数量增加, 节省了人力成本,增加了复用性
2)Never Outgrow (永不过时)
无论容器是运行在一个小公司的测试环境中, 还是运行在一个全球化企业的大型系统里, Kubemetes 都能灵活地满足复杂的需求。同时, 无论业务多么复杂, Kubernetes 都能稳定地提供服务
3)Run Anywhere (随时随地运行)
Kubernetes 是开源的, 可以自由地利用内部、混合或公共云的基础组件进行部署, 让开发者可以将更多的时间和精力投入在业务上, 而不是服务部署上
Kubernetes 提供的功能如下:
1、Automatic Binpacking (自动包装)
根据程序自身的资源需求和一些其他方面的需求自动配置容器。Kubernetes 能够最大化地利用机器的工作负载,提高资源的利
用率
2、Self-healing (自我修复)
容器失败自动重启, 当节点处于“ 死机” 的状态时, 它会被替代并重新编排; 当容器达到用户设定的无响应的阀值时, 它会被剔除, 井且不让其他容器调用它, 直到它恢复服务
3、Horizontal Scaling (横向扩展)
可以根据机器的CPU 的使用率来调整容器的数量,只需开发人员在管理界面上输入几个命令即可
4、Service Discovery and Load Balancing (服务发现和负载均衡)
在不需要修改现有的应用程序代码的情况下,便可使用服务的发现机制。Kubernetes 为容器提供了一个虚拟网络环境,每个容器拥有独立的IP 地址和DNS 名称,容器之间实现了负载均衡。
5、Automated Rollouts and Rollbacks (自动部署或回滚)
Kubernetes 支撑滚动更新模式,能逐步梓换掉当前环境的应用程序和配置,同时监视应用程序运行状况,以确保不会同时杀死所有实例。如果出现问题, Kubernetes 支持回滚更改
6、Secret and Configuration Management (配置管理)
部署和更新应用程序的配置,不需要重新打镜像,并且不需要在堆找中暴露配置
7、Storage Orchestration (存储编排)
自动安装所选择的存储系统,无论是本地存储、公共云提供商(如GCP 或AWS ),还是网络存储系统(如NFS 、Gluster 、Ceph 、Cinder 或Flocker )
8、Batch execution (批量处理)
除了服务之外, Kubemetes 还可以管理批量处理和CI的工作负载,还可以替换容器,如(NFS 、iSCSI 、Gluster、Ceph 、Cinder 或Flocker 等)
从Kubemetes 提供的功能来看, Kubernetes 完全可以成为构建和部署微服务的一个工具,它是从服务编排上实现的,而不是代码实现的,Kubemetes 已经发展成为容器管理领域的领导者
Spring Cloud 是一个构建微服务的框架,而Kubernetes 是通过对运行的容器的编排来实现构建微服务的。
两者从构建微服务的角度和实现方式有很大的不同,但它们提供了构建微服务所需的全部功能。从提供的微服务所需的功能上看,两者不分上下,二者比较结果如图所示:
Kubemetes 在编排上解决微服务的各个功能,例如服务发现、配置管理、负载均衡、容错等。
Kubemetes 不局限于Java 平台,也不局限于语言,开发者可以自由选择开发语言进行项目开发,
与Kubemetes 相比, Spring Cloud 具有以下优点:
1)采用Java 语言开发,基于Spring 平台, 继承了Spring Boot 快速开发的优势,是Java程序员实现微服务的最佳实践
2)Spring Cloud 有大量的类库和资源, 基本上能解决所有可能出现的问题
与Kubemetes 比较, Spring Cloud 具有以下缺点:
1)依赖于Java 语言,不支持跨语言。
2)Spring Cloud 需要在代码中关注微服务的功能点,例如服务发现、负载均衡等,Kubemetes 则不需要关注这些
Kubemetes 的优点如下:
1)Kubemetes 支持多种语言,并且是一个容器管理平台。Kubemetes 使程序容器化, 并在容器管理上提供了微服务的功能,例如配置管理、服务发现、负载均衡等;Kubemetes 能够被应用于多种场合,例如程序开发、测试环境、创建环境等。
2)Kubemetes 除了提供基本的构建微服务的功能外,还提供了环境、资源限制、管理应用程序的生命周期的功能;Kubemetes 更像是一个平台,而Spring Cloud 是一个框架。
Kubemetes 的缺点如下:
1)Kubemetes 面向DevOps 人员,普通的开发人员需要学习很多这方面的知识,学习成本非常高
2)Kubemetes 发展十分迅速。新特性更新得快,所以需要开发者不断地学习
Spring Cloud 尝试从Java 类库来实现微服务的所有功能,而Kubernetes 尝试从容器编排上实现所有的微服务功能,两者的实现角度和方式不一样。
从实现的方式上来讲, Kubernetes 略胜一筹;Kubernetes 面向DevOps 人员,学习成本高,Spring Cloud 有很多的类库,以Spring 为基础,继承了SpringBoot 快速开发的优点,为Java 程序员开发微服务提供了很好的体验,学习成本也较低。
————————————————————————————————————————————