1.什么是API Resource

大白话就是:deployment,statefulset,service等都可以抽象为k8s的API对象资源。这些都是抽象出来的概念。

1.1.获取所有的API Resouce

kubectl api-resources
NAME                              SHORTNAMES   APIGROUP                        NAMESPACED   KIND
bindings                                                                       true         Binding
componentstatuses                 cs                                           false              
...

2.什么是API Version

k8s在不同的API路径(可以理解为请求web服务的的URL)下面支持了多个版本,不同的版本意味着不同级别的稳定性:

  • Alpha 级别:非常不稳定
  • Beta 级别:比较稳定
  • v1级别:稳定版本

2.1.获取所有的API Version

kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
...

3.API路径

请求获取一个Etcd里面的API对象,是由Group(API组)Version(API版本)Resouce(API资源类型)三部分组成。(可以理解为请求web服务的的URL,/api是一个组,/apis又是一个组

类型描述路径
核心组API比如node,pod,service比如:/api/v1
指定组API比如deployment,cronjob比如:/api/batch/v1
系统组API比如metries,health比如:/metries

在这里插入图片描述

3.1.获取所有的API路径

# 获取所有的API路径
kubectl get --raw /
{
  "paths": [
    "/api",
    "/api/v1",
    "/apis",
   	...
    "/healthz/poststarthook/apiservice-openapi-controller"
  ]
}
# 获取路径下面的所有的API对象
 kubectl get --raw /apis/batch/v1 | python -m json.tool
{
    "apiVersion": "v1",
    "groupVersion": "batch/v1",
    "kind": "APIResourceList",
    "resources": [
        {
            "categories": [
                "all"
            ],
            "kind": "Job",
            "name": "jobs",
            "namespaced": true,
            "singularName": "",
            "storageVersionHash": "mudhfqk/qZY=",
            "verbs": [
                "create",
                "delete",
                "deletecollection",
                "get",
                "list",
                "patch",
                "update",
                "watch"
            ]
        },
        {
            "kind": "Job",
            "name": "jobs/status",
            "namespaced": true,
            "singularName": "",
            "verbs": [
                "get",
                "patch",
                "update"
            ]
        }
    ]
}

4.kind和 请求路径中的Resource的区别

Resource指的是HTTP Restful API请求路径中的资源,而kind对应的是系统中真正的实例

如果我们创建一个job对象,我们的YAML文件的声明需要这样写

apiVersion: batch/v1
kind: Job
metadata:
  name: demo
  namespace: default
.......

batch就是组(Group):可以理解为一组URL的集合
v1:就是API版本
kind:API 对象的类型,而资源Resource通常为kind的小写复数词
总结:API Group、Version、和 Kind就定义了一个HTTP路径,然后在kub-apiserver对这个URL进行了监听,然后把这个请求交给对应的控制器进行处理
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐