深入了解Kubernetes Kube apisserver的组件

深入理解Kube-APIServer kube-apiserver是Kubernetes最重要的核心组件之一,主要提供以下的功能 提供集群管理的REST API接口,包括认证授权、数据校验以及集群状态变更等 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd) apiserver 主要功能: 认证:使用集群判断身份。 鉴权:使用操作 CRUD,需要权限。 准入: 对于Kubernetes来说,需要一些额外的 actions,例如写入的值不规范,需要对其进行修改,修改后需要 校验。最后需要 限流,以防止恶意或者漏洞导致拥堵 Mutating Validating Admission 限流 APIServer对象的实现 访问控制 API Server 是所有组件交互的 中间枢纽。 Kubernetes API的每个请求都会经过多阶段的访问控制之后才会被接受,这包括认证、授权以及准入控制(Admission Control)等。 前面的是 Mutating Webhook,可以改一个对象的值,而 Validating Webhook 是不可以修改对象的值,不生效的。 更加详细的请求处理流程: 📜 对上面的解释: 如何处理API请求:API源码存在于kubernetes/pkg/api路径中,会处理集群内以及集群外客户端的请求。 那么,当HTTP请求到达Kubernetes API时,具体会发现什么呢?从上层看,会发现以下交互: HTTP请求由一串过滤器(filters)进行处理,这些过滤器注册在DefaultBuildHandlerChain()(参阅源码:https://github.com/kubernetes/apiserver中的config.go)中,并执行相应的处理。过滤器要么会将信息传递并附加到ctx.RequestInfo上(例如通过了身份认证的用户),要么返回适当的HTTP响应代码。 第二步,复用器(multiplexer,参阅源码:https://github.com/kubernetes/apiserver中的container.go)会根据HTTP路径,将HTTP请求路由到相应的处理程序(handler)。 第三步,routes(在routes/*中定义)会将处理程序(handler)与HTTP路径进行连接。 第四步,按照API Group进行注册的处理程序(参阅源码:https://github.com/kubernetes/apiserver中的groupversion.go和installer.go),会处理HTTP请求和上下文(context,如user、rights等),并将请求的对象从存储中传送出来。 注意,为了简洁,在上图中我们省略了HTTP路径中的$NAMESPACE字段。 现在我们进一步深入的对前文中提到的DefaultBuildHandlerChain()中建立的过滤器(filters)进行介绍: **WithRequestInfo():**在requestinfo.go中定义,将RequestInfo附加到上下文中。...

September 28, 2023 · 7 分钟 · 1326 字 · 熊鑫伟,我

深入了解Kubernetes等组件之ETCD

开始前 ETCD 是 Kubernetes 中所有组件中最难的,因为 ETCD 是有状态的,而不是无状态的。 我在之前做 k3s runtime 设计的时候,了解了一些关于 ETCD 和 Raft 算法相关的概念,作为前奏知识,请分别前往 ETCD 以及 Raft算法 进行前奏学习。 这一篇来深入并且贯穿的讲解 ETCD 和 Raft。并且站在 Kubernetes 的角度来深入 剖析 ETCD。 ETCD 介绍 Etcd是CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。 包含的功能以及特性 前奏 都有学过,看下 Kubernetes 最关心的 存储: 主要功能 基本的key-value存储 监听机制 key的过期及续约机制,用于监控和服务发现 原子Compare And Swap和Compare And Delete,用于分布式锁和leader选举 使用场景 可以用于键值对存储,应用程序可以读取和写入 etcd 中的数据 etcd 比较多的应用场景是用于服务注册与发现 基于监听机制的分布式异步系统 etcd 是一个键值存储的组件,其他的应用都是基于其键值存储的功能展开。 采用kv型数据存储,一般情况下比关系型数据库快。 支持动态存储(内存)以及静态存储(磁盘)。 分布式存储,可集成为多节点集群。 存储方式,采用类似目录结构。(B+tree) 只有叶子节点才能真正存储数据,相当于文件。 叶子节点的父节点一定是目录,目录不能存储数据。 服务注册与发现:...

September 26, 2023 · 6 分钟 · 1264 字 · 熊鑫伟,我

从理论到实践的项目管理打通

项目管理从理论到实践 理论介绍 瀑布模型: 敏捷模型: Scrum框架: 传统和敏捷差异 传统项目管理方法通常按照线性流程进行,通过预先制定的计划、监督和控制来实现项目目标。敏捷项目管理方法则更加灵活,通过迭代和持续的改进来实现项目目标。敏捷方法强调团队合作、适应变化、快速交付价值。 项目管理十大知识领域 项目管理的十大知识领域包括: 项目范围管理:确定项目的目标和边界,并确保项目在进行过程中不会超出这些范围。 项目时间管理:确定项目的时间计划,并确保项目按时完成。 项目成本管理:确定项目的预算,并确保项目在预算范围内完成。 项目质量管理:确保项目产品、服务或结果符合质量标准。 项目资源管理:确定项目所需的人员、设备和材料,并确保这些资源得到有效利用。 项目沟通管理:确定项目的信息需求,并确保项目信息得到有效传递。 项目风险管理:识别、评估和应对项目中的风险。 项目采购管理:确定项目所需的外部产品、服务或结果,并确保这些外部要素得到有效管理。 项目合同管理:管理项目中的合同,包括签订合同、监督合同履行和结束合同。 项目结项管理: 记录项目成果,并对项目进行评估,以确定未来项目的改进点。 项目管理的五大过程组 项目管理的五大过程组是: 开始过程组:在项目启动之前进行的活动,包括项目的范围、目标、预算和资源的确定。 规划过程组:为项目的成功制定计划,包括项目时间、成本、质量、资源、沟通、风险、采购和合同管理计划。 执行过程组:将计划转化为具体行动,通过项目团队的协作来完成项目的任务。 监控和控制过程组:监督项目的进展,并对变化做出反应,以确保项目按照计划完成。 关闭过程组:完成项目并归档项目文件。 监控负责产品项目的整个生命周期。 启动:项目如何高效启动 项目启动 上面我们看到项目管理的五大过程:启动、规划、执行、监控和收尾,毫无疑问的是,如何高效启动项目的重要性不容置疑~ 先看一下贯穿始终的一个表: 我们针对启动过程中的两个关键过程: 制定项目章程 识别干系人 应用 ⚠️ 项目启动阶段应该要做的事情包括: 确定项目目标:明确项目的目的、范围和成果,确保项目与组织的战略目标一致。 组建项目团队:确定项目团队的成员,并建立合适的团队沟通和协作结构。 制定项目章程:明确项目的责任和权限,并制定项目章程,确保项目运作有序。 确定项目预算:根据项目的范围和目标制定项目预算,并确定项目的资金来源。 确定项目时间表:根据项目的范围和目标制定项目时间表,并确定项目的里程碑。 评估风险: 评估项目中可能存在的风险,并制定风险应对策略。 获取资源: 确定项目所需的人员、设备和材料,并获取这些资源。 审批启动文件: 审批并签署项目启动文件,确保项目有了正式的许可开始进行....

May 7, 2023 · 3 分钟 · 624 字 · Xinwei Xiong, Me