Last Updated on

系统学习kubernetes,请到《Kubernetes(k8s) 系列教程汇总篇》

K8S集群架构图如下:

    这是就是一个基础的k8s的架构图,整个k8s集群主要分为master节点和node节点和etcd存储集群,详细见下面解释:

ETCD集群

etcd是一款用于共享配置和服务发现的高效KV存储系统,具有分布式、强一致性等特点。在Kubernetes环境中主要用于存储所有需要持久化的数据。通常以集群方式部署,实现高可用,所有kubernets集群里的数据都是存储在etcd集群中。

etcd集群只能通过apiserver才能进行数据操作。

master节点

master节点为集群管理节点,默认不直接运行容器,master节点上运行着三个核心组件,分为为:

  • apiserver api服务
  • scheduler 调度器
  • controller-manager 控制器管理者

apiserver

是资源配额控制的入口,拥有完备的集群安全机制,提供了集群管理的REST API接口。所有对集群的操作,容器的调度,都是通过调用apiserver接口。同时提供其他模块之间的数据交互和通信的枢纽,其他模块通过apiserver查询或修改数据,只有apiserver才直接操作etcd。

整体来说,apiserver就是整个集群的入口。用户对集群的操作实际上就是对apiserver中不同接口的调用。对apiserver服务的理解和二次开发自定义接口也是从k8s用户到玩家的转变起点。


scheduler

全称为kube-scheduler,负责Kubernetes集群的具体调度工作,接收来自于管理控制器(kube-controller-manager)触发的调度操作请求,然后根据请求规格、调度约束、整体资源情况等因素进行调度计算,最后将任务发送到目标节点的kubelet组件执行。


controller-manager

全称为:kube-controller-manager,负责整个Kubernetes的管理工作,保证集群中各种资源的状态处于期望状态,当监控到集群中某个资源状态不正常时,管理控制器会触发对应的调度操作,主要由以下几部分组成:

节点控制器(Node Controller)
副本控制器(Replication Controller)
端点控制器(Endpoints Controller)
命名空间控制器(Namespace Controller)
身份认证控制器(Serviceaccounts Controller)

Node节点

Node节点也称work节点,是实际运行容器的工作节点。在Node节点上运行着Docker服务作为实际运行容器的引擎。除此之外,还运行着k8s的两个核心组件:

  • kubelet
  • kube-proxy

在Node节点上,会运行容器,但是在k8s中,将容器进行了封装,组成了k8s中的最小单位Pod,一个pod可以简单理解为就是一个容器,是k8s调度部署的最小单元。

虽然实际上pod在k8s中其实是多个容器的集合,在这个集合中的容器共享同一个hostname和网络,可以通过loaclhost直接通信。


kubelet

kubelet是Node节点上最重要的核心组件,每个node节点上都会启动kubelet服务,用来出来master节点下发到本节点的任务,管理Pod和其中的容器。可以把kubelet理解成【Server-Agent】架构中的agent,是Node上的pod管家。

kubelet还会在apiserver上注册节点信息,定期向Master节点汇报节点和节点上的Pod的健康情况和信息。


kube-proxy

kube-proxy主要负责Service Endpoint到POD实例的请求转发及负载均衡的规则管理。kube-proxy本身实际上并不负责请求转发和负载均衡,而时从kube-apiserver获取Service和POD的状态更新,生成对应的DNAT规则到本地的iptabels或ipvs,最终的转发和负载均衡动作由iptabels或ipvs来实施。

所以kube-proxy组件即使出现问题,已经更新的转发规则依然能够生效。

其他

除了master节点和node节点外,架构图中还出现来别的相关组件,这些官方提供的用于用户方便操作k8s集群的工具:

Kubectl

kubectl是一个用于操作k8s集群的命令行工具,利用kubectl的各种命令可以实现对集群的管理操作,实现原理是通过命令执行的参数或yml配置文件调用apiserver的不同接口传入不同的参数,来实现不同的功能。


Dashboard

k8s官方提供的web管理界面,通过这个web界面可以实现对集群的管理操作。实现原理同样是通过调用apiserver的接口来操作集群。

总结

ok,以上就是k8s集群的基础架构和核心组件,理解了k8s的基础架构后,对k8s就有一个整体的概念。

OK,基础架构就说到这里,有任何疑问,欢迎留言交流。