跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kubernetes自定义资源定义(CRD)
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Kubernetes自定义资源定义(CRD) = == 介绍 == '''Kubernetes自定义资源定义(Custom Resource Definition, CRD)'''是Kubernetes的一种扩展机制,允许用户定义自己的资源类型,而无需修改Kubernetes核心代码。通过CRD,用户可以将自定义API对象集成到Kubernetes生态系统中,从而扩展集群的功能。CRD通常用于定义特定领域的资源(如数据库、监控配置或CI/CD流水线),并通过Kubernetes原生工具(如`kubectl`)管理这些资源。 == 核心概念 == === 什么是自定义资源(CR)? === 自定义资源是Kubernetes中的一种对象,其结构和行为由CRD定义。与内置资源(如Pod、Deployment)不同,CR是用户定义的,用于满足特定需求。 === CRD的作用 === CRD允许用户: * 定义新的资源类型(如`MyDatabase`或`NetworkPolicyRule`)。 * 通过Kubernetes API服务器管理这些资源。 * 使用`kubectl`或其他Kubernetes工具与自定义资源交互。 == 定义CRD == 以下是一个简单的CRD示例,定义一个名为`CronTab`的资源: <syntaxhighlight lang="yaml"> apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: crontabs.stable.example.com spec: group: stable.example.com versions: - name: v1 served: true storage: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: cronSpec: type: string image: type: string replicas: type: integer scope: Namespaced names: plural: crontabs singular: crontab kind: CronTab shortNames: - ct </syntaxhighlight> === 字段说明 === * '''group''':自定义资源的API组(如`stable.example.com`)。 * '''versions''':支持的API版本,包括是否启用(`served`)和存储(`storage`)。 * '''schema''':定义资源的结构(使用OpenAPI v3规范)。 * '''scope''':资源作用域(`Namespaced`或`Cluster`)。 * '''names''':定义资源的复数、单数形式及缩写。 == 创建自定义资源 == 定义CRD后,可以创建对应的自定义资源实例: <syntaxhighlight lang="yaml"> apiVersion: stable.example.com/v1 kind: CronTab metadata: name: my-crontab spec: cronSpec: "* * * * */5" image: my-cron-image replicas: 2 </syntaxhighlight> == 实际案例 == === 场景:定义数据库资源 === 假设需要定义一个`Database`资源来管理数据库实例: <syntaxhighlight lang="yaml"> apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: databases.example.com spec: group: example.com versions: - name: v1 served: true storage: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: engine: type: string version: type: string storageGB: type: integer scope: Namespaced names: plural: databases singular: database kind: Database </syntaxhighlight> 创建实例: <syntaxhighlight lang="yaml"> apiVersion: example.com/v1 kind: Database metadata: name: mysql-db spec: engine: mysql version: "5.7" storageGB: 100 </syntaxhighlight> === 输出验证 === 使用`kubectl get databases`查看资源: <syntaxhighlight lang="bash"> $ kubectl get databases NAME AGE mysql-db 10s </syntaxhighlight> == 高级特性 == === 校验与默认值 === 通过CRD的`schema`字段可以定义校验规则和默认值: <syntaxhighlight lang="yaml"> schema: openAPIV3Schema: type: object properties: spec: type: object required: ["engine"] # 必填字段 properties: engine: type: string enum: ["mysql", "postgresql"] # 枚举值 storageGB: type: integer minimum: 10 # 最小值 default: 20 # 默认值 </syntaxhighlight> === 子资源 === CRD支持`status`和`scale`子资源,例如启用`status`: <syntaxhighlight lang="yaml"> spec: versions: - name: v1 subresources: status: {} </syntaxhighlight> == 架构图 == <mermaid> graph LR User[用户] -->|创建/更新| CRD[CRD定义] CRD -->|注册到| APIServer[Kubernetes API Server] APIServer -->|存储| etcd[(etcd)] User -->|操作| CR[自定义资源] CR -->|遵循| CRD </mermaid> == 数学公式(可选) == 如果需要定义资源配额的计算,可以使用公式: <math> \text{TotalQuota} = \sum_{i=1}^{n} (\text{Resource}_i \times \text{Weight}_i) </math> == 总结 == CRD是Kubernetes扩展的核心机制,允许用户灵活定义和管理自定义资源。通过结合校验、子资源等特性,可以实现复杂的业务逻辑集成到Kubernetes中。初学者应从简单的CRD定义开始,逐步探索高级功能。 [[Category:集成部署]] [[Category:Kubernetes]] [[Category:Kubernetes扩展]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)