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

k8s的CRD自定义资源类型示例

目录

  • 引言
  • 一、什么是CRD
    • 1、定义与作用‌
    • 2、核心特性‌
  • 二、应用示例‌‌
    • ‌1、创建CRD
    • 2、创建CR实例

引言

前面我们说到《k8s Ingress、Service配置各样例大全》,今天整理这篇文章的背景是我们经常在k8s一站式平台中可以看到CRD的菜单,然后打开菜单可以看到一系列的CRD定义。这些其实就是自定的扩展API,用户定义和管理的一些自定义资源类型。
请添加图片描述

再者我们经常可以看到我们自主定义的apiVersion在ingress中的使用(但这应该是插件不是CRD同理,后续展开)。

一、什么是CRD

CRD(Custom Resource Definition)是Kubernetes中用于扩展API的核心机制,允许用户定义和管理自定义资源类型(如MyApp、Database等),使其能够像原生资源(如Pod、Service)一样被创建和管理‌。以下是其关键点及示例:

核心概念‌‌

1、定义与作用‌

CRD通过声明新的资源类型(如apiVersion: v1和kind: MyResource)扩展Kubernetes API,用户可通过kubectl直接操作这些资源‌。

‌CRD‌:定义资源的Schema(字段、验证规则等),相当于资源的“模板”。
‌CR(Custom Resource)‌:CRD的实例,是实际创建的具体资源对象‌。‌

2、核心特性‌

‌扩展性‌:突破Kubernetes内建资源的限制,支持领域特定需求(如数据库、机器学习任务)。
‌声明式API‌:通过YAML文件定义资源状态,Kubernetes自动维护其生命周期‌。
‌控制器(Controller)‌:需配合自定义控制器实现业务逻辑(如自动扩缩容),否则CRD仅存储数据而无实际功能‌。

在这里插入图片描述

二、应用示例‌‌

场景:定义并管理一个MySQL数据库集群。

‌1、创建CRD

以下是MySQLCluster CRD的完整YAML定义示例,其中通过spec.names.kind字段显式声明了资源类型名称为 MySQLCluster

# mysql-crd.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:name: mysqlclusters.mysql.presslabs.org
spec:group: mysql.presslabs.orgversions:- name: v1alpha1served: truestorage: trueschema:openAPIV3Schema:type: objectproperties:spec:type: objectproperties:replicas:type: integerminimum: 1secretName:type: stringstorage:type: objectproperties:size:type: stringpattern: '-9]\d*Gi$'scope: Namespacednames:kind: MySQLCluster  # 核心声明点plural: mysqlclusters # 复数形式,用于API路径singular: mysqlclustershortNames: ["mysql"]

关键设计说明:

  • API组与版本‌:通过groupversions字段声明API路径为mysql.presslabs.org/v1alpha1;
  • Schema验证‌:openAPIV3Schema定义了字段校验规则(如storage.size必须符合10Gi格式);
  • 命名约定‌:names块中的kind值需首字母大写且无特殊字符,plural用于生成API端点路径;‌
  • 存储配置‌:通过storage: true标记该版本为持久化版本。

2、创建CR实例

以下是基于前述MySQLCluster CRD定义的CR实例YAML,该示例会创建一个3节点MySQL集群,配置10Gi存储空间:

# mysql-cluster-instance.yaml
apiVersion: mysql.presslabs.org/v1alpha1
kind: MySQLCluster
metadata:name: production-mysqlnamespace: database
spec:replicas: 3secretName: mysql-root-passwordstorage:size: 10GipodSpec:resources:requests:cpu: "1"memory: "2Gi"

关键配置说明:

  • 严格匹配CRD定义的API组和版本(mysql.presslabs.org/v1alpha1);
  • spec字段完全遵循CRD的openAPIV3Schema验证规则
  • 扩展了CRD未定义的podSpec字段(假设控制器支持该特性);
  • 存储大小格式必须符合正则校验(如10Gi)。
  • 注:实际使用时需确保已部署对应的MySQL Operator控制器来监听该资源类型。

MySQL Operator本质上是一个运行在Kubernetes中的控制器,它持续监控集群状态,确保实际状态与用户期望状态一致。

在这里插入图片描述

http://www.dtcms.com/a/362843.html

相关文章:

  • 从全球视角到K8s落地的Apache IoTDB实战
  • 2025年新版C语言 模电数电及51单片机Proteus嵌入式开发入门实战系统学习,一整套全齐了再也不用东拼西凑
  • AI零售创业公司:零眸智能
  • Elasticsearch 深分页限制与解决方案
  • Flink RuntimeContext和FunctionContext:状态计算的核心桥梁
  • flink中的窗口的介绍
  • uni-app iOS 应用版本迭代与上架实践 持续更新的高效流程
  • Windows远程连接:SSH+RDP+Server
  • 阿里云携手MiniMax构建云原生数仓最佳实践:大模型时代的 Data + AI 数据处理平台
  • 【Python3教程】Python3高级篇之XML解析
  • 消息存储机制-索引文件及页缓存
  • uniapp中输入金额的过滤(只允许输入数字和小数点)
  • Redis分层缓存
  • kukekey在线搭建k8sV1.30.4版本
  • VMWare ubuntu24.04安装(安装ubuntu安装)
  • InnoDB存储引擎-逻辑存储结构
  • Qwen3-30B-A3B 模型解析
  • 【LeetCode牛客数据结构】单链表的应用
  • C语言(长期更新)第12讲:指针二详解
  • 【嵌入式电机控制#进阶6】三段启动法
  • 怎么为服务器设置或重置服务器密码?
  • 【Vue2 ✨】Vue2 入门之旅(九):Vue Router 入门
  • JetBrains 2025 全家桶 11合1 Windows直装(含 IDEA PyCharm、WebStorm、DataSpell、DataGrip等
  • [密码学实战]智能密码钥匙SKF库软实现(四十六)
  • LabVIEW应急柴油发电机组诊断装置
  • LabVIEW振动信号积分处理
  • 【设计模式】通俗讲解设计模式的七大原则
  • 【设计模式】从游戏角度开始了解设计模式 --- 创建型模式(一)
  • Python OpenCV图像处理与深度学习:Python OpenCV性能优化与高效图像处理
  • VGG改进(7):基于Spatial Attention的性能优化