K8s配置kind详解

89 阅读3分钟

✅ 一、kind 的作用是什么?

kind 用于声明当前 YAML 文件定义的是哪一种 Kubernetes 资源对象。

Kubernetes 是一个声明式系统,你告诉它“我想要什么”(声明资源),它负责让集群达到这个状态。

  • kind: Pod → 我要一个 Pod
  • kind: 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 的能力。


✅ 五、重要注意事项

  1. kind 区分大小写:必须首字母大写(如 Deployment,不能写 deployment)。

  2. kind 必须与 apiVersion 匹配

    • DeploymentapiVersion: apps/v1
    • 自定义 DatabaseapiVersion: example.com/v1
  3. 不是所有 kind 都能直接创建:有些是“只读”资源(如 Node, Event),由系统生成。

  4. 删除 CRD 会删除所有自定义资源实例!


✅ 六、总结

问题答案
kind 的作用?声明资源类型,告诉 K8s “这是什么对象”
有哪些内置 kindPod、Deployment、Service、ConfigMap、Secret、Job、Ingress 等数十种
可以自定义吗?✅ 可以!通过 CustomResourceDefinition(CRD)
自定义后怎么用?配合 Controller(Operator)实现业务逻辑,否则只是静态配置
如何查看所有 kindkubectl api-resources

通过自定义 kind,Kubernetes 从一个容器编排平台,演变成了通用的云原生操作系统。这也是它成为事实标准的核心原因之一!🚀