Kubernetes(K8S)是一个为容器化应用提供集群部署和管理的开源工具,它具有以下特性:

  • 高可用,不宕机,自动灾难恢复
  • 灰度更新,不影响业务正常运转
  • 一键回滚到历史版本
  • 方便伸缩扩展(应用伸缩,机器加减),提供负载均衡
  • 生态完善

如果我们的应用跑在一台机器上,只需要一个docker+docker-compose就可以轻松应对,当应用需要跑在3,4台机器上时,或许我们一九可以每台机器都单独设置运行环境以及负载均衡,但是随着应用访问数不断增加,机器增加到成百上千台时,每一次的软件更新、版本回滚都要重复成败上千遍,这些无疑会浪费人生的大好时光。

这时,我们需要试用到K8S,它可以轻松管理百万千万台机器的集群,加机器、版本升级或回滚,都是一个命令就可以搞定的事情。

K8S集群架构

img

K8S的集群架构中,需要一个master节点,即主节点,它不需要很高的性能,不跑任务,所以通常一个就够用,当然,也可以开多个master节点来提高集群的可用度。

master节点下又很多的worker节点,即工作节点,它可以是虚拟机,也可以是物理计算机,因为程序任务会在这个节点里面跑,所以机器的性能要更好一点,通常worker节点会有很多,可以不断加新的worker节点,每一个worker节点都由master节点管理。

除此之外还有一个重要的概念

POD,也可以叫做豆荚,它是K8S调度和管理的最小单位,一个pod可以包含一个或多个容器,每个pod都有自己的虚拟IP,一个工作节点可以有多个pod,主节点会负责考量自动调度pod到哪个节点运行。

img

K8S常用组件如下:

kube-apiserver:API服务器,公开K8S的API

etcd:键值数据库,可以作为保存Kubernetes所有集群数据的后台数据库

kube-scheduler:调度Pod到哪个节点运行

kube-controller:集群控制器

cloud-controller:与云服务商交互