Kubernetes CRD 定义详解 —— 以 HelloWorld 为例
在 Kubernetes 中,内置的 API 资源(如 Pod、Service、Deployment 等)虽然功能强大,但在面对一些业务场景时可能无法满足需求。此时,我们可以利用 CRD(Custom Resource Definition,自定义资源定义)来自定义符合业务逻辑的资源。本文将以一个简单的 HelloWorld CRD 为例,从配置文件的每一行讲解其含义,并展示如何验证 CRD 是否生效。
一、CRD 的背景介绍
CRD 允许用户扩展 Kubernetes API,可以定义新的资源类型,并结合控制器(Operator)实现自动化运维。通过 CRD,我们可以:
- 定义符合特定业务需求的资源对象;
- 利用 OpenAPI Schema 对输入数据进行验证;
- 与内置资源一样,通过 kubectl 等工具进行管理。
二、定义 HelloWorld CRD
下面是 HelloWorld CRD 的完整配置文件 helloworld-crd.yaml
,每一行均有详细解释:
apiVersion: apiextensions.k8s.io/v1 # 使用 CRD 的 API 版本,当前推荐使用 v1
kind: CustomResourceDefinition # 资源类型为自定义资源定义
metadata:
name: helloworlds.example.com # CRD 的名称,格式为<复数>.<组名>,必须全局唯一
spec:
group: example.com # 定义自定义资源所属的 API 组
versions: # 定义该 CRD 支持的版本列表
- name: v1 # 版本号:v1
served: true # 表示该版本的 API 是可以被访问的
storage