当前位置: 首页 > news >正文

K8S学习指南(60)-K8S源代码走读之API-Server

文章目录

    • API Server 的代码结构
    • API Server 的核心逻辑
      • 1. 请求处理流程
        • 1.1 HTTP 请求处理
        • 1.2 认证和授权
        • 1.3 API 版本处理
        • 1.4 资源路由
        • 1.5 资源处理
        • 1.6 响应生成
      • 2. 存储层
        • 2.1 存储接口定义
        • 2.2 存储实现
    • 二次开发扩展点
      • 1. 插件机制
        • 1.1 插件注册
        • 1.2 插件实现
      • 2. 自定义资源定义(CRD)
        • 2.1 CRD 定义
        • 2.2 CRD 控制器
      • 3. Admission 控制器
        • 3.1 Admission 控制器定义
        • 3.2 Admission 控制器实现
      • 4. 扩展 API Server 功能
        • 4.1 功能扩展配置
    • 结语

Kubernetes 源代码存放在 GitHub 上,你可以通过以下链接获取:Kubernetes GitHub 仓库。API Server 相关的代码位于 pkg/apiserverpkg/mastercmd/kube-apiserver 等目录中。

  • pkg/apiserver: 包含 API Server 的核心逻辑,如请求处理、认证、授权等。
  • pkg/master: 包含 Master 组件,其中 API Server 是 Master 的一个组成部分。
  • cmd/kube-apiserver: 包含 API Server 的入口文件,以及启动 API Server 所需的配置和参数。

API Server 的代码结构

pkg/apiserver 目录下,API Server 的代码结构主要分为以下几个模块:

  • apis: 包含了定义 Kubernetes API 资源的代码。
  • auth: 处理认证和授权的逻辑。
  • storage: 提供资源的存储和操作。
  • handlers: 包含了请求处理的具体实现。
  • options: 包含了 API Server 的配置选项。

API Server 的核心逻辑

1. 请求处理流程

1.1 HTTP 请求处理
  • 代码位置: pkg/apiserver/server.go
  • 主要功能: API Server 接收到来自客户端的 HTTP 请求。
1.2 认证和授权
  • 代码位置: pkg/auth
  • 主要功能: 对请求进行认证和授权,验证请求是否合法。
1.3 API 版本处理
  • 代码位置: pkg/server/request/request.go
  • 主要功能: 根据请求中的 API 版本信息,选择正确的版本进行处理。
1.4 资源路由
  • 代码位置: pkg/server/request/request.go
  • 主要功能: 根据请求的路径(例如 /api/v1/pods)确定请求的资源类型,并将请求路由到相应的资源处理器。
1.5 资源处理
  • 代码位置: pkg/server/handlers/
  • 主要功能: 调用相应的资源处理器对请求进行处理,包括读取、创建、更新和删除等操作。
1.6 响应生成
  • 代码位置: pkg/server/responsewriter/responsewriter.go
  • 主要功能: 根据处理结果生成 HTTP 响应返回给客户端。

2. 存储层

2.1 存储接口定义
  • 代码位置: pkg/storage
  • 主要功能: 定义了与后端数据存储(如 etcd)交互的存储接口。
2.2 存储实现
  • 代码位置: pkg/storage/etcd
  • 主要功能: 实现了 etcd 存储接口,用于与 etcd 进行交互,实现对资源的持久化存储。

二次开发扩展点

1. 插件机制

1.1 插件注册
  • 代码位置: pkg/master/plugin.go
  • 主要功能: 插件机制允许用户注册和使用插件,如认证插件、授权插件等。
1.2 插件实现
  • 代码位置: pkg/auth/plugins/
  • 主要功能: 用户可以实现自定义的插件,通过注册到 API Server 中,以扩展认证和授权逻辑。

2. 自定义资源定义(CRD)

2.1 CRD 定义
  • 代码位置: pkg/apis/
  • 主要功能: 用户可以定义自己的 API 资源类型,扩展 Kubernetes 中的资源模型。
2.2 CRD 控制器
  • 代码位置: pkg/controller/customresource/
  • 主要功能: 用户可以编写控制器来处理自定义资源的生命周期,定义其行为和状态。

3. Admission 控制器

3.1 Admission 控制器定义
  • 代码位置: pkg/admission/
  • 主要功能: 用户可以定义 Admission 控制器,拦截和修改资源的创建、修改、删除等操作。
3.2 Admission 控制器实现
  • 代码位置: pkg/admission/plugins/
  • 主要功能: 用户可以实现自定义的 Admission 控制器,通过注册到 API Server 中,以实现对资源的拦截和修改。

4. 扩展 API Server 功能

4.1 功能扩展配置
  • 代码位置: cmd/kube-apiserver/app/server.go
  • 主要功能: 用户可以通过修改 kube-apiserver 的启动参数或配置文件,为 API Server 添加额外的功能。

结语

以上是 Kubernetes API Server 部分的一个简要走读。为了深入理解和学习,建议直接查阅 Kubernetes 源代码,并深入阅读相关文档。希望这个指导对你进行 Kubernetes API Server 的源代码走读提供了帮助。

相关文章:

K8S学习指南(60)-K8S源代码走读之API-Server

文章目录 API Server 的代码结构API Server 的核心逻辑1. 请求处理流程1.1 HTTP 请求处理1.2 认证和授权1.3 API 版本处理1.4 资源路由1.5 资源处理1.6 响应生成 2. 存储层2.1 存储接口定义2.2 存储实现 二次开发扩展点1. 插件机制1.1 插件注册1.2 插件实现 2. 自定义资源定义&…...

基于深度学习的交通标志图像分类识别系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的交通标志图像识别系统。采用TensorFlow和Keras框架,利用卷积神经网络(CNN)进行模型训练和预测,并引入VGG16迁移学习…...

使用uni-app editor富文本组件设置富文本内容及解决@Ready先于onload执行,无法获取后端接口数据的问题

开始使用富文本组件editor时,不知如何调用相关API设置富文本内容和获取内容,本文将举例详解 目录 一.了解editor组件的常用属性及相关API 1.属性常用说明 2.富文本相关API说明 1)editorContext 2) editorContext.setContents…...

Spring高手之路-Spring事务的传播机制(行为、特性)

目录 含义 七种事务传播机制 1.REQUIRED(默认) 2.REQUIRES_NEW 3.SUPPORTS 4.NOT_SUPPORTED 5.MANDATORY 6.NEVER 7.NESTED 含义 Spring事务的传播机制是指在多个事务方法相互调用时,如何处理这些事务的传播行为。对应七种事务传播行为…...

简易机器学习笔记(八)关于经典的图像分类问题-常见经典神经网络LeNet

前言 图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉的核心,是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层次视觉任务的基础。图像分类在许多领域都有着广泛的应用,如:安防领域的人脸识别和…...

pytest conftest通过fixture实现变量共享

conftest.py scope"module" 只对当前执行的python文件 作用 pytest.fixture(scope"module") def global_variable():my_dict {}yield my_dict test_case7.py import pytestlist1 []def test_case001(global_variable):data1 123global_variable.u…...

系列五、搭建Naco(集群版)

一、搭建Naco(集群版) 1.1、前置说明 (1)64位Red Hat7 Linux 系统; (2)64位JDK1.8;备注:如果没有安装JDK,请参考【系列二、Linux中安装JDK】 (3&…...

JavaScript中alert、prompt 和 confirm区别及使用【通俗易懂】

✨前言✨   本篇文章主要在于,让我们看几个与用户交互的函数:alert,prompt 和confirm的使用及区别 🍒欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍒博主将持续更新学习记录收获&…...

【GoLang入门教程】Go语言几种标准库介绍(四)

编程语言的未来? 文章目录 编程语言的未来?前言几种库fmt库 (格式化操作)关键函数:示例 Go库标准库第三方库示例 html库(HTML 转义及模板系统)主要功能:示例 总结专栏集锦写在最后 前言 上一篇,我们介绍了debug、enco…...

面试算法:快速排序

题目 快速排序是一种非常高效的算法,从其名字可以看出这种排序算法最大的特点就是快。当表现良好时,快速排序的速度比其他主要对手(如归并排序)快2~3倍。 分析 快速排序的基本思想是分治法,排序过程如下…...

航空业数字化展翅高飞,开源网安专业服务保驾护航

​某知名航空公司是中国首批民营航空公司之一,运营国内外航线200多条,也是国内民航最高客座率的航空公司之一。在数字化发展中,该航空公司以数据驱动决策,通过精细化管理、数字创新和模式优化等方式,实现了精准营销和个…...

SpringBoot学习(三)-员工管理系统开发(重在理解)

注:此为笔者学习狂神说SpringBoot的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!! 本文是基于狂神老师SpringBoot教程中的员工管理系统从0到1的实践和理解。该系统应用SpringB…...

2 Windows网络编程

1 基础概念 1.1 socket概念 Socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。Socket本质上是一个抽象层,它是一组用于网络通信的API,包括了一系列…...

uniapp选择android非图片文件的方案踩坑记录

这个简单的问题我遇到下面6大坑,原始需求是选择app如android的excel然后读取到页面并上传表格数据json 先看看效果 uniapp 选择app excel文件读取 1.uniapp自带不支持 uniapp选择图片和视频非常方便自带已经支持可以直接上传和读取 但是选择word excel的时候就出现…...

前端发开的性能优化 请求级:请求前(资源预加载和预读取)

预加载 预加载:是优化网页性能的重要技术,其目的就是在页面加载过程中先提前请求和获取相关的资源信息,减少用户的等待时间,提高用户的体验性。预加载的操作可以尝试去解决一些类似于减少首次内容渲染的时间,提升关键资…...

B01、类加载子系统-02

JVM架构图-英文版 中文版见下图: 1、概述类的加载器及类加载过程 1.1、类加载子系统的作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engi…...

用PHP搭建一个绘画API

【腾讯云AI绘画】用PHP搭建一个绘画API 大家好!今天我要给大家推荐的是如何用PHP搭建一个绘画API,让你的网站或应用瞬间拥有强大的绘画能力!无论你是想要让用户在网页上绘制自己的创意,还是想要实现自动绘画生成特效,这…...

西安人民检察院 | OLED翻页查询一体机

产品:55寸OLED柔性屏 项目时间:2023年12月 项目地点:西安 在2023年12月,西安人民检察院引入了OLED翻页查询一体机,为来访者提供了一种全新的信息查询方式。 这款一体机采用55寸OLED柔性屏,具有高清晰度、…...

superset利用mysql物化视图解决不同数据授权需要写好几次中文别名的问题

背景 在使用superset时,给不同的人授权不同的数据,需要不同的数据源,可视化字段希望是中文,所以导致不同的人需要都需要去改表的字段,因此引入视图,将视图中字段名称设置为中文 原表数据 select * from …...

输入输出流

1.输入输出流 输入/输出流类:iostream---------i input(输入) o output(输出) stream:流 iostream: istream类:输入流类-------------cin:输入流类的对象 ostream类…...

IOS:Safari无法播放MP4(H.264编码)

一、问题描述 MP4使用H.264编码通常具有良好的兼容性,因为H.264是一种广泛支持的视频编码标准。它可以在许多设备和平台上播放,包括电脑、移动设备和流媒体设备。 使用caniuse查询H.264兼容性,看似确实具有良好的兼容性: 然而…...

Pycharm恢复默认设置

window 系统 找到下方目录-->删除. 再重新打开Pycharm C:\Users\Administrator\.PyCharm2023.3 你的不一定和我名称一样 只要是.PyCharm*因为版本不同后缀可能不一样 mac 系统 请根据需要删除下方目录 # Configuration rm -rf ~/Library/Preferences/PyCharm* # Caches …...

简单计算器实现,包括两个数

正在加载中... 简单计算器实现,包括两个数 ❤ 厾罗 简单计算器实现,包括两个数 以下代码用于实现简单计算器实现,包括两个数基本的加减乘除运算: 实例(Python 3.0) # Filename : test.py # author by : www.dida100.com …...

竞赛保研 基于机器视觉的手势检测和识别算法

0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng…...

Android App从备案到上架全过程

不知道大家注意没有,最近几年来,新的移动App想要上架是会非常困难的,并且对于个人开发者和小企业几乎是难如登天,各种备案和审核。但是到底有多难,或许只有上架过的才会有所体会。 首先是目前各大应用市场陆续推出新的声明,各种备案截止日期到12月就要到最后期限责令整改…...

用邮件及时获取变更的公网IP--------python爬虫+打包成exe文件

参考获取PC机公网IP并发送至邮箱 零、找一个发送邮件的邮箱 本文用QQ邮箱为发送邮箱,网易等邮箱一般也有这个功能,代码也是通用的。 第一步:在设置中找到账户,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击获…...

c++学习:函数模板+实战

目录 函数模板 思考 如果两个参数的类型不一样可以下面这么写 如果有指定返回参数可以下面这么写 实战 找出三个数中最大的一个 函数模板 实际上就是建立一个通用函数,其函数返回值类型和形参类型不具体指定,用一个虚拟的类型来代表template 是一个…...

three.js gltf后处理颜色异常(伽马校正)

效果&#xff1a; 应用了伽马校正&#xff0c;好像效果不明显 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"><…...

面试经典150题(55-58)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第二十四天&#xff09;完成了4道(55-58)150&#xff1a; 55.&#xff08;19. 删除链表的倒数第 N 个结点&#xff09;题目描述&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff…...

如果一个n位正整数等于其各位数字的n次方之和

❤ 厾罗 如果一个n位正整数等于其各位数字的n次方之和 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 5^3 3^3 153。 1000以内的阿姆斯特朗数&#xff1a; 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。 以下代码用于检测用户输…...

做国内打不开的网站/公众号推广

隐语义模型&#xff08;LFM&#xff09; 通过隐含特征(latent factor)联系用户兴趣和物品。比如给用户推荐图书的场景&#xff0c;隐含特征可以是图书的类别。通过降维的方法补全评分矩阵。 算法理论 用户uuu对物品iii的兴趣 r^uipuTqi∑k1Kpu,kqi,k\hat{r}_{ui}p^T_u q_i\s…...

群晖ds1817做网站/谷歌浏览器 安卓下载2023版官网

在Megaupload被关闭&#xff0c;资产扣押和关键成员被逮捕之后&#xff0c;为避免同样的命运&#xff0c;另一些文件共享网站开始采取行动调整其服务。Filesonic已经关闭了文件共享功能。Filesonic的声明称&#xff0c;用户只能上传和下载个人使用文件。在移除文件共享功能前&a…...

帝国cms 网站地图插件/上海网站推广广告

作者 | 杨秀璋责编 | 夕颜出品 | CSDN博客数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科&#xff0c;是数学形态学图像处理的基本理论。其基本的运算包括&#xff1a;腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、…...

企业做网站的流程/网络推广自学

flink打jar包&#xff1a;...

广州企业网站制作推广运营/新手怎样做网络推广

两个datetime进行时差计算报错&#xff1a; TypeError: cant subtract offset-naive and offset-aware datetimes原来是两个相减的时间时区不一致 # -*- coding: utf-8 -*-from datetime import datetime import pytznow1 datetime.now(tzpytz.UTC) print(now1) # 零时区的时…...

旅游做攻略的网站有哪些/营销型网站案例

使用mybatis的自动生成工具生成的主键id: <selectKey resultType"java.lang.Integer" keyProperty"id" order"AFTER" > SELECT LAST_INSERT_ID()</selectKey> 使用sharding-jdbc时候 一直提示 分片报错&#xff0c; 可以使用这种方…...