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

【k8s深入理解之 Scheme 补充-3】理解 k8s 各个库(apimachinery、api、kubernetes)的关系

关联学习

  • 【转载】k8s中Apimachinery、Api、Client-go库之间的关系_client go 依赖-CSDN博客

附录1 | k8s 各个库(apimachinery、api、kubernetes)

k8s.io/apik8s.io/apimachineryk8s.io/kubernetes 是 Kubernetes 的核心模块,它们在功能上有明确的分工,共同构建 Kubernetes 的生态系统。以下是它们的详细对比和区别:


1. k8s.io/api

定义:

  • Kubernetes 的资源对象(如 Pod、Deployment、Service 等) API 类型定义的模块。
  • 用于描述 Kubernetes 对象的结构和字段,通常用于序列化/反序列化 Kubernetes 资源。

功能:

  • 定义 Kubernetes API 对象的结构(例如 Deployment, Pod, Service 等)。
  • 这些对象是 Kubernetes 使用的标准资源定义,通常用在客户端代码中(例如 kubectl 和自定义控制器)。

用途:

  • 用于编写客户端代码,比如使用 client-go 与 Kubernetes API Server 交互时引用这些类型。

  • 模块位置:

    k8s.io/api/apps/v1/types.go   # Deployment 定义
    k8s.io/api/core/v1/types.go   # Pod 和 Service 定义
    

2. k8s.io/apimachinery

定义:

  • Kubernetes 的通用工具库,提供基础结构和工具,供 Kubernetes 和其他基于 Kubernetes 的项目使用。

功能:

  • 定义通用的 API 模型和工具,例如 metav1.ObjectMetaListOptionsTypeMeta 等。
  • 提供了 Kubernetes 对象的元信息(如名称、标签、注解)。
  • 定义了一些通用接口和工具,包括:
    • 深拷贝工具。
    • 客户端和服务端数据转换工具。
    • 类型的注册和 Scheme 处理。
    • REST 客户端实现。

用途:

  • k8s.io/apik8s.io/kubernetes 提供基础支持。

  • 模块位置:

    k8s.io/apimachinery/pkg/apis/meta/v1  # 元信息定义
    k8s.io/apimachinery/pkg/runtime       # 类型系统和工具
    

3. k8s.io/kubernetes

定义:

  • Kubernetes 的主仓库,包含核心实现(如调度器、API Server、控制器管理器等)。

功能:

  • 定义 Kubernetes 的核心逻辑和组件:
    • API Server 的实现。
    • 调度器(Scheduler)的实现。
    • 控制器管理器(Controller Manager)的实现。
    • kubelet、kubectl 的实现。
  • 提供 Kubernetes 的核心二进制文件。

用途:

  • 提供 Kubernetes 的整体实现,是运行 Kubernetes 集群的必备模块。
  • 一般不会作为依赖直接引用,因为其结构复杂,且包含了所有代码。
  • 推荐使用 k8s.io/client-go 和其他模块与 Kubernetes 交互,而不是直接依赖 k8s.io/kubernetes

主要区别对比

特性k8s.io/apik8s.io/apimachineryk8s.io/kubernetes
核心功能定义 Kubernetes API 对象类型(就是 GVK 的定义)提供元信息、工具和通用组件(理解为 metada、ObjectMeta、TypeMeta 之类)实现 Kubernetes 的核心功能(理解为控制器、apiserver之类)
模块类型轻量级 API 类型模块底层工具模块核心实现模块
适用场景客户端使用,用于定义和解析资源提供对象元信息和类型转换工具Kubernetes 集群运行和核心功能
依赖关系依赖 k8s.io/apimachinery独立存在依赖 k8s.io/apik8s.io/apimachinery
使用场景客户端工具或控制器开发类型注册、元信息操作、深拷贝工具Kubernetes 核心开发

建议使用的模块

  • 如果开发 控制器 或 操作 Kubernetes 资源,选择:
    • k8s.io/api:用来定义资源类型(如 Pod, Deployment)。
    • k8s.io/apimachinery:用来操作元信息或类型系统。
    • k8s.io/client-go:用来与 Kubernetes 集群交互。
  • k8s.io/kubernetes:只在开发 Kubernetes 本身或调试 Kubernetes 源码时使用,不建议直接作为依赖。

http://www.kler.cn/a/415716.html

相关文章:

  • STL基本算法之copy与copy_backward
  • Servlet细节
  • C 语言静态库与动态库的生成和使用
  • maven,java相关调试等
  • 基于社群生态需求构建小程序 AI 智能名片与 S2B2C 商城系统融合模式的探索与实践
  • Linux -初识 与基础指令1
  • CSS怪异,弹性盒子模型与浏览器内核
  • ChatGPT科研应用、论文写作、课题申报、数据分析与AI绘图
  • Echarts散点图(火山图)自定义配置
  • 【python】OpenCV—Tracking(10.5)—dlib
  • 【AI绘画】DALL·E 3 绘图功能与 DALL·E API 探索
  • 深度学习-47-大语言模型LLM之常用的大模型微调框架选择建议
  • AppFlow:支持飞书机器人调用百炼应用
  • AJAX 实时搜索
  • MySQL快速入门——表的操作
  • Ubuntu 20.04 Server版连接Wifi
  • 【VBA实战】使用Word制作简易的考试及阅卷系统
  • 【Go底层】time包Ticker定时器原理
  • 第三十八篇——高斯分布:大概率事件意味着什么?
  • 利用Python爬虫获取店铺详情:从入门到实践