Kubernetes API 是集群对外提供的统一接口,由 kube-apiserver 提供,用于对各类资源对象进行增删改查,负责认证鉴权、准入控制和把集群期望状态写入 etcd,驱动控制器实现声明式管理。

      

在 Kubernetes 里,“API”你可以把它理解成:所有人(人和程序)跟集群打交道的唯一入口。

1)API 是干嘛的?

你平时敲的这些命令:

  • kubectl get pods

  • kubectl apply -f xxx.yaml

  • kubectl delete svc ...

本质上都不是“直接操作 Pod / Service”,而是去请求 Kubernetes API,让它替你完成创建、查询、更新、删除这些动作。

所以 Kubernetes 的 API 本质就是一套“规则 + 接口”,规定:

  • 资源长什么样(Pod、Deployment、Service…)

  • 允许你对资源做什么操作(增删改查)

  • 谁能做(权限 RBAC)

  • 做完之后要触发什么(控制器去调度、拉起、扩容等)

2)K8s 的 API 由谁提供?

主要就是 kube-apiserver。

它是控制面的核心组件之一,职责很直接:

  • 接收所有请求(kubectl、controller、scheduler、operator、UI、CI/CD)

  • 做认证/鉴权(你是谁、你能不能做)

  • 做准入控制(Admission:资源是否合规、要不要自动注入一些字段)

  • 把“最终状态”写进 etcd(集群的数据库)

一句话:apiserver 是门卫 + 记录员,所有人先进门、登记,然后才轮到后面的控制器去干活。

3)API 访问的对象是什么?

对象就是 Kubernetes 的资源(Resource),比如:

  • 工作负载:Pod / Deployment / StatefulSet

  • 网络:Service / Ingress / NetworkPolicy

  • 存储:PV / PVC / StorageClass

  • 配置:ConfigMap / Secret

  • 权限:Role / RoleBinding

这些资源都通过 API 暴露出来,统一用 REST 风格访问,比如:

  • GET /api/v1/namespaces/default/pods(查 Pod)

  • POST /apis/apps/v1/namespaces/default/deployments(建 Deployment)

4)为什么说 K8s 是 “声明式”?

因为你通过 API 提交的通常不是“我要怎么做”,而是“我想要什么结果”。

比如你 apply 一个 Deployment:

  • 你声明:我要 3 个副本

  • API 记录这个“期望状态”

  • 控制器不断对比现实状态,不够就补到 3 个

所以 Kubernetes API 不只是“接口”,它还是整个集群状态的定义中心。

更多推荐