k8s系列教程:为什么要使用k8s?

本文让你了解一下几个知识点,读完100%弄懂

  • 为什么k8s到底解决了什么问题?
  • 我们公司需要用k8s吗?

1、为什么要使用 k8s ?

要说清楚为什么要使用K8S,就必须说说后端项目部署的演进过程。每个事物存在都是有历史背景的,肯定是解决了当时面临的问题,才能够流行并应用起来。

1.1、青铜时代

在2000年左右,咱们部署应用都是非常直接的。需要购买(或租用)物理机(8核32G),然后在这台物理机上部署一个或多个应用。所有的硬件资源(cpu、内存、文件存储)对于这些部署的应用都是共享的。这无疑存在的巨大的性能隐患和安全隐患。只要其中一个应用有漏洞被入侵攻击,那么意味着整台服务器都直接沦陷。

缺点:

  • 所有硬件资源共享

  • 有安全隐患

    传统部署方式

1.2、 白银时代

随着互联网行业的快速发展,青铜时代面临的问题必须要解决。因此应时而生了“虚拟化技术”——一台机器上安装多个虚拟机,并且把应用放到虚拟机里面跑。这样就做到了硬件资源的隔离,并且保证了应用安全。但这不意味着虚拟机技术没有任何缺点。因为每个虚拟机都必须安装一个完整的操作系统(类似于你在Win10上使用VMWare安装一个centos)。操作系统很重(几个Gb),而且虚拟化是在软件层面封装的,与物理机直接相比,性能会有所损失。

并且随着微服务化的兴起,很多架构都不再以单体应用的形式开发部署。转而使用微服务架构,这就导致应用越来越多。一个商城应用可能由8个微服务组成,还不包括公共微服务(网关、短信、支付等),这些微服务还需要集群部署。那么微服务如何管理和运维便成了一个头疼的问题。虚拟化技术只能解决操作系统层面的隔离。无法对巨量的微服务进行管理,这也是它的一大硬伤。

缺点:

  • 每个虚拟机都拥有一个独立的操作系统,太重了。
  • 虚拟化独立的操作系统导致性能有损失。
  • 无法在微服务层面进行管控。

虚拟化部署

1.3、黄金时代

为了解决白银时代面临的问题,“聪明绝顶”的程序员决定使用docker来代替传统的虚拟化技术。docker容器化技术的特点是非常轻量化。简单来说它是基于linux系统内核来分隔进程的,因此性能会比使用虚拟化技术要好很多。而且他也是能够隔离硬件资源的。

这就解决了虚拟化的两个致命缺点:太重、性能损耗。可是数量众多的微服务如何管理呢?docker并没有给出解决方案。

容器化部署

1.4、王者时代

为了解决微服务的管理问题,我们需要在docker之上在加上一层软件进行控制。这软件就是K8S。

K8S官网的文档上有写到:

Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。

为了了解这句话的彻底含义,我们就要知道到底什么是“编排”“编排”容器到底解决了什么问题?

假设你是淘宝的CTO,淘宝现在是一个由500个微服务组成的购物网站,包括这些微服务:

  • 订单
  • 库存
  • 支付
  • 搜索
  • 商户后台
  • 短信
  • 财务
  • 用户管理
  • 等等500个不同微服务

500个不同的微服务集群部署在10000台不同的物理机器(每台机器配置16核64G)里面,以容器化的方式运行。每台物理机可能运行了多个不同的微服务容器。现在需要做这几件事:

  • 我要查看每个微服务在不同物理机器上的分布情况

  • 马上要双11,要新采购5000台物理机备用,当淘宝系统压力较高时,自动扩容,将微服务部署在这几千台机器上。

  • 双11过后,需要自动缩容,把多余的微服务摘除,并且把新机器退掉。

  • 因为服务器众多,要不能保证每台服务器都是正常的。如果发现微服务不健康,需要及时从集群中剔除。

  • 如果有检测到有容器下线,需要在新的机器自动开启新的容器,保证服务持续提供服务。

以上这些都属于编排的的工作,假设规模(微服务数和机器数)很小,当然可以依靠人工来完成整个过程。可一旦规模变大,是不能单靠人工完成的,必须依靠自动化机器来执行上面这一系列操作。在这里K8S就是帮我们干这个事情的。

2、我们公司需要用k8s吗?

符合一下任意一个情况可以考虑使用K8S。

1、微服务或者机器的规模比较大,靠人工已经难以运维。

2、经常会有突发流量(如抢购、活动)


原文链接:https://www.jdkdownload.com/k8s_why.html