个人笔记,原创,转载注明出处,如有不对欢迎指正
核心概念
-
架构设计
-
整体架构图
-
Master
-
概念
master负责整个集群的管理控制,用于监控、编排、调度集群中的各个工作节点。可以是多台,一般不作为node使用。master由如下组成构成。
-
API Server
API Server(kube-apiserver)进程为Kubernetes中各类资源提供了增删改查的HTTP REST接口。对于资源的任何操作,都要经过API Server来处理。除此之外,还提供了一系列认证授权机制。
-
etcd
etcd用于保存集群中所有的配置和各个对象的状态信息。
!!只有API Server进程才能直接访问和操作etcd。
-
调度器
调度器(kube-scheduler)是pod资源的调度器。用于监听最近创建但是还未分配node的pod资源,它会在综合考量各种因素后为pod分配node。
调度器执行的各项操作都是基于API Server。
-
控制器管理器
Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
-
-
Node
-
概念
node是集群中的各个工作节点,由master管理,提供运行容器所需的各种环境,对容器进行实际的控制,容器提供实际的应用服务。node由以下部分组成。
-
kubelet
kubelet是运行在node上的代理进程。它以PodSpec为单位来运行任务,PodSpec是描述Pod的YAML或JSON对象。kubelet会运行各种机制提供的PodSpec,并确保PodSpec中描述的容器健康运行。kubelet负责维护由kubernetes创建的容器的生命周期,也负责存储卷等资源的管理。
kubelet会定期调用API Server进程的REST接口上报自身状态,API Server会将状态信息更新到etcd中。kubelet也通过API Server的Watch接口监听Pod信息,从而对Pod进行管理。
-
kube-proxy
kube-proxy用于管理Service的访问入口,包括从集群内的其他Pod到Service的访问,以及从集群外访问Service。
-
容器运行时
容器运行时是负责容器运行的软件。kubernetes支持任何基于CRI实现的容器运行时。
-
-
组件间的交互流程
-
示例
以创建pod为例
-
流程图
-
过程分析
- kubectl命令转换为对API Server的调用。
- API Server验证请求并将其保存到etcd中。
- etcd通知API Server。
- API Server调用调度器。
- 调度器决定在哪个node运行Pod,并将结果返回给API Server。
- API Server将对应node保存到etcd中。
- etcd通知API Server。
- API Server在相应的node中调用kubelet。
- kubelet与容器运行时的API发生交互,与容器守护进程通信并创建容器。
- kubelet将Pod状态更新到API Server中。
- API Server把最新的状态保存到etcd中。
-
-
-
核心对象
-
Pod
-
结构图
-
概念
Pod是Kubernetes处理的最小单元。Pod通常表示单个应用程序,由一个或多个关系紧密的容器构成,这些容器拥有相同的生命周期,共享环境、存储卷和IP空间,作为一个整体被编排到node上。
-
-
控制器
-
概念
用户通过创建控制器来管理Pod。
-
ReplicationController和ReplicaSet控制器
ReplicationController或ReplicaSet控制器都是基于Pod模板进行创建,能够很好的支持水平伸缩。
ReplicationController可以保证集群中的Pod数量和配置中的一致,如果有Pod宕机,它可以自动启用新的Pod进行补充。ReplicationController还可以执行滚动更新,将一组Pod逐个切换到最新版本,从而最大限度地减少对应用程序可用性的影响。
ReplicaSet控制器是ReplicationController的另一个版本,具有副本筛选功能,但是无法滚动更新。
与Pod一样,这两种控制器都是很少直接使用的对象。
-
Deployment控制器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qyJx5JG4-1634528311928)(…/img/Deployment.png)]
Deployment控制器是最常用的工作负载对象之一。它以ReplicaSet控制器为基础,是更高级的概念,增加了更灵活的生命周期管理功能。
Deployment是更高级的对象,只需要简单更改配置文件,Kubernetes会自动调节ReplicaSet控制器,管理应用程序不同版本之间的切换,还可以实现自动维护事件历史记录及自动撤销功能。
-
StatefulSet控制器
StatefulSet控制器是提供了排序和唯一性保证的特殊Pod控制器。当有与部署顺序、持久数据或固定网络等相关的特殊需求时,可以使用它来进行更细粒度的控制。主要用于有状态的应用。
StatefulSet控制器为每个Pod创建唯一的、基于数字的名称,从而提供稳定的网络标识符,即时该Pod转移到另一个node,该名称也将持续存在。同样,当需要重新调度时,可以通过Pod转移持久性存储卷,即时删除了Pod,卷也会存在,可以防止数据意外丢失。
在部署或伸缩调节时,StatefulSet会根据名称中的标识符执行操作,从而可以对执行顺序进行控制。
Deployment控制器下的Pod提供无差别的服务,但是StatefulSet控制器下的Pod可以提供不同的服务。
-
DaemonSet控制器
DaemonSet控制器在集群的每个node上运行单一的Pod副本,它非常适合部署那些为node本身提供服务或执行维护的Pod。如日志收集和转发、监控以及运行以增加node本身功能为目的的服务。
-
Job控制器和CronJob控制器
以上的控制器都是长期运行的,拥有服务级的生命周期。
Job控制器运行特定任务,运行任务的容器完成工作后,Job控制器会成功退出。
CronJob控制器在Job控制器的基础上加了事件调度,可以在给定的时间点运行一个任务,也可以周期性地在给定时间点运行一个任务。
-
-
服务与存储
-
Service组件和Ingress
Service将相同功能的Pod在逻辑上组合到一起。
Pod无法以固定的IP地址和端口号提供服务,通过Service组件可以发布服务,提供稳定断点,可以跟踪路由到所有指定类型的后端容器。另外,Service组件可以根据需求来伸缩或替换后端的工作单元,无论Service路由到哪个Pod,IP地址都保持稳定。
Ingress用来整合Service组件,充当多个Service组件的统一入口。
-
存储卷和持久存储卷
存储卷(volume)允许Pod中所有容器共享数据,并在Pod终止前一直保持可用。但是Pod终止后,存储卷会被销毁。
持久存储卷(persistent volume)不依赖Pod的生命周期。它允许管理员为集群配置存储资源,用户可以为正在运行的Pod请求和生命存储资源。带有持久卷的Pod终止后,存储卷的回收策略将决定是保留还是删除数据。
-
-
资源划分
-
命名空间
对集群资源进行逻辑划分。
-
标签和注解
标签(label)是一种语义化标记,附加到kubernetes对象上,对它们进行标记或划分。形式是键值对,每个单元可以有多个标签,但是每个键只能有一个值。可以通过标签进行筛选。
注解(annotation)类似标签。但是相对标签,注解更灵活,可以包含少量的结构化数据。注解一般是用来向对象添加更多元数据,不用来筛选。
-
-