什么是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,具体的步骤如下:
- api server 接收到pod创建请求,将pod相关信息写入etcd
- scheduler通过api server检测到etcd中有待调度的pod,通过相关调度算法决定将pod分配到某台物理机X上,并把对应信息通过api server写回etcd
- 物理机X上的kubelet通过api server监测到有待启动的pod,调用物理机上的docker执行pod内容器并完成相关设置,接着将pod已运行的状态通过api server写回etcd
也可参考下面的漫画