Kubernetes——角色、组件、运行流程介绍

1.Kubernetes的角色分工

        k8s主要分为两大角色,一个角色是Master,另外一个角色是NodeMaster 负责整个集群的控制和管理,而 Node 则是负责执行和运行工作负载的节点。通过 Master 和 Node 的协作,K8s 实现了分布式应用的自动化部署、弹性伸缩、故障恢复等功能。其实Mster和Node这两个角色并不是官方的说法,但是已经成为了我们约定俗成的说法了

        一组工作机器,称为节点,会运行容器化应用程序。每个集群至少有一个工作节点。工作节点会托管Pod,而Pod就是作为应用负载的组件。控制平面管理集群中的工作节点和Pod。在生产环境中,控制平面通常跨多台计算机运行,一个集群通常运行多个节点,提高容错性和高可用性。Pod是k8s的最小部署单元。

2.Kubernetes的架构

        2.1Master中的组件

        kube-apiserver

        API 服务器是 Kubernetes 控制平面(俗称Master)的组件, 该组件负责公开了 Kubernetes API,负责处理接受请求的工作。 API 服务器是 Kubernetes 控制平面的前端

        API服务器为K8s集群资源操作提供唯一入口,并提供认证、授权、访问控制、API 注册和发现机制。

        etcd

         etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库(例如 Pod 的数量状态命名空间等)、API 对象和服务发现细节。 在生产级k8s中etcd通常会以集群的方式存在,安全原因,它只能从 API 服务器访问。

       kube-scheduler

        kube-scheduler 负责监视新创建、未指定运行Node的 Pods,决策出一个让pod运行的节点。

        例如,如果应用程序需要 1GB 内存和 2 个 CPU 内核,那么该应用程序的 pod 将被安排在至少具有这些资源的节点上。每次需要调度 pod 时,调度程序都会运行。调度程序必须知道可用的总资源以及分配给每个节点上现有工作负载的资源。

        kube-controller-manager

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

        k8s在后台运行许多不同的控制器进程,当服务配置发生更改时(例如,替换运行 pod 的镜像,或更改配置 yaml 文件中的参数),控制器会发现更改并开始朝着新的期望状态工作。

        从逻辑上讲,每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。

        有许多不同类型的控制器。以下是一些例子:

  • 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应
  • 任务控制器(Job Controller):监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
  • 端点分片控制器(EndpointSlice controller):填充端点分片(EndpointSlice)对象(以提供 Service 和 Pod 之间的链接)。
  • 服务账号控制器(ServiceAccount controller):为新的命名空间创建默认的服务账号(ServiceAccount)。

        cloud-controller-manager

        云控制器管理器使得你可以将你的集群连接到云提供商的 API 之上, 同时可以将云平台交互组件与本地集群中组件分离。

        下面的控制器都包含对云平台驱动的依赖:

  • 节点控制器(Node Controller):用于在节点终止响应后检查云提供商以确定节点是否已被删除
  • 路由控制器(Route Controller):用于在底层云基础架构中设置路由
  • 服务控制器(Service Controller):用于创建、更新和删除云提供商负载均衡器

        2.2Node中的组件

        kubelet

        一个在集群中每个node上运行的代理。 它保证容器都 运行在 Pod 中。kubelet 定期接收新的或修改过的 pod 规范 PodSpecs(主要通过 kube-apiserver)并确保 pod 及容器健康并以所需状态运行。该组件还向 kube-apiserver 报告运行它的主机的健康状况。

        kubelet 不会管理不是由 Kubernetes 创建的容器。

        kube-proxy

        kube-proxy是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。用于处理单个主机子网划分并向外部世界公开服务。它跨集群中的各种隔离网络将请求转发到正确的 pod/容器。

        kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。

        如果操作系统提供了数据包过滤层并可用的话,kube-proxy 会通过它来实现网络规则。否则, kube-proxy 仅转发流量本身。

        容器运行时(Container Runtime)      

        容器运行时负责创建容器运行环境。

        Kubernetes 支持多个容器运行时: Docker(即将被废弃)、containerd、CRI-O以及任何实现Kubernetes CRI(容器运行环境接口)的runtime。

        3.Kubernetes运行流程Kubernetes 的组件

Kubernetes 的组件

  • 1.kubectl 客户端首先将CLI命令转化为RESTful的API调用,然后发送到kube-apiserver。
  • 2.kube-apiserver 在验证这些 API 调用后,将任务元信息并存储到etcd,接着调用 kube-scheduler 开始决策一个用于作业的Node节点。
  • 3.一旦 kube-scheduler 返回一个适合调度的目标节点后,kube-apiserver 就把任务的节点信息存入etcd,并创建任务。
  • 4.此时目标节点中的 kubelet正监听apiserver,当监听到有新任务需要调度到本节点后,kubelet通过本地runtime创建任务容器,执行作业。
  • 5.接着kubelet将任务状态等信息返回给apiserver存储到etcd。
  • 6.这样我们的任务已经在运行了,此时control-manager发挥作用保证任务一直是我们期望的状态。 

         以上就是关于k8s角色、组件以及运行流程的介绍

猜你喜欢

转载自blog.csdn.net/m0_53891399/article/details/132439066
今日推荐