master的工作流程图
Kubernetes Client将请求发送给API server。
API Server根据请求的类型,比如创建Pod时storage类型是pods,然后依此选择何种REST Storage API对请求作出处理。
REST Storage API对的请求作相应的处理。
将处理的结果存入高可用键值存储系统Etcd中。
在API Server响应Kubecfg的请求后,Scheduler会根据Kubernetes Client获取集群中运行Pod及Minion/Node信息。
依据从Kubernetes Client获取的信息,Scheduler将未分发的Pod分发到可用的Minion/Node节点上。
1、API Server[资源操作入口]
第一,是为了保证集群状态访问的安全。
第二,是为了隔离集群状态访问的方式和后端存储实现的方式:API Server是状态访问的方式,不会因为后端存储技术etcd的改变而改变。
更多API Server信息请参考:Kubernetes核心原理(一)之API Server
2、Controller Manager[内部管理控制中心]
endpoint-controller:定期关联service和pod(关联信息由endpoint对象维护),保证service到pod的映射总是最新的。
replication-controller:定期关联replicationController和pod,保证replicationController定义的复制数量与实际运行pod的数量总是一致的。
更多Controller Manager信息请参考:Kubernetes核心原理(二)之Controller Manager
3、Scheduler[集群分发调度器]
实时监测Kubernetes集群中未分发和已分发的所有运行的Pod。
Scheduler也监测Minion节点信息,由于会频繁查找Minion节点,Scheduler会缓存一份最新的信息在本地。
最后,Scheduler在分发Pod到指定的Minion节点后,会把Pod相关的信息Binding写回API Server。
更多Scheduler信息请参考:Kubernetes核心原理(三)之Scheduler
kubelet结构图
1、Kubelet[节点上的Pod管家]
定时上报本Node的状态信息给API Server。
kubelet是Master API Server和Minion之间的桥梁,接收Master API Server分配给它的commands和work,与持久性键值存储etcd、file、server和http进行交互,读取配置信息。
具体的工作如下:
设置容器的环境变量、给容器绑定Volume、给容器绑定Port、根据指定的Pod运行一个单一容器、给指定的Pod创建network 容器。
同步Pod的状态、同步Pod的状态、从cAdvisor获取Container info、 pod info、 root info、 machine info。
在容器中运行命令、杀死容器、删除Pod的所有容器。
2、Proxy[负载均衡、路由转发]
Proxy不但解决了同一主宿机相同服务端口冲突的问题,还提供了Service转发服务端口对外提供服务的能力,Proxy后端使用了随机、轮循负载均衡算法。
3、kubectl(kubelet client)[集群管理命令行工具集]
通过客户端的kubectl命令集操作,API Server响应对应的命令结果,从而达到对kubernetes集群的管理。