Master
是Kubernetes Cluster
的大脑,运行着的Daemon
服务包括kube-apiserver
、kube-scheduler
、kube-controller-manager
、etcd
和Pod
网络(如flannel
等)。
API Server
提供HTTP/HTTPS RESTful API
,即Kubernetes API
。API Server
是Kubernetes Cluster
的前端接口,各种客户端工具(CLI
或UI
)及Kubernetes
其它组件可以通过它管理Cluster
的各种资源。
Scheduler
负责决定将Pod
放在哪个Node
上运行。Scheduler
在调度时会充分考虑Cluster
的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。
Controller Manager
负责管理Cluster
各种资源,保证资源处于预期的状态。Controller Manager
由多种Controller
组成,包括replication controller
、endpoint controller
、namespace controller
、serviceaccounts controller
等。
不同的controller
管理不同的资源。例如,replication controller
管理Deployment
、SatefulSet
、DaemonSet
的生命周期,namespace controller
管理Namespace
资源。
etcd
负责保存Kubernetes Cluster
的配置信息和各种资源的状态信息。当数据发生变化时,etcd
会快速地通知Kubernetes
相关组件。
Pod
要能够相互通信,Kubernetes Cluster
必须部署Pod
网络,flannel
是其中一个可选方案。
Node
是Pod
运行的地方,Kubernetes
支持Docker
、rkt
等容器Runtime
。Node
上运行的Kubernetes
组件有kubelete
、kube-proxy
和Pod
网络(如flannel
)。
kubelete
是Node
的agent
,当Scheduler
确定在某个Node
上运行Pod
后,会将Pod
的具体配置信息(image
、volume
等)发送给该节点的kubelete
,kubelete
根据这些信息创建和运行容器,并向Master
报告运行状态。
service
在逻辑上代表了后端的多个Pod
,外界通过service
访问Pod
。每个Node
都会运行kube-proxy
服务,它负责将访问service
的TCP/UDP
数据流转发到后端的容器。如果有多个副本,kube-proxy
会实现负载均衡。
Pod
要能够相互通信,Kubernetes Cluster
必须部署Pod
网络,flannel
是其中一个可选方案。