ac8e46c3c87c42b17f87890c49768c27.png

一个K8S集群由两部分构成 master节点和node节点。

master节点主要负责集群的控制,对pod进行调度,已经令牌管理等等功能。

node节点主要是负责干活,启动容器、管理容器。

master节点和node节点一般不要部署在一台机器上。

上面这个架构图,举例是一个master节点和2个node节点。但实际生产上,从高可用考虑,是需要部署多个master节点的。

将这张图抽象一下,大约是这个样子

944c95cac409180af8463146d42c6783.png

master节点中又有很多组件

3d1a7bae97f6fbbd3ff86d23a448fbe1.png

主要的是:

Api Server:对外暴露K8S的api接口,是外界进行资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;

scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;就是监视新创建的 Pod,如果没有分配节点,就选择一个节点供他们运行,这就是pod的调度

controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等,它们是处理集群中常规任务的后台线程

etcd:kubernetes的后端数据库,k/v方式存储,所有的k8s集群数据都存放在此处。保存了整个集群的状态

其中有kube-scheduler和kube-controller-manager两个组件是有leader选举的,这个选举机制是k8s对于这两个组件的高可用保障。

apiserver是可以水平扩展的。

Node节点的组件:

5234d27faabd8aaf295c6068cee502b8.png

kubelet负责维护容器的生命周期,同时也负责Volume(CSI)和网络(CNI)的管理;

kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

fluentd 是一个守护进程,它有助于提供集群层面日志 集群层面的日志

再来一张综合起来的图:

b16708327361ca5c7b64cc5d2d4d5588.png

解释图中的几个词:

CNI、CRI和CSI都是K8S的开放接口

Kubernetes作为云原生应用的基础调度平台,相当于云原生的操作系统,为了便于系统的扩展,Kubernetes中开放的以下接口,可以分别对接不同的后端,来实现自己的业务逻辑:

  • CRI(Container Runtime Interface):容器运行时接口,提供计算资源
  • CNI(Container Network Interface):容器网络接口,提供网络资源
  • CSI(Container Storage Interface):容器存储接口,提供存储资源

这几个属于进阶内容,新手先不用管。

另外附一个参考高可用部署架构:

52fe524e573350b67053eb16ffc2280c.png

在每台node节点上安装nginx,nginx通过内部的负载均衡将node节点上需要通过访问master,kube-apiserver组件的请求,反代到两台k8s-master节点上,这样就可以实现master节点的高可用,当任意一台master节点宕机后,也可以通过nginx负载均衡放文档另一个master节点上

Logo

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

更多推荐