Kubernetes(K8s)_17_Kubernetes扩展

Kubernetes(K8s)_17_Kubernetes扩展

  • Kubernetes扩展
    • CustomResuorceDefinition
    • 自定义API Server
    • Operator

Kubernetes扩展

Kubernetes扩展: 不同角度实现对Kubernetes功能的增加/增强

  1. 内部组件: API Server、CRD、Operator、授权和准入控制
  2. kubelet: CRI、CNI、CSI、Device Plugins
  3. 调度: 调度插件、调度框架

CustomResuorceDefinition

CustomResuorceDefinition(CRD): 定义自定义资源类型

  1. 创建CRD时会在API Server上注册生成GVR类型URL端点
  2. CRD支持定义验证, 通过OpenAPI模式声明验证(仅支持部分)
  3. CustromResource(CR): 用户通过CRD创建的自定义资源类型

Resource(资源): API Server存储对应类别的API对象集合的端点

  1. 本质: API Server中以结构化存储数据的集合
  2. Kubernetes中所有均基于资源实现, 且CRD也属于种资源类型

如: CRD和CR的关系

//   +---------------------+
//   |    CustomResource   |
//   |                     |
//   +                     v
//  CRD +---yaml---> 自定义资源类型 +---yaml---> 自定义资源实例 

CRD的常用创建格式:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: <String>                         # CRD名称
spec:
  conversion: <Object>                   # 不同版本间的格式转换
    strategy: <String>                   # 不同版本间的自定义资源转换策略(None或Webhook)
    webhook: <Object>                    # 调用Webhook的方式
  group: <String>                        # 所属API Group
  names: <Object>                        # 自定义资源
    categories: <[]String>               # 自定义资源所属的分组类别
    kind: <String>                       # 自定义资源的类型名称(必选)
    plural: <String>                     # 自定义资源的API路径和复数形式的名称
    shortName: <[]String>                # 自定义资源的类型的缩写名称
    singular: <String>                   # 自定义资源的类型名称的单数形式(全小写)
  preserveUnknownFields: <Boolean>       # 预留字段
  scope: <String>                        # 作用域(Cluster或Namespaced)
  versions: <[]Object>                   # 版本号定义
    additionalPrinterColumns: <[]Object> # 返回的额外信息(kubectl get命令的返回结果)
    - name: <String>                     # 额外信息名称
      type: <String>                     # 额外信息的数据类型
      jsonPath: <String>                 # 对应数据格式的字段
      description: <String>              # 额外信息的描述
    name: <String>                       # 自定义资源的版本(如: v1alpha1和v1等)
    schema: <Object>                     # 数据格式(必选, 参考对应文档编写)
      openAPIV3Schema: <Object>          # 校验字段的 schema 对象
    served: <Boolean>                    # 是否允许REST API调用(必选)
    storage: <Boolean>                   # 是否存储于Etcd
    subresources: <Object>               # 定义子资源
      scale: <Object>                    # 启用scale子资源(通过 autoscaling/v1.Scale 发送负载)
        labelSelectorPath: <String>      # 引用status中的标签选择器字段(jsonPath格式)
        specReplicasPath: <String>       # 引用数据格式的字段(jsonPath格式, 代表期望副本数)
        statusReplicasPath: <String>     # 引用status中的字段(jsonPath格式, 代表当前副本数)
      status: <Map[String]String>        # 启用status子资源(生成 /status 端点, 由集群维护)
  1. 自定义资源类型名称必须是合法的DNS子域名
  2. 自定义资源通过spec.versions[].schema.openAPIV3Schema字段指定自定义配置字段
  3. 自定义资源中包含子资源时必须有对应的controller实现, 且scale必须搭配status字段才有效

自定义API Server

自定义API Server: 自定义扩展的API资源

  1. 自定义API Server需维护其使用的存储系统(集群或外置)
  2. 访问方式: 独立运行暴漏端点、API Server聚合
  3. 适用于添加新的核心类型

API Aggregation(AA): 聚合不同的API Server以提供统一的访问端点和管理接口

  1. 本质: 原API Server内置的kube-aggregator向特定URL发送请求获取功能
  2. 被聚合的自定义API Server都会在原API Server上注册个URL(请求代理)

如: API Server请求处理

image

// 建议以Pod形式托管部署自定义API Server, 存储使用外置Etcd


API Service: 管理API群组版本(实现不同版本的统一访问入口和配置)

  1. API群组版本(API Group Version):API资源分组和版本控制(便于扩展)
  2. 每个APIServer都对应个API群组版本

APIService的常用创建格式:

apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  name: <String>
spec:
  grup: <String>                 # API群组版本名称
  grupPriorityMinimum: <Integer> # API群组版本的最低优先级
  version: <String>              # 注册版本
  versionPriority: <Integer>     # 注册版本在API群组版本的优先级
  service: <Object>              # 自定义API Server对应的Service(必须为443)
    name: <String>
    namespace: <String>
  caBundle: <String>               # PEM编码的CA打包信息(验证APIService证书)
  insecureSkipTLSVerify: <Boolean> # 是否禁止TLS证书认证
  1. APIService名称必须是合法的DNS子域名
  2. 当优先级相同时, 会根据字符集排序

如: API群组版本

image


Operator

Operator: 管理CRD的专用Controller

  1. 功能: 实现资源的status中的实际状态向spec中的期望状态收敛
  2. 本质: 监控资源状态变动, 根据变动执行对应操作以确保向期望状态收敛

如: Controller处理流程

image

  1. Controller通过集群的Informer/SharedInformer注册监视特定资源类型下的所有资源
  2. 当资源发生事件时都会发送至Controller的Workqueue等待处理
  3. Controller调用对应事件的函数处理

// SharedInfomer: 共享缓存, 但无法跟踪每个Controller(Controller必须自行维护Workqueue和重试机制)


Controller都需遵循以下3个机制:

  1. 声明式API: 仅需请求期望状态, 而非执行特定操作就可完成请求
  2. 异步处理: 请求在API Server获取并存储后即返回, 无需等待实际处理响应
  3. 水平触发: 资源多次变更时, 仅根据最近次变动作为依据处理(仅依赖当前状态)

如: client-go监控处理流程

image

  1. Informer通过Reflector调用API Server的ListingWatchAPI获取并监视所有资源
  2. 获取后交由Indexer索引后缓存于本地(默认namespace/name), 并根据变动事件同步更新本地缓存
  3. 发生变动事件时会同时发送至各个Controller的Workqueue, 并调用Resouce Event Handler回调函数
  4. 可自定义Indexer以实现不同方式的索引(需在创建Informer/SharedInformer时指定)

// Informer为确保缓存的有效性, 会以resyncPeriod周期强制更新本地缓存


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/223124.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux环境变量与命令行参数

Linux环境变量与命令行参数 一.命令行参数1.语法2.应用1:简易计算器 二.环境变量1.环境变量的概念2.环境变量的作用3.进一步理解环境变量的作用4.常见环境变量5.导出环境变量(添加环境变量)6.环境变量的特性7.另一种获取环境变量的方式8.小功能:用于身份验证的代码9.补充:第三种…

Elasticsearch:什么是机器学习?

机器学习定义 机器学习 (ML) 是人工智能 (AI) 的一个分支&#xff0c;专注于使用数据和算法来模仿人类的学习方式&#xff0c;并随着时间的推移逐渐提高准确性。 计算机科学家和人工智能创新者 Arthur Samuel 在 20 世纪 50 年代首次将其定义为 “赋予计算机无需明确编程即可学…

C 语言实现TCP 通信,以及地址复用

服务端 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <arpa/inet.h>int main() {//监听套接字文件描述符int listenFd -1;//连接套接字的文件描述符int connFd -1;//服务器的地址结构st…

html实现好看的个人博客留言板源码

文章目录 1.设计来源1.1 博客主界面1.2 常用源码1.3 我的文章1.4 留言板1.5 联系我 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134837482 html实现好看的个人博客留言…

(C语言)判定同数异形体

同数异形体&#xff1a;有相同的数字包括数字个数&#xff0c;不同排列形成的正整数。 例如&#xff1a;12334和33214均由1个1,1个2,2个3,1个4组成&#xff0c;故互为同数异形体&#xff0c;而1234和3221就不是。 #include<stdio.h> bool Isomorphism(int num1,int num…

js二维数组实现纵向求和

需求&#xff1a;横向纵向都可以求和&#xff0c;剩余分数为100减去纵向之和 var arr [{id: 张丹,rowInfo: [{ realScore: 12 },{ realScore: 34 },{ realScore: 0 },{ realScore: 0 },{ realScore: 0 },],},{id: 丽丽,rowInfo: [{ realScore: 0 },{ realScore: 0 },{ realSc…

2023年最详细介绍Linux 系统目录结构!你确定不来了解一下吗?

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Linux》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有…

Python实现FA萤火虫优化算法优化Catboost回归模型(CatBoostRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …

一文带你区分Cookie 和 Session

Cookie 和 Session HTTP 协议是一种无状态协议&#xff0c;即每次服务端接收到客户端的请求时&#xff0c;都是一个全新的请求&#xff0c;服务器并不知道客户端的历史请求记录&#xff1b; Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性 1、Session 是什么 …

IDEA导入JavaWeb项目(Maven)

IDEA导入JavaWeb(Maven)项目教程 运行教程 亲爱的粉丝们&#xff0c;我深知你们对IDEA导入JAVAWeb工程的迫切需求。在这个充满竞争的时代&#xff0c;每一个项目都离不开高效的沟通。过程中需要对应的环境适配和软件安…

openGauss学习笔记-146 openGauss 数据库运维-备份与恢复-配置文件的备份与恢复

文章目录 openGauss学习笔记-146 openGauss 数据库运维-备份与恢复-配置文件的备份与恢复146.1 背景信息146.2 前置条件146.3 操作步骤146.4 示例 openGauss学习笔记-146 openGauss 数据库运维-备份与恢复-配置文件的备份与恢复 146.1 背景信息 在openGauss使用过程中&#x…

class051 二分答案法与相关题目【算法】

class051 二分答案法与相关题目【算法】 算法讲解051【必备】二分答案法与相关题目 code1 875. 爱吃香蕉的珂珂 // 爱吃香蕉的珂珂 // 珂珂喜欢吃香蕉。这里有 n 堆香蕉&#xff0c;第 i 堆中有 piles[i] 根香蕉 // 警卫已经离开了&#xff0c;将在 h 小时后回来。 // 珂珂…

生成对抗网络——研讨会

时隔一年&#xff0c;再跟着李沐大师学习了GAN之后&#xff0c;仍旧没能在离散优化中实现通用的应用&#xff0c;实在惭愧&#xff0c;借着组内研讨会的机会&#xff0c;再队GAN的前世今生做一个简单的综述。 GAN产生的背景 目前与GAN相关的应用 去reddit社区的机器学习板块…

外汇天眼:SEC(美国证券交易委员会)获得对Lupo Securities的最终判决

美国证券交易委员会&#xff08;SEC&#xff09;已获得对Lupo Securities LLC的最终判决。 2023年12月4日&#xff0c;伊利诺伊州北区法院的尊敬的约翰罗伯特布雷基法官签署了有关Lupo Securities的最终判决。 法院命令被告永久受限制和禁止违反《证券交易法》&#xff08;“…

简单地将附件POST到Notes应用中

大家好&#xff0c;才是真的好。 这半年我们会讲很多开发知识&#xff0c;这篇紧接上篇《通过URL将HTML表单数据创建到Domino应用中》&#xff0c;讲述如何将附件POST到Note应用中。 原理是一样&#xff0c;首先&#xff0c;你得有一个表单&#xff0c;我们用html写一个&…

uniapp打包iOS应用并通过审核:代码混淆的终极解决方案 ✨

摘要 本篇博客将教你如何使用 JavaScript-obfuscator 插件来一键发行和混淆 iOS 上的 uniapp 代码。通过安装插件、创建运行脚本&#xff0c;并执行混淆操作&#xff0c;你将能够轻松通过审核&#xff0c;提高应用程序的安全性。&#x1f512; 引言 在将 uniapp 项目打包并上…

【二分答案法】寻找峰值

题目&#xff1a;162. 寻找峰值 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 题目分析&#xff1a; &#xff08;1&#xff09;据题知&#xff0c;索引-1、索引n&#xff08;n为数组长度&#xff09;处的元素都默认为无穷小&#xff0c;我们可以在一开始特判…

逻辑漏洞之越权漏洞

一、越权漏洞简介 越权访问&#xff08;Broken Access Control&#xff0c;简称 BAC&#xff09;是Web应用程序中一种常见的漏洞。它的威胁在于一个账户即可控制全站用户数据。 该漏洞是指应用在检查授权时存在纰漏&#xff0c;使得攻击者在获得低权限用户账户后&#xff0c;利…

计算机网络:传输层(TCP详解)

文章目录 前言一、面向连接传输TCP1.段结构TCP往返延时&#xff08;RTT&#xff09;和超时 2.可靠数据传输TCP发送方事件TCP重传产生TCP ACK的建议[RFC 1122. RFC 2581]快速重传 3.流量控制4.TCP连接管理同意建立连接&#xff08;2次握手&#xff09;TCP三次握手TCP关闭连接&am…

JavaScript <有道翻译之数据解密‘23年12月06日版‘>--案例(三)

前言: 记得上半年还是去年,有道翻译还是直接返回明文数据;现在也跟着,用接口返回加密数据了; 娱乐一下,破他的密文数据... 成品效果图: js部分: 对于找他的密文数据有点费时,针对密文--->搜他地址和启动器不是特别容易,辗转多时(搜:descrypt/json.parse 结合使用更快),有图…