Kubernetes架构及核心部件( 二 )


2.1.4、调度器Kubernetes 系统上的调度是指为 API Server 接收到的每一个Pod 创建请求,并在集群中为其匹配出一个最佳工作节点 。kube-scheduler 是默认调度器程序,它调度时的考量因素包括:硬件、软件与策略约束、亲和与反亲和、污点等特征 。
2.2、Worker Node 组件Worker Node 组件是集群的体力劳动者,为了保证有足够的资源运行成百上千个容器化应用,一个集群通常会有多个 Worker Node。每个Node 会定期向 Master 报告自身的状态变动,并接受 Master 的管理 。
2.2.1、kubeletkubelet 是 Kubernetes 中最重要的组件之一,是运行于每个 Node之上的“节点代理”服务,负责接收并执行 Master 发来的指令,以及管理当前 Node 上 Pod 对象的容器等任务 。它支持从 API Server 接收 Pod 资源定义,并通过 容器运行时 去创建、启动和监视容器 。
kubelet 会持续监视当前节点上各Pod 的健康状态,并在任何 Pod 出现问题时将其重建 。同时也会及时跟Master通信,将自身情况上报于Master 。
2.2.2、容器运行时环境Pod 是一组容器集合,真正负责运行容器的是底层的 容器运行时。kubelet 通过 CRI(容器运行时接口)可支持多种类型的 OCI 容器运行时,例如 docker、containerd、CRI-O、runC、Kata等 。
2.2.3、kube-proxykube-proxy 是需要运行于集群中每个节点之上的服务进程,它把 API Server 上的Service 资源对象转换为当前节点上的 iptables 或(与)ipvs 规则,这些规则 能够将那些 发往Service 对象 ClusterIP 的流量 分发至它后端的 Pod 端点之上 。
kube-proxy是 Kubernetes的核心网络组件,它本质上更像是Pod 的代理及负载均衡器,负责确保集群中 Node、Service 和Pod 对象之间的通信 。
2.3、图解架构

Kubernetes架构及核心部件

文章插图
如上图所示:
  • 开发/运维人员可以通过kubectl命令,或者使用由Kubernetes提供的客户端SDK,调用apiserver提供的接口 。
  • 调用apiserver接口后,Kubernetes将资源定义信息存入到etcd数据库,资源定义信息就是期望状态 。
  • 收到定义信息后,controller-manager会努力将期望状态变为实际状态,并且会把实际状态写入到etcd数据库中 。
  • 如果定义信息没有被scheduler模块调度,那么实际状态就是待调度,当scheduler把pod调度到用户指定的节点时,这时实际状态则就是真实的Pod运行状态了 。
  • 当scheduler把 “pod应该调度到哪个节点” 的信息写入到etcd数据库时,这时节点上的kubelet会利用list-watch机制收到这个信息,然后kubelet根据收到的信息运行pod的定义信息,并且把pod运行起来 。
  • 每个节点上都会有kube-proxy服务,包括master节点,利用kube-proxy模块,可以作为集群的流量入口 。
  • 每个节点必须安装好容器运行时(比如docker、containerd),因为最终把容器进程跑起来的还是要靠 容器运行时。
3、核心扩展部件常用的核心扩展部件包括如下几个:
3.1、网络插件网络插件是必要部件,常用的有Flannel、Calico等 。我主要使用Calico ,云厂商一般是结合VPC有自己的一套实现 。
3.2、CoreDNSKubernetes使用DNS应用程序实现名称解析和服务发现功能,它自1.11 版本起默认使用 CoreDNS 。之前的版本中用到的是kube-dns 。
3.3、Dashboard一套WebUI,用于可视化 Kubernetes集群 。Dashboard可用于获取集群中资源对象的详细信息,例如集群中的 Node、Namespace、 Volume、ClusterRole 和Job 等,也可以创建或者修改这些资源对象 。
3.4、容器资源监控系统监控系统是分布式应用的重要基础设施,Kubernetes常用的指标监控部件有Metrics-Server、Prometheus 等 。
3.5、集群日志系统日志系统是构建可观测分布式应用的基础设施,有助于帮助开发人员发现和定位问题 。Kubernetes 常用的日志系统是由ElasticSearch、Fluentd 和 Kibana(EFK) 组合提供的解决方案,或者使用ELK等方案 。
3.6、Ingress ControllerIngress资源是 Kubernetes 将集群外部 HTTP流量引入到集群内部的资源类型,它仅用于控制流量的规则和配置的集合,它不能进行“流量穿透”,要通过Ingress控制器发挥作用 。常用的Ingress控制器有Nginx等 。
在以上这些附件中,CoreDNS、监控系统、日志系统和 Ingress 控制器,这种基础支撑类服务一般安装在集群内部 。而Dashboard是提高用户效率和体验的可视化工具,一般在集群外部独立安装 。


推荐阅读