Kubernetes(一):容器编排介绍

孤人 提交于 2021-01-06 11:33:27

一、云计算

  

云计算发展历程

  在学习k8s的过程中接触到了Serverless的概念,这里先对云计算的发展历程做一个简单的总结,以便引入Serverless。2006年,Google董事长 Eric Schmidt 在搜索引擎大会首次提出云计算(Cloud Computing)的概念,一转眼十多年过去了,云计算的发展势如破竹,从传统的IDC到现在的FaaS,<font color=#0000FF>逐渐快捷,愈发高效</font>。

  • IDC( Internet Data Center ):互联网数据中心。自建或者租用。自建自己干全套;租用就是服务器自己买,租人家的机柜,硬件安装和调试都由被托管方负责。
  • IaaS(Infrastructure as a Service):基础设施即服务。IaaS提供商给你提供硬件, 想怎么用自己搞。
  • PaaS(Platform as a Service):平台即服务。PaaS提供商给你提供硬件并装好操作系统、相关中间件及运行库等基础环境,至于要装什么应用看需求。
  • SaaS(Software as a Service):软件即服务。所有的东西都由IaaS提供商提供,用户只管用。
  • FaaS(Function as a Service):函数即服务。将应用程序抽象成函数,只有当程序被调用时才会执行函数启动,平时不启动不占用资源。

<div align="center"> <img style="max-width:80%;" src="https://img2018.cnblogs.com/blog/1419513/201908/1419513-20190806215644083-889473300.png"> </div>

  

Serverless

  Serverless是无服务器架构,这并不是说不用服务器了,而是通过技术手段将服务器透明化了,让开发者减少对服务器资源的关注,能够更加专注于自己的开发工作(业务)。Faas就是Serverless概念的一种体现。

  • 低成本

    • Serverless将用户的服务器,数据库,中间件委托于FaaS,用户不再参与基础设施及软件的维护,而是直接使用相关的资源,大大节约了维护成本,降低了开发难度。
  • 按需计费

    • 不同于以往云计算的计费方式,FaaS是按照请求次数及运行时间计费,最大程度利用了资源并降低了成本
  • 简化管理

    • 自动化的弹性扩展、减小了打包和部署的复杂度、可以快速发布出去。

  

二、容器化的演变过程

  • 传统服务

    • 在微服务和容器化还没有盛行的时候,系统服务架构如下图,这种单体架构的好处就是便于管理和初次部署,但是当后续产品规模越来越大时,坏处就体现出来了。

      • 项目过于臃肿。大大小小的模块都几种在同一个项目中,开发者不易维护
      • 资源无法隔离。如果其中一个模块出现内存泄漏,整个系统都会被拖垮
      • 无法灵活扩展。有时并不是产品的每个模块都会提供对外访问,访问量大做集群负载时无法轻易水平扩展。

<div align="center"> <img style="max-width:80%;" src="https://img2018.cnblogs.com/blog/1419513/201908/1419513-20190806230359397-815584005.png"> </div>

  • 微服务

    • 微服务是近几年流行的一种架构思想,它提倡化整为零,将单一应用程序划分为一个一个的小服务,每个小服务运行在一个单独的环境中,互不影响却又能相互协调、相互配合达到化零为整的效果。微服务有以下特点:

      • 独立测试、部署、升级、发布。可以单独只测试某一个模块。
      • 便于扩展。比如商品模块访问量比较大,一个节点扛不住,那就再弄一台服务器部署一个商品模块,前端做LB。
      • 提高了容错,比如某个模块出问题了,不会影响到其它模块
      • 提高了管理的复杂度。当你单个服务过多时,互相之间的调用就是问题,如果单个写静态配置文件的话对运维人员会是一个不小的挑战。这时候就需要一个叫服务注册中心的东西,每个单服务实例在启动的时候,向注册中心注册自己的IP地址等信息,这样别的服务调用它时,都会先去注册中心查询,然后根据查询到的信息再去调用。比如订单模块之前调用的是支付模块A,支付模块A的服务挂了,那一定时间内注册中心就会移除支付模块A的注册信息。订单模块连接不上原本的支付模块A了,就会再次向注册中心查询有没有其他的支付模块。
      • 客户端调服务端都需要一个统一的入口,就是API Gateway。此处的客户端是一个相对的说法,除去外部访问,内部访问A调用B,相对B来说A就是客户端。API Gateway有身份验证、请求分片、负载均衡等功能。个人理解有限,想深入了解的自行查资料。

<div align="center"> <img style="max-width:80%;" src="https://img2018.cnblogs.com/blog/1419513/201908/1419513-20190806230559540-204756891.png"> </div>

  • 容器化

    • 容器概念的出现是要比微服务晚不少的,近几年流行的docker,为微服务架构提供了有效的容器。资源的有效隔离是微服务的设计原则之一,而docker恰好可以实现。

      • 一般情况下一个容器一个服务
      • 容器的资源隔离(PID、IPC、UTS等)、限制(CPU、Mem等)。
      • 可扩展性、可移植性。

<div align="center"> <img style="max-width:80%;" src="https://img2018.cnblogs.com/blog/1419513/201908/1419513-20190807111659674-1353402736.png"> </div>

  

三、容器编排工具

  • 容器编排工具概念

    • 当容器数量达到一定规模,就需要编排工具去管理,就是容器生命周期管理工具。容器编排工具提供调度和管理集群的技术,提供用于基于容器应用可扩展性的基本机制。这些工具使用容器服务,并编排他们以决定容器之间如何进行交互。 ---百度百科
  • 容器编排工具的核心价值

    • 准备和部署容器
    • 容器的高可用和负载均衡
    • 应用规模的自动扩缩容
    • 底层硬件故障,能够把容器迁移到其他节点上,用户无感知。
    • 容器资源分配
    • 容器的注册与自动发现
    • 容器和宿主机的健康检查
    • 容器配置和存储管理
  • 容器编排工具种类

    • Docker Swarm:docker自己的容器编排工具。
    • Apache Mesos and Marathon:Mesos是一个数据中心的资源统一管控的工具,本身没有编排容器的功能,需要和Marathon结合使用。后来Apache Mesos自己说不但支持Marathon也支持Kubernetes,且当时docker也说不但原生支持docker swarm也支持k8s。。。。。k8s的地位已经显而易见了。
    • Kubernetes: 压轴滴啦,请看下篇文章k8s介绍

   

写作不易,转载请注明出处,谢谢~~

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!