403bf72dc2fcf6eafa368ae7a1fef8be.png

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

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

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

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

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

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

475b4c35daf0cc715ec9c90f88419acc.png

master节点中又有很多组件

70ae3e3e3a934aa7b485f059c28ed8b8.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节点的组件:

5e5e751d96fb14ec2ade0cc8d3134e34.png

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

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

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

再来一张综合起来的图:

b5c73830a5d78c40ec01eddb5d464721.png

解释图中的几个词:

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

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

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

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

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

562b2d5853d12be7187c06c494a0fc82.png

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

Logo

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

更多推荐