<div style="font-weight: 400;">
<p>本章介绍kubernetes是什么,为什么要用它,具备什么价值。</p>
<p>kubernetes是容器的编排系统,能够方便地对容器进行管理,包括升级、扩缩容等等,并且还具备健康检查自动治愈等实用功能。
可以把kubernetes想象成一套容器管理系统,通过k8s(kubernetes的简称,k和s之间有8个字符)能够方便的分配资源、管理容器。</p>
<h2>软件发展历史</h2>
<p>要理解kubernetes出现的原因,就要理解它解决的问题。这些问题要从服务端软件发展的历史说起。</p>
<h3>微服务兴起</h3>
<p>最近几年服务架构从单体应用到微服务的转变已经成为不可扭转的趋势,对于比较复杂的系统,拆分成多个微服务,微服务直接通过rpc接口、消息接口通信,这样高内聚低耦合的设计,能够降低维护成本,各个微服务能够快速发展,并且微服务拆分后也方便拆分给不同的团队、人员维护,减少共同维护同一个服务的冲突和开销。
拆分成小的服务后,每个服务可以根据各自的需求决定部署需要的资源。</p>
<h3>微服务变多带来的运维成本增加</h3>
<p>但是微服务意味着部署复杂度的提升,每个微服务都需要单独部署、升级,每个微服务的负载可能各不相同,所以也需要单独进行扩容缩容。
服务部署升级扩容缩容,意味着我们需要给每个微服务分配机器资源,为了提高资源利用率,我们常常会在一个机器上部署多个微服务。但是在一个机器上部署多个微服务,可能出现CPU内存网络等资源争抢问题,每个微服务所需要的环境可能也各不相同,例如依赖不同版本的软件类库。这些问题导致了微服务的部署管理难度持续增大。</p>
<h3>容器和kubernetes来解决微服务的容器维护管理难题</h3>
<p>为了解决这些问题,出现了虚拟机、容器等解决方案。虚拟机可以想象成一个机器上的多个子机器,每个虚拟机具有自己独立的操作系统、文件、CPU内存网络资源,解决了资源争抢和环境冲突的问题。不过虚拟机的开销比较大,每个虚拟机内部都有一层操作系统,导致执行速度较慢、占用空间较大。linux中的容器技术,提供了更为轻量的解决方案,linux中通过namespace实现了进程间的资源视图隔离,通过cgroup实现了CPU内存网络等资源隔离能力,Docker在此基础上增加了可移植性等优化,通过Docker,我们可以方便的定位容器(镜像)、共享分发镜像、启动容器。</p>
<p>而Docker并没有提供完整的容器管理方案,比如资源调度、监控检查服务自动治愈、自动扩缩容等能力,最早由google开源的kubernetes就是为容器提供资源调度管理的工具,Docker是容器技术的一种实现。</p>
<p>通过kubernetes能够把应用和底层的基础设施进行解耦,对于应用来说,只需要关心需要什么样的资源、如何自动、有哪些依赖等,而不用关心底层是部署在云厂商还是物理机、虚拟机等各种情况。</p>
网友评论