本笔记所述的“对象”是指 Service、Pod、Deployment 等等对象。

如何查看所有可以使用的对象?

方法一、kubectl api-resoureces

# 查看全部资源对象
kubectl api-resources

# 查看属于命名空间的资源
kubectl api-resources --namespaced=true

# 查看属于非命名空间的资源
kubectl api-resources --namespaced=false

方法二、the API Reference guide

Kubernetes/Reference

Kubernetes API v1.18/API OVERVIEW
Kubernetes API v1.12/API OVERVIEW

如何指定 apiVerison 属性?

简单的方法

我们以 1.18 为例,我们需要定义 Deployment 资源,按如下步骤进行操作:
1)找到官方文档(Kubernetes API v1.18/API OVERVIEW)
2)找到 Deployment 对象,并查看 example 部分。

复杂的方法

每个对象的定义都要指定apiVerison字段,但是这个字段到底应该写什么呢?

	第一步,执行kubectl api-resources命令,查看所有的对象及所属的「API组」,即「APIGROUP」列的值。
	第二步,执行kubectl api-versions命令,查看APIGROUP所拥有的版本。列表项目的结构通常是:<APIGROUP>/<APIVERSION>
	第三步,实际到第二步骤,我们就已经找到对象可用的apiVersion了。第三步是为了查看对应apiVersion的信息,比如:''kubectl explain configmap --api-version="<APIGROUP>/<APIVERSION>"''

如下操作,查看clusterroles的apiVerion值:

#!/bin/sh

# kubectl api-resources | grep clusterroles
clusterroles                                   rbac.authorization.k8s.io      false        ClusterRole

# kubectl api-versions | grep -i 'rbac.authorization.k8s.io'
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1

# kubectl explain clusterroles --api-version='rbac.authorization.k8s.io/v1'
# kubectl explain clusterroles --api-version='rbac.authorization.k8s.io/v1beta1'

获取特定版本的已定义对象,可以执行kubectl get <API_RESOURCE_NAME>.<API_VERSION>.<API_GROUP>命令。

例如:kubectl get deployments.v1.apps -n kube-system

 

参考文献

Where is the complete list of kubernetes objects?
Kubernetes API Resources: Which Group and Version to Use?
Not All Objects are in a Namespace