API Server
kube-apiserver 是 Kubernetes 最重要的核心组件之一,主要提供以下的功能
- 提供集群管理的 REST API 接口,包括认证授权、数据校验以及集群状态变更等
- 提供其他模块之间的数据交互和通信的枢纽(其他模块通过 API Server 查询或修改数据,只有 API Server 才直接操作 etcd)
工作原理
kube-apiserver 提供了 Kubernetes 的 REST API,实现了认证、授权、准入控制等安全校验功能,同时也负责集群状态的存储操作(通过 etcd)。
API 访问
有多种方式可以访问 Kubernetes 提供的 REST API:
1 | 1、kubectl 命令行工具 |
kubectl
1 | kubectl get --raw /api/v1/namespaces |
kubectl proxy
1 | $ kubectl proxy --port=8080 & |
curl
1 | # In Pods with service account. |
API 资源使用
API Resources
我们可以通过下面的命令来获取Kubernetes
集群支持的所有 API 资源: (1.11以上版本才可以有此命令)
1 | kubectl api-resources -o wide |
上面的命令输出了很多有用的信息:
SHORTNAMES
- 资源名称的简写,比如 deployments 简写就是 deploy,我们可以将这些快捷方式与kubectl
一起使用APIGROUP
- 我们可以查看官方文档以了解更多信息,但简而言之,您将在yaml
文件中使用它像apiVersion:<APIGROUP>/v1
KIND
- 资源名称VERBS
- 可用的方法,在您想要定义ClusterRole RBAC
规则时也很有用,您还可以选择获取特定 API 组的 API 资源,例如:
1 | kubectl api-resources --api-group apps -o wide |
对于上面的每种资源类型,我们都可以使用kubectl explain
命令来获取有关的资源详细信息:
1 | kubectl explain configmap |
kubectl explain
命令非常有用,特别是在我们不知道该如何编写YAML
文件的时候,就可以使用改命令来帮助我们获得更多提示信息。
需要注意的是explain
命令可能会显示旧的group/version
,我们可以通过--api-version
参数显示设置它,比如: 请注意,explain可能会显示旧组/版本,但您可以使用–api-version显式设置它,例如:
1 | kubectl explain replicaset --api-version apps/v1 |
API Versions
我们也可以使用下面的命令来获取集群支持的所有 API 版本:
1 | kubectl api-versions |