首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从 0 到企业级私有云 | Kubernetes 进阶必懂:什么是 CRD?为什么 ArgoCD、Longhorn 都离不开它?

从 0 到企业级私有云 | Kubernetes 进阶必懂:什么是 CRD?为什么 ArgoCD、Longhorn 都离不开它?

作者头像
用户12454170
发布2026-05-06 20:53:28
发布2026-05-06 20:53:28
220
举报

本文导读

本文共 1400+ 字,阅读约需 7 分钟。 如果你已经开始接触 Kubernetes、CI/CD、甚至 ArgoCD,那你一定见过一个东西:CRD, 但大多数人只是“见过”,却没有真正理解它。

这篇文章,我帮你彻底讲清楚:

👉 CRD 到底是什么? 👉 它解决了什么问题? 👉 为什么你现在用的所有高级组件都依赖它?


一、先说结论:CRD 是什么?

CRD,全称:👉 CustomResourceDefinition(自定义资源定义)

一句话解释:

CRD 是让 Kubernetes 支持“自定义资源类型”的机制


二、为什么 Kubernetes 需要 CRD?

我们先看一个现实问题。

默认情况下,Kubernetes 只认识这些资源:

  • Pod
  • Deployment
  • Service
  • ConfigMap
  • Secret

这些都是内置资源


但在真实企业环境中,我们需要管理的东西远不止这些,比如:

  • GitOps 应用(ArgoCD)
  • 分布式存储(Longhorn)
  • 数据库集群(MySQL / Redis)
  • 消息队列(Kafka)
  • AI训练任务

问题来了:

👉 Kubernetes 本身并不认识这些资源 👉 那它怎么管理它们?


答案就是:

通过 CRD,把这些“新类型”注册进 Kubernetes


三、一个最通俗的理解方式(强烈建议记住)

你可以把 Kubernetes 想象成一个操作系统:

  • 默认只有基础命令(ls / cd / ps)
  • 但你可以安装软件来扩展能力

👉 那么 CRD 就相当于:

给 Kubernetes 安装“新资源类型”


也就是说:

👉 Kubernetes 不再只是管理 Pod 👉 而是变成一个“可扩展平台”


四、结合实战:ArgoCD 是怎么用 CRD 的?

我们在安装 ArgoCD 时,其实已经用到了 CRD:

代码语言:javascript
复制
kubectl create -f install.yaml

这个 YAML 里,包含了类似这样的内容:

代码语言:javascript
复制
kind: CustomResourceDefinition
metadata:
  name: applications.argoproj.io

这一步做了什么?

👉 在 Kubernetes 中新增了一种资源:

代码语言:javascript
复制
kubectl get applications -n ns-name

也就是说:

👉 Application 变成了 Kubernetes 的“新资源类型”


之后你写的:

代码语言:javascript
复制
kind: Application

本质上就是:

👉 在使用 CRD 定义出来的资源


五、CRD 到底定义了什么?

一个 CRD 本质是一个 YAML,它描述了:

代码语言:javascript
复制
apiVersion: apiextensions.k8s.io/v1
kind:CustomResourceDefinition

spec:
group:argoproj.io
names:
    kind:Application
    plural:applications
scope:Namespaced
versions:
    -name:v1alpha1

核心字段解释:

字段

作用

group

API 分组

kind

资源类型(如 Application)

plural

kubectl 使用的名字

scope

是否属于某个 namespace

versions

API 版本


👉 简单理解:

CRD 就是在告诉 Kubernetes: “以后有一种新资源,叫 Application,你要认识它”


六、重点:CRD 本身其实“什么都不会做”

这是很多人最大的误区。

👉 CRD 只是定义资源 👉 它本身不会执行任何逻辑


真正让它“有用”的,是:

Controller(控制器)


七、CRD + Controller 才是完整体系(核心理解)

这两者的关系:

组件

作用

CRD

定义“资源是什么”

Controller

决定“资源怎么工作”


以 ArgoCD 为例:

① 你创建一个资源

代码语言:javascript
复制
kind: Application

② Controller 监听到变化

👉 ArgoCD Controller 发现:

“有一个新的 Application!”


③ 自动执行逻辑

  • 拉取 Git 仓库
  • 对比配置
  • 自动部署到 Kubernetes

👉 关键结论:

CRD 定义规则,Controller 执行规则


八、实验在用的组件,其实全是 CRD

结合现在的学习路线,已经在大量使用 CRD 了:


1️⃣ ArgoCD

  • Application(CRD)

2️⃣ Longhorn

  • Volume
  • Engine
  • Node

👉 全部都是 CRD


3️⃣ 未来一定会遇到的:Operator

Operator 本质就是:

CRD + Controller + 自动运维逻辑


比如:

  • 自动创建数据库
  • 自动备份
  • 自动恢复
  • 自动扩容

九、一个非常重要的进阶认知

Kubernetes 本质是什么?

👉 一个声明式 API 系统


而 CRD 做了一件非常关键的事情:

把 Kubernetes 从“容器编排工具”,升级成“通用控制平台”


这也是为什么现在 Kubernetes 可以:

  • 管数据库
  • 管中间件
  • 管云资源(甚至 AWS / 阿里云)

十、动手验证一下(强烈建议你试)

在你的集群执行:

代码语言:javascript
复制
kubectl get crd

你会看到一堆类似:

代码语言:javascript
复制
applications.argoproj.io
volumes.longhorn.io

创建相应资源文件app.yaml

代码语言:javascript
复制
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: demo-app
  namespace: argocd
spec:
  destination:
    namespace: default
    server: https://kubernetes.default.svc
source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    path: guestbook
    targetRevision: HEAD
  project: default
  syncPolicy:
    automated: {}

然后执行:

代码语言:javascript
复制
kubectl apply -f app.yaml

再执行:

代码语言:javascript
复制
kubectl get applications -A

👉 如果能查到资源,说明 CRD 已经生效


十一、总结

最后压缩成三句话:


👉 1️⃣ CRD=扩展 Kubernetes API

👉 2️⃣ CRD=定义新的资源类型

👉 3️⃣ CRD 必须配合 Controller 才真正有意义


结尾

当你真正理解 CRD 后,你会发现:

👉 Kubernetes 不只是“容器工具”

👉 而是一个“万能控制平台”

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一根头发丝的宽度 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文导读
  • 一、先说结论:CRD 是什么?
  • 二、为什么 Kubernetes 需要 CRD?
  • 三、一个最通俗的理解方式(强烈建议记住)
  • 四、结合实战:ArgoCD 是怎么用 CRD 的?
  • 五、CRD 到底定义了什么?
  • 六、重点:CRD 本身其实“什么都不会做”
  • 七、CRD + Controller 才是完整体系(核心理解)
    • ① 你创建一个资源
    • ② Controller 监听到变化
    • ③ 自动执行逻辑
  • 八、实验在用的组件,其实全是 CRD
    • 1️⃣ ArgoCD
    • 2️⃣ Longhorn
    • 3️⃣ 未来一定会遇到的:Operator
  • 九、一个非常重要的进阶认知
  • 十、动手验证一下(强烈建议你试)
  • 十一、总结
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档