目录

控制面板组件(Master)

kube-apiserver:

kube-controller-manager:

kube-scheduler:

etcd

节点组件(node)

kubelet:

kube-proxy:

container runtime:

pod:

附加组件(可选安装)


控制面板组件(Master)
kube-apiserver

API服务器是k8s控制平面(也就是所谓的Master节点)的组件,该组件负责接收来自HTTP请求的工作,以RESTful API接口的方式提供给外部用户或内部组件的调用,是集群内各个模块或组件之间数据交互和通信的中心枢纽;k8s组件之间的通信是基于apiserver的watch list机制进行通信的。

kube-controller-manager:

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

这些控制器包括:

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

他是负责决定将pod调度指定的node上的组件,在我们提交创建pod请求后,它会基于它自身的raft算法、yaml文件中定义的期望(spec字段)、污点(taint)、亲和性(affinity)以及yaml文件中(内存限制),进行打分筛选,最终选择合适的node节点。

etcd

定义:etcd是一个支持分布式键值型的存储系统,基于Go语言实现。可以部署在master中也可单独拿出来做etcd集群,主要用于存储集群中的状态信息(如各个节点的信息、健康状态,pod信息、pod状态等)。

 特点:

  • 简单:支持rest风格的HTTP+JSON API
  • 安全: HTTPS方式的访问
  • 快速:支持并发1k/s的写操作
  • 可靠:支持分布式架构搭建,
节点组件(node)
kubelet:

运行在每个node节点上,相当于master在node节点上的代理(本质是一个进程),代理嘛,就是底下给master干活的,接收master下发的任务、平时还管理pod及pod里面的container。每个node节点上的kubelet都会在APIserver上注册自身的信息,定期向自己的老大master汇报工作(节点信息,节点资源使用情况),并通过cAdvisor监控容器和节点资源。

kube-proxy:

运行在每个node节点上,我的理解是它在网络层面上介于service与后端pod之间,外界通过service访问到pod提供的服务时,service接收到请求后就是通过kube-proxy来转发到后端pod的。

container runtime:

负责镜像管理以及pod的真正运行,是管理容器的软件(技术),比如docker(当然目前不单单只有docker一种容器技术)。

pod:

英文原译:豌豆荚,是k8s集群中最小的单位,每个pod里面可以运行一个多个container,简单来说,pod就是一个豌豆荚,豌豆就是pod中的container。

附加组件(可选安装)

        kube-dns(core-dns):负责为整个集群提供 DNS 服务

        Ingress controller:用于实现外部访问集群内部服务的功能,具体通过解析和配置ingress资源(ingress-nginx),动态的将外部请求路由到相应地后端服务

        Prometheus:适用于监控k8s集群的一款监控软件

        Dashboard:提供GUI界面

        Federation:提供跨可用区的集群(集群间的调度)

        Fluentd-elasticsearch:提供集群日志采集、存储与查询


声明:以上内容均是个人理解,详情可参考k8s权威指南

        

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐