浅析 Kubernetes 的架构与组件

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

架构组成

和大多数分布式系统一样,Kubernetes 集群至少需要一个主节点(控制平面)和多个计算节点(计算平面)。

image.png

主节点(Master):主要用于暴露API,调度部署和节点的管理

计算节点(Node):主要运行一个容器运行环境,一般是docker环境(类似docker环境的还有rkt);同时,也运行一个Kubernetes的代理(kubelet)用于和master通信;除此之外,计算节点也会运行一些额外的组件,像记录日志,节点监控,服务发现等。计算节点是k8s集群中真正工作的节点。

image.png

架构细分

Kubectl

客户端命令行工具,作为整个Kubernetes集群的操作入口。

Master 节点(默认不参加实际工作)

image.png

Api Server

在 Kubernetes 架构中承担的是“桥梁”的角色,作为资源操作的唯一入口,它提供了认证、授权、访问控制、API注册和发现等机制。客户端与k8s集群及K8s内部组件的通信,都要通过Api Server这个组件;

Controller Manager

负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。

  • Replication Controller:管理维护 Replication Controller,关联Replication Controller和Pod,保证 Replication Controller 定义的副本数量与实际运行的 Pod 数量一致
  • Deployment Controller:管理维护Deployment,关联 Deployment 和 Replication Controller,保证运行指定数量的Pod。当 Deployment 更新时,控制实现 Replication Controller 和 Pod 的更新
  • Node Controller:管理维护 Node,定期检查Node的健康状态,标识出(失效|未失效)的 Node 节点
  • Namespace Controller:管理维护 Namespace,定期清理无效的 Namespace,包括 Namesapce 下的API对象,比如Pod、Service等
  • Service Controller:管理维护 Service,提供负载以及服务代理
  • EndPoints Controller:管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints
  • Service Account Controller:管理维护 Service Account,为每个 Namespace 创建默认的 Service Account,同时为 Service Account 创建 Service Account Secret。
  • Persistent Volume Controller:管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定为释放的Persistent Volume执行清理回收
  • Daemon Set Controller:管理维护 Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod
  • Job Controller:管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目。
  • Pod Autoscaler Controller:实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。

Schedule

为新建立的 Pod 进行节点(node)选择(即,分配机器),负责集群资源的调度,按照预定的调度策略将 Pod 调度到相应的 Node 节点上;

扫描二维码关注公众号,回复: 13798061 查看本文章

Etcd

担任数据中心的角色,保存了整个群集的状态

Node 节点

image.png

Kubelet

负责维护容器的生命周期,同时也负责数据卷(Volume)和网络的管理,监控并上报节点资源使用情况。

Kubelet 是 Node 节点的代理,当Scheduler确定某个Node上运行Pod之后,会将Pod的具体信息(image,volume)等发送给该节点的Kubelet,Kubelet根据这些信息创建和运行容器,并向 Master 返回运行的状态。 同时,具备自动修复功能(如果某个节点中的容器宕机,它会尝试重启该容器,若重启无效,则会将该Pod杀死,然后重新创建一个容器)。

Kube-proxy

负责 Service Endpoint 到 POD 实例的请求转发及负载均衡的规则管理。

Service在逻辑上代表了后端的多个Pod。

当外界通过Service访问 Pod 提供的服务时,Service接收到的请求后就是通过kube-proxy来转发到 Pod 上的;

容器运行时环境(container-runtime)

负责本机的容器创建和管理工作;比如,Docker引擎。

image.png

Pod

Kubernetes 集群里面最小的单位。每个 Pod 里边可以运行一个或多个 Container (容器),如果一个Pod中有两个容器,那么容器的 USR(用户)、MNT(挂载点)、PID(进程号) 是相互隔离的, 而 UTS(主机名和域名)、IPC(消息队列)、NET(网络栈) 是相互共享的。

猜你喜欢

转载自juejin.im/post/7088104578717220878