Kubernetes架构详解
Kubernetes是云原生非常核心的组件,是云计算的未来,也是大厂经常考察的内容,下面我们就全面来讲解Kubernetes架构
Kubernets
Kubernets是Google开发的容器编排平台,主要用于解决:容器编排、自动化部署、弹性伸缩…等场景,可以用于扩展和管理容器应用程序。
Kubernetes架构
Kubernetes架构,如下图所示:
从上图可以看出kubernetes组件由:Master主节点组件和Node工作节点组件组成,两种角色分别对应着控制节点和工作节点。
Kubernetes的核心组件部署在Master管理节点上,主要作用是作为Kubernetes的"大脑",控制整个分布式集群的运转,Node节点作为"四肢",执行Master的操作指令。
Kubernetes主节点组件
master主节点架构,如下图黄框所示:
从上图左侧黄框的Kubernetes主节点可以看出,Master节点由4个独立的组件组成,它们分别是:
1.apiserver:负责整个集群通信的API服务;
2.schedule:负责容器调度;
3.controller manager:负责维护集群状态的kube-controller-manager组件;
4.Etcd:复制保存集群所有的网络配置和对象的状态信息;
下面我们再详解一下主节点的4大组件。
1.API Server
API Server主要负责整个集群通信的API服务,API Server是Kubernetes控制程序的前端入口,也是用户唯一可以直接进行交互的Kubernetes组件。
作为集群管理的API入口操作不同资源对象,比如:Pod、Service、Deployment提供创建、认证、数据校验、状态变更等操作。
2.键值对存储etcd
Etcd是一种K-V存储仓库,Etcd是Kubernetes集群中的一个十分重要的组件。
Etcd主要用于保存集群所有的网络配置和对象的状态信息,无论是创建Deployment,还是创建Service,各种资源对象信息都会写入Etcd。
3.Controller Manager
Controller Manager是Kubernetes的"大脑",由一系列控制器组成,如下图所示:
Controller Manager主要包含以下8大组件:
1.Replication Controller:主要是保证集群中一个Replication Controller(RC),所关联的Pod副本数始终保持与预设值一致;
2.Node Controller:Node Controller通过API Server实时获取Node的相关信息,实现管理和监控集群中的各个Node节点;
3.ResourceQuota Controller:资源配额管理控制器,用于确保指定的资源对象在任何时候都不会超量占用系统上物理资源;
4.Namespace Controller:用户通过 API Server 可以创建新的 Namespace 并保存在 Etcd 中;
5.Service Account Controller:服务账号控制器,主要在命名空间内管理 ServiceAccount,以保证名为 default 的 ServiceAccount 在每个命名空间中存在;
6.Token Controller:令牌控制器 主要作用:监听 ServiceAccount 的创建和删除动作,以及监听 secret 的添加删除动作;
7.Service Controller:服务控制器 主要作用:监听 Service 的变化;
8.Endpoint Controller:负责生成和维护所有 Endpoint 对象的控制器;
注意:Controller Manager主要用于:实现 Kubernetes 集群故障检测,监控整个集群的状态,以及恢复的自动化工作。
4.Scheduler
Scheduler是Kubernetes的调度器,Scheduler是负责整个集群的资源调度的。
Scheduler调度程序会监视来自API Server的新请求,并将其分配给运行状态良好的节点,比如:对节点的质量进行排名,并将Pod部署到最适合的节点。
Kubernetes工作节点组件
工作节点组件,如下图所示:
上图右侧的绿色框就是Kubernetes工作节点,包含如下组件:
1.Kubelet
Kubelet是负责容器真正运行的核心组件,Kubelet是 Master 和 Node 之间的桥梁,接收 API Server 分配给它的任务并执行。
2.Container Runtime
Container Runtime 基于gRPC协议,定义了RuntimeService 和 ImageService两个gRPC服务,分别用于管理容器运行和镜像。
3.Kube-proxy
Kube-proxy是为了解决外部网络能够访问集群中容器提供的应用服务而设计的,Proxy运行在每个Node上。
kube-proxy确保每个节点都获得其IP地址,实现本地iptables和规则以处理路由和流量负载均衡。
4.Pod
Pod是Kubernetes中一个抽象化概念,由一个或多个容器组合在一起得共享资源,如下图所示:
Pod的设计理念是支持多个容器在一个Pod中共享网络和文件系统,可以通过进程通信和文件共享这种简单高效的方式组合完成服务。
在Kubernetes中,Pod是调度的最小元素,没有它容器就不能成为集群的一部分,主节点会把Pod调度到特定工作节点上,并与容器运行时协调以启动容器。