什么是kubernetes

Kubernetes(简称k8s)是谷歌开源的容器编排管理工具,可以将docker理解为基础设施,而k8s则是用基础设施之上的上层建筑,并能够实现对docker的各种管理。它主要提供以下功能:

  • 自动花容器部署和复制
  • 支持容器服务的自动伸缩
  • 将容器组织成组,并提供容器间的负载均衡
  • 方便对容器进行管理,以及对应用程序的管理(如滚动更新等)

k8s包含以下几个核心组件:

kubelet

kubelet是与机器上的pod具体交互的组件,它的主要职责是在物理机上启动相关容器并保证它们的运行。kubelet运行的单元是pod;pod是一组共享资源的容器集合,pod有其独立IP,pod中的容器共享pod目录卷。

etcd

etcd担当k8s中数据库的角色,用于k8s中所有信息的存储与更新。

api server

api server是k8s的核心,所有操作都是通过api server来执行,api server将操作相关信息更新到etcd中去,是系统中唯一与etcd直接交互的k8s组件。

scheduler

Scheduler负责完成集群中pod的调度,通过预选与优选两阶段调度算法的打分得出pod所应调度的最佳节点

k8s运行pod步骤

一图胜千言,运行一个pod的时序图如下图所示,任何时候都需要注意一点:只有api server直接与etcd交互,其他组件均通过api server与etcd交互,对于执行一个pod,具体的步骤如下:

  1. api server 接收到pod创建请求,将pod相关信息写入etcd
  2. scheduler通过api server检测到etcd中有待调度的pod,通过相关调度算法决定将pod分配到某台物理机X上,并把对应信息通过api server写回etcd
  3. 物理机X上的kubelet通过api server监测到有待启动的pod,调用物理机上的docker执行pod内容器并完成相关设置,接着将pod已运行的状态通过api server写回etcd

1

也可参考下面的漫画

2