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

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.xdnf.cn/news/19596.html

相关文章:

  • 整体认识K8s之PriorityClass优先级调度/HPA自动扩缩容机制
  • 【设计模式】从游戏角度开始了解设计模式 --- 创建型模式(一)
  • 【Linux系统】万字解析,进程间的信号
  • Photoshop用户必看:让你的PSD像JPG一样可预览
  • 书写腾讯天气遇到的问题
  • 虚拟继承:破解菱形继承之谜
  • 【论文阅读】Deepseek-VL:走向现实世界的视觉语言理解
  • Postman接口测试工具:高效管理测试用例与环境变量,支持断言验证及团队协作同步
  • 软件设计师——软件工程学习笔记
  • 前端架构知识体系:常见压缩算法全解析及原理揭秘(gzip、zip)
  • 麒麟信安受邀出席第三届电子信息测试产业大会,参编四项团标发布,详解麒麟信安操作系统测试全流程
  • Navicat vs DBeaver vs DataGrip:三款主流数据库客户端深度对比与选择
  • 力扣222 代码随想录Day15 第四题
  • 【高并发内存池】三、线程缓存的设计
  • Steam开发者上架游戏完整指南(含具体技术细节)
  • 【最新Pr 2025安装包(Adobe Premiere Pro 2025 中文解锁版)安装包永久免费版下载安装教程】
  • Java-Spring入门指南(一)Spring简介
  • 如何把HTML转化成桌面Electron
  • B树和B+树,聚簇索引和非聚簇索引
  • 网络准入控制,阻断违规外联-企业内网安全的第一道防线
  • 通用的二叉数迭代方法
  • 深入浅出 RabbitMQ-TTL+死信队列+延迟队列
  • 如何使用Kafka处理高吞吐量的实时数据
  • 赵玉平《跟司马懿学管理》读书笔记
  • 智能高效的Go IDE——GoLand v2025.2全新上线
  • 图像编码--监控摄像机QP设置大小?
  • Git 代码提交管理指南
  • 为啥我Nginx证书配的没问题,但客户端却发现证书不匹配?
  • 从零开始搭建体育电竞比分网,手把手教你全流程
  • 京东科技大模型RAG岗三轮面试全复盘:从八股到开放题的通关指南