✅ 一、kind 的作用是什么?
kind用于声明当前 YAML 文件定义的是哪一种 Kubernetes 资源对象。
Kubernetes 是一个声明式系统,你告诉它“我想要什么”(声明资源),它负责让集群达到这个状态。
kind: Pod→ 我要一个 Podkind: Service→ 我要一个服务kind: Deployment→ 我要一个可扩缩、可滚动更新的应用
Kubernetes 的控制平面(如 apiserver、controller-manager)会根据 kind 调用对应的控制器(Controller) 来创建和管理资源。
🔑 简单说:
kind决定了“这是什么”,spec决定了“它应该什么样”。
✅ 二、kind 有哪几种类型?(常见内置资源)
Kubernetes 内置了几十种资源类型,按功能分类如下:
1. 工作负载(Workloads)
用于运行应用容器:
Pod(最小单元)Deployment(无状态应用)StatefulSet(有状态应用,如数据库)DaemonSet(每个节点运行一个,如日志采集)Job(一次性任务)CronJob(定时任务)
2. 服务与网络(Services & Networking)
Service(服务发现与负载均衡)Ingress(HTTP/HTTPS 路由)NetworkPolicy(网络策略)
3. 配置与存储(Config & Storage)
ConfigMap(非敏感配置)Secret(敏感信息)PersistentVolume(PV,存储资源)PersistentVolumeClaim(PVC,存储申请)StorageClass(存储类)
4. 权限与安全(RBAC & Security)
ServiceAccount(Pod 的身份)Role/ClusterRole(权限定义)RoleBinding/ClusterRoleBinding(权限绑定)
5. 命名空间与元数据
Namespace(逻辑隔离)LimitRange(资源限制)ResourceQuota(配额管理)
6. 扩展与自定义
CustomResourceDefinition(CRD,定义新资源)MutatingWebhookConfiguration/ValidatingWebhookConfiguration(准入控制)
📌 完整列表可通过命令查看:
kubectl api-resources
✅ 三、kind 可以自定义吗?
✅ 答案:可以!通过 CustomResourceDefinition(CRD)机制。
Kubernetes 允许你扩展 API,定义自己的资源类型(即自定义 kind)。
🔧 自定义 kind 的步骤:
步骤 1:创建 CRD(定义新资源类型)
# database-crd.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: databases.example.com # 格式:<plural>.<group>
spec:
group: example.com # API 组
versions:
- name: v1
served: true
storage: true
schema: ... # 可选:定义 spec 结构校验
scope: Namespaced
names:
plural: databases # 复数名(用于 kubectl get)
singular: database # 单数名
kind: Database # ← 这就是你自定义的 kind!
shortNames: [db] # 缩写:kubectl get db
步骤 2:使用自定义 kind
# my-db.yaml
apiVersion: example.com/v1
kind: Database # ← 自定义的 kind!
metadata:
name: my-production-db
spec:
engine: mysql
version: "8.0"
replicas: 3
应用后:
kubectl apply -f database-crd.yaml
kubectl apply -f my-db.yaml
kubectl get databases # 或 kubectl get db
NAME AGE
my-production-db 10s
💡 注意:CRD 只定义了“资源结构”,实际行为需要配合 Controller(如 Operator)实现。否则它只是一个“静态配置”。
✅ 四、自定义 kind 的典型应用场景
| 场景 | 说明 |
|---|---|
| 数据库即服务 | kind: MySQL, kind: Redis,由 Operator 自动部署、备份、扩缩容 |
| 机器学习训练 | kind: TFJob, kind: PyTorchJob(Kubeflow) |
| CI/CD 流水线 | kind: Pipeline, kind: Task(Tekton) |
| 监控告警 | kind: Prometheus, kind: Alertmanager(Prometheus Operator) |
这些项目都通过 CRD + Controller(Operator 模式) 扩展了 Kubernetes 的能力。
✅ 五、重要注意事项
-
kind区分大小写:必须首字母大写(如Deployment,不能写deployment)。 -
kind必须与apiVersion匹配:Deployment→apiVersion: apps/v1- 自定义
Database→apiVersion: example.com/v1
-
不是所有
kind都能直接创建:有些是“只读”资源(如Node,Event),由系统生成。 -
删除 CRD 会删除所有自定义资源实例!
✅ 六、总结
| 问题 | 答案 |
|---|---|
kind 的作用? | 声明资源类型,告诉 K8s “这是什么对象” |
有哪些内置 kind? | Pod、Deployment、Service、ConfigMap、Secret、Job、Ingress 等数十种 |
| 可以自定义吗? | ✅ 可以!通过 CustomResourceDefinition(CRD) |
| 自定义后怎么用? | 配合 Controller(Operator)实现业务逻辑,否则只是静态配置 |
如何查看所有 kind? | kubectl api-resources |
通过自定义 kind,Kubernetes 从一个容器编排平台,演变成了通用的云原生操作系统。这也是它成为事实标准的核心原因之一!🚀