摘要:Kubernetes API 是 Kubernetes 集群的核心控制平面,所有集群操作(如创建、更新、删除资源)都通过该 API 完成。它基于 RESTful 设计原则,通过 HTTP 协议暴露接口,支持 json 或 YAML 格式的数据交换。以下是 Ku
Kubernetes API 是 Kubernetes 集群的核心控制平面,所有集群操作(如创建、更新、删除资源)都通过该 API 完成。它基于 RESTful 设计原则,通过 HTTP 协议暴露接口,支持 json 或 YAML 格式的数据交换。以下是 Kubernetes API 的详细解析:
1. API 核心概念
API Server
Kubernetes API 的核心组件是 kube-apiserver,负责接收并处理所有 API 请求。功能包括:Ø 认证(Authentication)
Ø 鉴权(Authorization)
Ø 准入控制(Admission Control)
Ø 数据校验和持久化(存储到 etcd)。
资源模型(Resource Model)
Kubernetes 将所有实体抽象为“资源”(Resources),例如 Pod、Deployment、Service 等。资源通过 Group(组)、Version(版本) 和 Kind(类型) 唯一标识:Ø Group:逻辑上相关的资源集合(如 apps、batch)。
Ø Version:API 的版本(如 v1、v1beta1)。
Ø Kind:资源的类型(如 Pod、Deployment)。
API 版本控制
Kubernetes 使用多版本 API 机制保证兼容性:Ø 稳定版本:如 v1,用于生产环境。
Ø Beta 版本:如 v1beta1,可能包含实验性功能。
Ø Alpha 版本:如 v1alpha1,默认禁用,可能随时被弃用。
2. API 请求与响应
HTTP 方法
GET:获取资源列表或单个资源。POST:创建资源。PUT:更新资源。PATCH:部分更新资源。DELETE:删除资源。API 路径
API 路径遵循固定格式:
plaintext
复制
///namespaces///
示例:Ø 获取默认命名空间的 Pod 列表:
bash
GET /api/v1/namespaces/default/pods
Ø 创建 Deployment(位于 apps/v1 组):
bash
POST /apis/apps/v1/namespaces/default/deployments
响应格式
成功响应返回 HTTP 状态码 2xx,数据格式为 JSON。错误响应返回 4xx 或 5xx,包含错误详情:json
{
"kind": "Status",
"apiVersion": "v1",
"status": "Failure",
"message": "pods 'my-pod' not found",
"code": 404
}
3. 核心 API 资源
以下是一些常用的核心资源及其 API 路径:
资源类型API 路径示例操作Pod/api/v1/namespaces/{ns}/podsGET /api/v1/podsDeployment/apis/apps/v1/namespaces/{ns}/deploymentsPOST /apis/apps/v1/deploymentsService/api/v1/namespaces/{ns}/servicesPUT /api/v1/services/my-svcConfigMap/api/v1/namespaces/{ns}/configmapsDELETE /api/v1/configmaps/cm1Namespace/api/v1/namespacesGET /api/v1/namespaces4. API 操作示例
通过 kubectl 调用 API
bash
# 获取所有 Pod
kubectl get --raw /api/v1/pods
# 创建 Deployment
kubectl apply -f deployment.yaml
通过 curl 直接调用 API
bash
# 获取 Pod 列表(需配置认证)
curl -X GET https:///api/v1/pods \
--header "Authorization: Bearer " \
--insecure
# 创建资源
curl -X POST https:///apis/apps/v1/namespaces/default/deployments \
--header "Content-Type: application/yaml" \
--data-binary @deployment.yaml
5. API 扩展机制
CustomResourceDefinitions (CRD)
允许用户定义自定义资源(Custom Resources)。示例:定义一个 CronTab 资源:yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: crontabs.stable.example.com
spec:
group: stable.example.com
versions:
- name: v1
served: true
storage: true
scope: Namespaced
names:
plural: crontabs
singular: crontab
kind: CronTab
Aggregated API
允许将第三方 API 服务集成到 Kubernetes API 中,例如通过 kube-aggregator。6. API 安全
认证(Authentication)
支持多种方式:Ø Bearer Token:静态令牌或 ServiceAccount Token。
Ø X.509 证书:客户端证书。
Ø OAuth2:与外部身份提供商集成(如 OpenID Connect)。
鉴权(Authorization)
基于 RBAC(Role-Based Access Control):Ø Role 和 RoleBinding(命名空间级别)。
Ø ClusterRole 和 ClusterRoleBinding(集群级别)。
准入控制(Admission Control)
在请求持久化前执行额外检查或修改,例如:Ø NamespaceLifecycle:防止在终止的 Namespace 中创建资源。
Ø ResourceQuota:限制资源使用量。
7. API 发现
Kubernetes API 支持自动发现可用资源:
bash
# 查看所有 API 组和版本
kubectl get --raw /
# 查看特定组的资源
kubectl get --raw /apis/apps/v1
8. API 使用场景
集群管理:创建、更新、删除资源。监控与调试:通过 API 获取资源状态和日志。自动化工具:CI/CD 流水线集成(如 Argo CD、Jenkins)。自定义控制器:监听资源变化并触发业务逻辑。总结
Kubernetes API 是控制集群的核心入口,理解其设计原理和操作方法对运维和开发至关重要。通过结合 kubectl、客户端库(如 client-go)或直接调用 HTTP API,可以实现对集群的精细化管理与扩展。
来源:老客数据一点号