这篇文章是翻译官网:Kubernetes Componets
# 当你部署了kubernetes时,你就拥有了一个集群。
- 一个 Kubernetes 集群包含两种类型的资源: Master 调度整个集群,负责管理整个集群。 Master协调集群中的所有活动,例如调度应用、维护应用的所需状态、应用扩容以及推出新的更新。Node是一个虚拟机或者物理机,它在 Kubernetes 集群中充当工作机器的角色每个Node都有Kubelet, 它管理 Node 而且是 Node 与 Master 通信的代理。 Node 还应该具有用于处理容器操作的工具,例如 Docker 或 rkt 。处理生产级流量的 Kubernetes 集群至少应具有三个 Node
- 工作节点(worker nodes )上运行着 pods,控制平台(controller plane)负责管理集群中的 nodes 和 pods。在生产环境中,控制平台通常在多台计算机上运行,而集群通常也运行在多个 nodes 上,从而提供了很强的容错能力和高可用性。
- kubernetes集群所需的组件。分为控制平台组件(Control Plane Components)也叫 master 组件(master Components ) 和 节点组件(Node Components)
# 控制平台组件(master 组件)
- 控制平台中的组件对集群进行全局决策(比如:调度),并且监控和应对集群事件(比如:当 deployment 中的 replicas 字段发生变化时,创建/删除 pod)。
- 控制平台组件可以运行在集群中的任何一台机器上,但是为了简单,通常会在同一台物理机上部署所有的控制平台组件,同时要求用户的容器不能部署在控制平台组件所在的物理机上。
# kube-apiserver
- API server 是 kubernetes 平台组件之一,它将 kubernetes API 暴露给用户,用户就是通过和 kube-apiserver 交互实现控制集群的。在一个集群中可以部署多个 kube-apiserver,并在他们之间执行“负载均衡”。
# etcd
- 集群的所有数据都存储在 etcd 中,如果你选用 etcd 作为 kubernetes 的后端存储,请不要忘记对这些存储的数据做备份(back up)。 etcd 的更深入的信息可以参看官方文档:documentation
# kube-scheduler
- 控制平台组件监控新创建但还没有为其分配 node 的 pod,之后选择一个适合的 node为 pod 分配,这就是 调度器(scheduler)负责干的事情。
- 在做调度决策是所考虑的因素有:individual and collective resource requirements, hardware/software/policy constraints, affinity and anti-affinity specifications, data locality, inter-workload interference, and deadlines。
# kube-controller-manager
- 控制平台组件中运行着许多控制器进程(controller processes)。理论上来说,每一个控制器都是一个独立的进程,但为了降低复杂性,将所有的控制器进程都编译到同一个二进制文件中并且运行在用一个进程中。
这些控制器包括:
- Node controller:负责 node 发生故障时的通知和响应。
- Replication controller:负责保证系统中 pod 的数量与规定的数量一致。
- Endpoints controller:填充(Populates)后端对象(比如: joins Services 和 Pods)。
- Service Account & Token controllers:为新的命令空间创建默认账户和 API access tokens。
# cloud-controller-manager
https://kubernetes.io/docs/concepts/overview/components/#cloud-controller-manager
# 节点组件(Node Components)
- 节点组件在集群中的每个节点上都有运行,维护运行中的 pod,并提供 kubernetes 运行时环境。
# kubelet
- 集群中的每个 node 上都运行着一个代理(agent),它确保 pod 中的 container 是正在运行的。
- kubelet 读取一组 pod说明书(PodSpec),并确保 PodSpec中描述的 container 正在运行且运行状况良好。kubelet 只能管理 Kubernetes 创建的 container。
# kube-proxy
- kube-proxy 是个网络代理,集群中的每个 node 上都运行着它。kube-proxy 维护节点上的网络规则,这些网络规则允许集群内部或外部的网络会话与 pod 进行网络通信。
# Container runtime
- 这个组件是个软件,它负责跑 container,Kubernetes 支持的 container runtimes 有:Docker,containerd-CRI-O,和任何 Kubernetes CRI 的实现。
# 插件 (Addons)
- 插件(也被叫做附加组件)使用 Kubernetes 资源(比如:DamonSet、Deployment)来实现集群功能(当恰当的附加组件出现时,kubernetes 集群才能提供正常的集群功能)。因为这些插件提供集群功能,所以这些插件都在 kube-system命名空间中。Kubernetes中可以使用的插件。
# 总结
Kubernetes 集群的组件分为两部分:master 组件和 node 组件。
- master 组件包括:kube-apiserver、etcd、kube-scheduler、kube-controller-manager、kube-cloud-manger。
- node 组件包括:kubelet、kube-proxy、container-runtime。
Kubernetes主要由以下几个核心组件组成:
- etcd保存了整个集群的状态;
- apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
- controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
- kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
- Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
- kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;