Master
集群的控制节点,在每个Kubernetes集群里都需要有一个Master来负责整个集群的管理和控制。
kube-apiserver
提供了HTTP Rest接口,是Kubernetes集群中所有资源增删改查的唯一入口
kubernetes Controller Manager
Kubernetes里所有资源对象的自动化控制中心,可以将其理解为资源对象的“大总管”。
kubernetes Scheduler
作用是将待调度的Pod(API新创建的Pod,ControllerManager为补足副本而创建的Pod等)按照待定的调度算法和调度策略绑定(Binding)到集群中的某个合适的Node上,并将绑定信息写入etcd中,
Node
kubelet
负责Pod对应容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。kubelet通过api server 监听到Kubernetes Scheduler产生的Pod绑定事件,然后获取对应的Pod清单,下载Image镜像,并启动容器。Kubelet在启动时,通过apiserver注册Node节点信息,并定时向Api Server发送节点的消息,API Server在接收到这些信息后,将这些信息写入Etcd。通kubelet的启动参数 --node-status-update-frequency 设置上报时间,缺省值为10s
kube-proxy
实现Kubernetes Service的通信与负责均衡机制的重要组件。它把api-server上的Service资源对象转换为当前节点上的iptables或者ipvs规则。
docker
Pod
静态Pod
由kubelet进行管理,且只能在该Node上运行,不会被记录到Etcd中,无法与Replication、Deployment或者Daemonset进行关联,并且kubelet无法对它们进行健康检查。
动态Pod
DownwardAPI获取Pod信息
目前DownwardAPI提供了以下变量。
- metadata.name:Pod的名称,当Pod通过RC生成时,其名称是RC随机产生的唯一名称。
- status.podIP:Pod的IP地址,之所以叫作status.podIP而非metadata.IP,是因为Pod的IP属于状态数据,而非元数据。
- metadata.namespace:Pod所在的Namespace。
对于无法改造为前台执行的应用,可以使用开源工具 Supervisor 辅助进行前台运行。Supervisor提供了一种可以同事启动多个后台应用,并保持Supervisor自身在前台执行的机制,可以满足Kubernetes对容器的启动要求。
