kubernetes集群组件介绍

一个Kubernetes集群,通常是由多个工作节点Worker Node加上一个集群控制者Master,以及集群状态存储系统etcd组成。

Master Node

Master节点主要由负责 API 服务的apiserver、负责容器编排的controller-manager、以及负责调度的scheduler组成。整个集群的持久化数据,由apiserver处理后,交由etcd进行管理。

  • API server负责Restful风格的kubernetes API,负责接收、响应、校验发入集群的所有REST请求。

  • Controller Manager 负责维护集群的状态,包括很多资源的控制器,是保证 Kubernetes声明式 API 工作的大脑,比如故障检测、自动扩展、滚动更新等。

  • Scheduler负责管理集群内各节点的资源状态。创建Pod时,根据合适的资源做出调度决策。在创建PodEvents中可以看到,第一个Event便是Schedule

1
2
3
4
5
6
7
8
9
10
kubectl describe pod image-sign-deployment-59948dd446-8n8l7

...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 108s default-scheduler Successfully assigned default/image-sign-deployment-59948dd446-8n8l7 to node2
Normal Pulled 107s kubelet, node2 Container image "image-sign" already present on machine
Normal Created 107s kubelet, node2 Created container image-sign
Normal Started 106s kubelet, node2 Started container image-sign

Worker Node

worker Node中,最重要的则是kubelet它所负责的是与容器运行时打交道(如docker项目)。他们交互所依赖的,是一个称作CRI的远程调用接口,这个接口定义了容器运行时的各项核心操作。如启动一个容器所需的所有参数。

也正是因为CRI的存在,kubernetes并不关系用户部署的容器运行时是Docker亦或是其它的(但默认的是Docker),只要这个容器运行时能运行标准的镜像,它就能通过实现CRI接入到Kubernetes中。

具体的容器运行时,像Docker则一般通过OCI这个容器运行时规范,与底层的Linux操作系统进行交互。即:将CRI请求翻译成对Linux系统的调用,操作系统的NameSpaceCGroups等。

此外,kubelet 还通过 gRPC 协议同一个叫作 Device Plugin 的插件进行交互。这个插件,是 Kubernetes 项目用来管理 GPU 等宿主机物理设备的主要组件,也是基于 Kubernetes 项目进行机器学习训练、高性能作业支持等工作必须关注的功能

kubelet 的另一个重要功能,则是调用网络插件和存储插件为容器配置网络和持久化存储。这两个插件与 kubelet 进行交互的接口,分别是 CNI(Container Networking Interface)CSI(Container Storage Interface)

kube-proxy,它所负责的是能够按需为Service资源对象创建iptablesipvs规则。从而捕获访问当前访问Service的请求,将其转发至正确的Pod对象

系统组件图

image

核心附件

kubernetes还需要依赖一组称为“附件”的组件来提供完整的功能。这些组件通常由第三方提供,运行在kubernetes集群上。

  • CoreDNSKubernetes集群中调度运行提供DNS服务的Pod,同一集群中的其他Pod可使用此DNS服务实现service namecluster IP的解析 。DNS服务是Kubernetes赖以实现服务发现的核心组件之一,默认情况下只会创建一个DNS Pod,在生产环境中我们需要对coredns进行扩容。 有两种方式:

    1
    2
    手动扩容 kubectl –namespace=kube-system scale deployment coredns –replicas=
    使用 DNS Horizontal Autoscaler
  • Kubernetes Dashboard: 一个Web UI,用于管理kubernetes集群中应用,以及集群自身。

  • Ingress Controller: 暂时没学到相关内容。之后再来补充。

image

0%