天天看点

1.6微服务--Kubernetes简介Kubernetes简介

Kubernetes简介

一、Kubernetes简介

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 已经发展成为容器管理领域的领导者

二、SpringCloud与Kubemetes比较

Spring Cloud 是一个构建微服务的框架,而Kubernetes 是通过对运行的容器的编排来实现构建微服务的。

两者从构建微服务的角度和实现方式有很大的不同,但它们提供了构建微服务所需的全部功能。从提供的微服务所需的功能上看,两者不分上下,二者比较结果如图所示:

1.6微服务--Kubernetes简介Kubernetes简介
1.6微服务--Kubernetes简介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 程序员开发微服务提供了很好的体验,学习成本也较低。

————————————————————————————————————————————

内容来源---《深入理解Spring Cloud与微服务构建》

继续阅读