- 技术架构
- informer机制
- Master节点
- API Server
- etcd
- Scheduler:
- Controller Manager:
- Node节点
- kubelet
- Container Runtime
- Kube-proxy
- 常用资源对象
- Pod
- 创建过程
- pending排查方法
所有的组件都会与API Server交互
informer机制- 可以在本地查看etcd,减轻api-server的压力
- 资源对象有版本号
- 首先List下所有的资源,保留最新的版本号
- Reflector 包会和 apiServer 建立长连接,并使用 ListAndWatch 方法获取并监听某一个资源的变化。List 方法将会获取某个资源的所有实例,Watch 方法则监听资源对象的创建、更新以及删除事件,然后将事件放入到DeltaFIFO Queue中;
- 然后Informer会不断的从 Delta FIFO Queue 中 pop 增量事件,并根据事件的类型来决定新增、更新或者是删除本地缓存;
- 接着Informer 根据事件类型来触发事先注册好的 Event Handler触发回调函数,然后然后将该事件丢到 Work Queue 这个工作队列中。
资源curd的所有入口
etcd- 负责保存k8s集群的配置信息和各种资源的状态信息,当数据发生变化时,etcd会快速地通知k8s相关组件
- etcd提供了watch机制,键值发生变化会通知到API Server,并由其通过watch API向客户端输出。
- 资源调度,负责决定将Pod放到哪个Node上运行
- 负责管理集群各种资源,保证资源处于预期的状态。
- 生命周期功能:包括Namespace创建和生命周期、Event垃圾回收、Pod终止相关的垃圾回收、级联垃圾回收及Node垃圾回收等。
- API业务逻辑:由ReplicaSet执行的Pod扩展等,资源滚动更新等
- Node节点的Agent
- kubelet根据调度器信息创建和运行容器,并向master报告运行状态
- 容器运行时环境
- 下载镜像运行容器
- 提供服务发现和负载均衡
| 取值 | 描述 | 原因 |
|---|---|---|
| Pending(悬决) | Pod已被k8s接受,但有一个或者多个容器尚未创建亦未运行。 | 节点资源不足、Pod正在被调度、正在下载镜像 |
| Running(运行中) | Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。 | |
| Succeeded(成功) | Pod 中的所有容器都已成功终止,并且不会再重启。 | |
| Failed(失败) | Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。 | |
| Unknown(未知) | 因为某些原因无法取得 Pod 的状态 | 通常是因为与 Pod 所在主机通信失败 |
- 查看资源
- 检查 nodeSelector(标签选择)及 affinity(亲和性)的配置
- 检查 Node 是否存在 Pod 不能容忍的污点
- 检查 kube-scheduler 是否正常运行



