0Pricing
DevOps Bootcamp · 课时

自定义资源定义(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.schedule

CRD 只是数据

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 有状态应用的 StatefulSets
  2. 用于节点专属任务的 DaemonSets
  3. 了解 Kubernetes Operator
  4. 自定义资源定义(CRD)
← 返回 DevOps Bootcamp