学习和使用k8s已经近2年了,对理解的k8s核心概念做一个总结。
K8s是一个容器管理/编排系统,用于在集群中运行和管理容器化的应用。
K8s还可以:
- 自动伸缩(Autoscaling)
- 资源管理和调度
- 各种高级的部署方式(蓝绿部署、金丝雀部署)
- 批处理任务(cronjob)
- 访问控制
- 有状态服务(database, message queue)
- 利用operator实现自动化的复杂任务(数据库错误恢复)
架构图
下面的两幅架构图非常经典,第一幅说明了k8s的整体架构,第二幅更加详细的说明了每层架构之间的接口标准
Container Runtime Interface
除了docker,还有containerd, CRI-O等技术可选
Container Network Interface
有非常多的CNI实现,常见的Flannel,Calico等等
Open Container Initiative
The Open Container Initiative is an open governance structure for the express purpose of creating open industry standards around container formats and runtimes.
Controller Manager
用于确保资源对象的当前状态以匹配用户期望的状态,是当前状态不断的向期望状态和解来完成容器应用的管理。
Scheduler
用于决定将Pod绑定到哪个Node上,时序图如下:
可以自定义Scheduler来实现自定义调度,官方资料非常齐全,可以参考:
- Understanding the Kubernetes Scheduler
- scheduler extender - 一种自定义scheduler的方式