自定义资源定义(CRD)
学习自定义资源定义如何通过您自己的资源类型扩展 Kubernetes API,以及它们为何是 Operator 构建功能的基础。
自定义资源定义(CRD) 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
扩展 Kubernetes API
Pod 和 Deployment 等内置对象并不是 Kubernetes 的全部。借助Custom Resource Definition (CRD),您可以让 Kubernetes 认识全新的资源类型。
什么是自定义资源?
Custom Resource (CR) 是您定义的类型的一个实例。安装 CRD 后,您可以像创建原生对象一样,使用 kubectl 创建 CR。
CRD 的构成
CRD 声明新的种类、API 组、版本和范围(命名空间范围或集群范围)。
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: backups.data.example.com
spec:
group: data.example.com
scope: Namespaced
names:
plural: backups
singular: backup
kind: Backup定义架构
OpenAPI 架构会验证自定义资源的字段,并在创建时拒绝无效的规格。
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
schedule:
type: string
retention:
type: integer创建自定义资源
应用 CRD 后,您就可以创建新类型的实例。
apiVersion: data.example.com/v1
kind: Backup
metadata:
name: nightly-db
spec:
schedule: '0 2 * * *'
retention: 7通过 kubectl 使用 CR
自定义资源是一等对象。您可以使用熟悉的命令列出、描述和删除它们。
kubectl get backups
kubectl describe backup nightly-db
kubectl delete backup nightly-db简写名称和打印列
您可以定义简写名称和自定义表格列,让使用 CR 的过程更加方便。
names:
shortNames: ['bk']
additionalPrinterColumns:
- name: Schedule
type: string
jsonPath: .spec.scheduleCRD 只是数据
CRD 本身只会将数据存储在 etcd 中,不会执行任何操作。若要真正执行 Backup,您需要一个监视这些资源的控制器。
与 Operator 的联系
Operator 是一个控制器加上一个或多个 CRD。CRD 定义期望状态;控制器持续协调实际状态,使其与期望状态一致。CRD 是 Operator 所依托的基础。
CRD 的版本管理
CRD 支持通过转换使用多个版本,让您可以演进 API。其中恰好一个版本会被标记为 etcd 中的存储版本。
versions:
- name: v1beta1
served: true
storage: false
- name: v1
served: true
storage: true何时使用 CRD
- 您希望以声明式方式建模某个领域概念(Backup、Database、Certificate)
- 您正在构建 Operator 来自动化运维操作
- 您希望用户使用熟悉的 kubectl 工作流管理您的应用
快速检查
测试您对 CRD 的理解。
回顾
您了解到,CRD 使用自定义类型扩展 Kubernetes API,并通过 OpenAPI 架构进行验证,还可以使用常规 kubectl 命令进行管理。CRD 单独存在时只能存储数据;将它与控制器结合,就能构成一个协调期望状态的Operator。
常见问题解答
「自定义资源定义(CRD)」课时是免费的吗?
是的 — 「自定义资源定义(CRD)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「自定义资源定义(CRD)」这节课中我会学到什么?
学习自定义资源定义如何通过您自己的资源类型扩展 Kubernetes API,以及它们为何是 Operator 构建功能的基础。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「自定义资源定义(CRD)」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。