Kubernetes - 如何知道最新支持的 API 版本
Kubernetes - How to know latest supported API version
在给定 k8s 集群版本的情况下,是否有 table 可以告诉我应该使用哪一组 API 版本? Kubernetes 文档总是假设我总是有一个很好的、最新的集群(在撰写本文时为 1.12),但平台提供商并不总是生活在这个前沿,所以它很快就会变得令人沮丧。
更好的是,有没有 kubectl
命令我可以 运行 让我集群告诉我每种资源类型及其支持的最新 API 版本?
那将是 kubectl explain <resource>
命令。例如 pods:
$ kubectl explain pod
KIND: Pod
VERSION: v1 <== API version
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
...
与部署类似:
$ kubectl explain deploy
KIND: Deployment
VERSION: extensions/v1beta1 <== API Version
DESCRIPTION:
DEPRECATED - This group version of Deployment is deprecated by
apps/v1beta2/Deployment. See the release notes for more information.
Deployment enables declarative updates for Pods and ReplicaSets.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
...
此外,这里是 v1.12 API reference 例如。
要获取所有资源类型及其最新支持版本的列表,运行以下内容:
for kind in `kubectl api-resources | tail +2 | awk '{ print }'`; do kubectl explain $kind; done | grep -e "KIND:" -e "VERSION:"
它应该产生类似
的输出
KIND: Binding
VERSION: v1
KIND: ComponentStatus
VERSION: v1
KIND: ConfigMap
VERSION: v1
KIND: Endpoints
VERSION: v1
KIND: Event
VERSION: v1
...
正如@Rico 提到的,它们的关键在于 kubectl explain
命令。这可能有点脆弱,因为它取决于打印输出的格式,但它适用于 kubernetes 1.9.6
此外,可以从此处找到的 kubernetes API 文档(每个版本都有链接)以较低效率的方式收集信息 - https://kubernetes.io/docs/reference/#api-reference
我认为 kubectl api-versions
是一个更简单的选择:
kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
对于 kubernetes-1。17.x(与上面发布的格式不同)
for i in `kubectl api-resources | grep -v KIND | awk '{print $NF}'`;do kubectl explain ${i} | grep -e "KIND:" -e "VERSION:"; echo '----'; done
每种类型将显示 api
如果您要将集群升级到给定的 Kubernetes 版本,您可以使用工具 - kubepug 作为升级前检查,以找出该版本的变化。 Link - https://github.com/rikatz/kubepug
您可以使用 Move2Kube 并在上下文中对 Kubernetes 集群执行 move2kube collect
以获得集群支持的所有类型版本。它按照从最新到最旧的顺序给出了一个种类支持的所有版本的有序列表。
它将为您提供以下信息:
apiVersion: move2kube.konveyor.io/v1alpha1
kind: ClusterMetadata
metadata:
name: IBM-IKS
spec:
storageClasses:
- default
- ibmc-block-bronze
- ibmc-block-custom
- ibmc-block-gold
- ibmc-block-retain-bronze
- ibmc-block-retain-custom
- ibmc-block-retain-gold
- ibmc-block-retain-silver
- ibmc-block-silver
- ibmc-file-bronze
- ibmc-file-bronze-gid
- ibmc-file-custom
- ibmc-file-gold
- ibmc-file-gold-gid
- ibmc-file-retain-bronze
- ibmc-file-retain-custom
- ibmc-file-retain-gold
- ibmc-file-retain-silver
- ibmc-file-silver
- ibmc-file-silver-gid
apiKindVersionMap:
APIService:
- apiregistration.k8s.io/v1
BGPConfiguration:
- crd.projectcalico.org/v1
BGPPeer:
- crd.projectcalico.org/v1
Binding:
- v1
BlockAffinity:
- crd.projectcalico.org/v1
CSIDriver:
- storage.k8s.io/v1
- storage.k8s.io/v1beta1
CSINode:
- storage.k8s.io/v1
- storage.k8s.io/v1beta1
CatalogSource:
- operators.coreos.com/v1alpha1
CertificateSigningRequest:
- certificates.k8s.io/v1beta1
ClusterInformation:
- crd.projectcalico.org/v1
ClusterRole:
- rbac.authorization.k8s.io/v1
- rbac.authorization.k8s.io/v1beta1
ClusterRoleBinding:
- rbac.authorization.k8s.io/v1
- rbac.authorization.k8s.io/v1beta1
ClusterServiceVersion:
- operators.coreos.com/v1alpha1
ComponentStatus:
- v1
ConfigMap:
- v1
ControllerRevision:
- apps/v1
CronJob:
- batch/v1beta1
- batch/v2alpha1
CustomResourceDefinition:
- apiextensions.k8s.io/v1
DaemonSet:
- apps/v1
Deployment:
- apps/v1
EndpointSlice:
- discovery.k8s.io/v1beta1
Endpoints:
- v1
Event:
- events.k8s.io/v1beta1
- v1
FelixConfiguration:
- crd.projectcalico.org/v1
GlobalNetworkPolicy:
- crd.projectcalico.org/v1
GlobalNetworkSet:
- crd.projectcalico.org/v1
HorizontalPodAutoscaler:
- autoscaling/v1
- autoscaling/v2beta1
- autoscaling/v2beta2
HostEndpoint:
- crd.projectcalico.org/v1
IPAMBlock:
- crd.projectcalico.org/v1
IPAMConfig:
- crd.projectcalico.org/v1
IPAMHandle:
- crd.projectcalico.org/v1
IPPool:
- crd.projectcalico.org/v1
Ingress:
- networking.k8s.io/v1
- networking.k8s.io/v1beta1
- extensions/v1beta1
IngressClass:
- networking.k8s.io/v1
- networking.k8s.io/v1beta1
InstallPlan:
- operators.coreos.com/v1alpha1
Job:
- batch/v1
KubeControllersConfiguration:
- crd.projectcalico.org/v1
Lease:
- coordination.k8s.io/v1beta1
- coordination.k8s.io/v1
LimitRange:
- v1
LocalSubjectAccessReview:
- authorization.k8s.io/v1
- authorization.k8s.io/v1beta1
MutatingWebhookConfiguration:
- admissionregistration.k8s.io/v1beta1
- admissionregistration.k8s.io/v1
Namespace:
- v1
NetworkPolicy:
- networking.k8s.io/v1
NetworkSet:
- crd.projectcalico.org/v1
Node:
- v1
Operator:
- operators.coreos.com/v1
OperatorGroup:
- operators.coreos.com/v1
PersistentVolume:
- v1
PersistentVolumeClaim:
- v1
Pod:
- v1
PodDisruptionBudget:
- policy/v1beta1
PodSecurityPolicy:
- policy/v1beta1
PodTemplate:
- v1
PriorityClass:
- scheduling.k8s.io/v1beta1
- scheduling.k8s.io/v1
RBACSync:
- ibm.com/v1alpha1
ReplicaSet:
- apps/v1
ReplicationController:
- v1
ResourceQuota:
- v1
Role:
- rbac.authorization.k8s.io/v1
- rbac.authorization.k8s.io/v1beta1
RoleBinding:
- rbac.authorization.k8s.io/v1
- rbac.authorization.k8s.io/v1beta1
Secret:
- v1
SelfSubjectAccessReview:
- authorization.k8s.io/v1
- authorization.k8s.io/v1beta1
SelfSubjectRulesReview:
- authorization.k8s.io/v1
- authorization.k8s.io/v1beta1
Service:
- v1
ServiceAccount:
- v1
StatefulSet:
- apps/v1
StorageClass:
- storage.k8s.io/v1
- storage.k8s.io/v1beta1
SubjectAccessReview:
- authorization.k8s.io/v1
- authorization.k8s.io/v1beta1
Subscription:
- operators.coreos.com/v1alpha1
TokenReview:
- authentication.k8s.io/v1
- authentication.k8s.io/v1beta1
ValidatingWebhookConfiguration:
- admissionregistration.k8s.io/v1beta1
- admissionregistration.k8s.io/v1
VolumeAttachment:
- storage.k8s.io/v1
- storage.k8s.io/v1beta1
在给定 k8s 集群版本的情况下,是否有 table 可以告诉我应该使用哪一组 API 版本? Kubernetes 文档总是假设我总是有一个很好的、最新的集群(在撰写本文时为 1.12),但平台提供商并不总是生活在这个前沿,所以它很快就会变得令人沮丧。
更好的是,有没有 kubectl
命令我可以 运行 让我集群告诉我每种资源类型及其支持的最新 API 版本?
那将是 kubectl explain <resource>
命令。例如 pods:
$ kubectl explain pod
KIND: Pod
VERSION: v1 <== API version
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
...
与部署类似:
$ kubectl explain deploy
KIND: Deployment
VERSION: extensions/v1beta1 <== API Version
DESCRIPTION:
DEPRECATED - This group version of Deployment is deprecated by
apps/v1beta2/Deployment. See the release notes for more information.
Deployment enables declarative updates for Pods and ReplicaSets.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
...
此外,这里是 v1.12 API reference 例如。
要获取所有资源类型及其最新支持版本的列表,运行以下内容:
for kind in `kubectl api-resources | tail +2 | awk '{ print }'`; do kubectl explain $kind; done | grep -e "KIND:" -e "VERSION:"
它应该产生类似
的输出KIND: Binding
VERSION: v1
KIND: ComponentStatus
VERSION: v1
KIND: ConfigMap
VERSION: v1
KIND: Endpoints
VERSION: v1
KIND: Event
VERSION: v1
...
正如@Rico 提到的,它们的关键在于 kubectl explain
命令。这可能有点脆弱,因为它取决于打印输出的格式,但它适用于 kubernetes 1.9.6
此外,可以从此处找到的 kubernetes API 文档(每个版本都有链接)以较低效率的方式收集信息 - https://kubernetes.io/docs/reference/#api-reference
我认为 kubectl api-versions
是一个更简单的选择:
kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
对于 kubernetes-1。17.x(与上面发布的格式不同)
for i in `kubectl api-resources | grep -v KIND | awk '{print $NF}'`;do kubectl explain ${i} | grep -e "KIND:" -e "VERSION:"; echo '----'; done
每种类型将显示 api
如果您要将集群升级到给定的 Kubernetes 版本,您可以使用工具 - kubepug 作为升级前检查,以找出该版本的变化。 Link - https://github.com/rikatz/kubepug
您可以使用 Move2Kube 并在上下文中对 Kubernetes 集群执行 move2kube collect
以获得集群支持的所有类型版本。它按照从最新到最旧的顺序给出了一个种类支持的所有版本的有序列表。
它将为您提供以下信息:
apiVersion: move2kube.konveyor.io/v1alpha1
kind: ClusterMetadata
metadata:
name: IBM-IKS
spec:
storageClasses:
- default
- ibmc-block-bronze
- ibmc-block-custom
- ibmc-block-gold
- ibmc-block-retain-bronze
- ibmc-block-retain-custom
- ibmc-block-retain-gold
- ibmc-block-retain-silver
- ibmc-block-silver
- ibmc-file-bronze
- ibmc-file-bronze-gid
- ibmc-file-custom
- ibmc-file-gold
- ibmc-file-gold-gid
- ibmc-file-retain-bronze
- ibmc-file-retain-custom
- ibmc-file-retain-gold
- ibmc-file-retain-silver
- ibmc-file-silver
- ibmc-file-silver-gid
apiKindVersionMap:
APIService:
- apiregistration.k8s.io/v1
BGPConfiguration:
- crd.projectcalico.org/v1
BGPPeer:
- crd.projectcalico.org/v1
Binding:
- v1
BlockAffinity:
- crd.projectcalico.org/v1
CSIDriver:
- storage.k8s.io/v1
- storage.k8s.io/v1beta1
CSINode:
- storage.k8s.io/v1
- storage.k8s.io/v1beta1
CatalogSource:
- operators.coreos.com/v1alpha1
CertificateSigningRequest:
- certificates.k8s.io/v1beta1
ClusterInformation:
- crd.projectcalico.org/v1
ClusterRole:
- rbac.authorization.k8s.io/v1
- rbac.authorization.k8s.io/v1beta1
ClusterRoleBinding:
- rbac.authorization.k8s.io/v1
- rbac.authorization.k8s.io/v1beta1
ClusterServiceVersion:
- operators.coreos.com/v1alpha1
ComponentStatus:
- v1
ConfigMap:
- v1
ControllerRevision:
- apps/v1
CronJob:
- batch/v1beta1
- batch/v2alpha1
CustomResourceDefinition:
- apiextensions.k8s.io/v1
DaemonSet:
- apps/v1
Deployment:
- apps/v1
EndpointSlice:
- discovery.k8s.io/v1beta1
Endpoints:
- v1
Event:
- events.k8s.io/v1beta1
- v1
FelixConfiguration:
- crd.projectcalico.org/v1
GlobalNetworkPolicy:
- crd.projectcalico.org/v1
GlobalNetworkSet:
- crd.projectcalico.org/v1
HorizontalPodAutoscaler:
- autoscaling/v1
- autoscaling/v2beta1
- autoscaling/v2beta2
HostEndpoint:
- crd.projectcalico.org/v1
IPAMBlock:
- crd.projectcalico.org/v1
IPAMConfig:
- crd.projectcalico.org/v1
IPAMHandle:
- crd.projectcalico.org/v1
IPPool:
- crd.projectcalico.org/v1
Ingress:
- networking.k8s.io/v1
- networking.k8s.io/v1beta1
- extensions/v1beta1
IngressClass:
- networking.k8s.io/v1
- networking.k8s.io/v1beta1
InstallPlan:
- operators.coreos.com/v1alpha1
Job:
- batch/v1
KubeControllersConfiguration:
- crd.projectcalico.org/v1
Lease:
- coordination.k8s.io/v1beta1
- coordination.k8s.io/v1
LimitRange:
- v1
LocalSubjectAccessReview:
- authorization.k8s.io/v1
- authorization.k8s.io/v1beta1
MutatingWebhookConfiguration:
- admissionregistration.k8s.io/v1beta1
- admissionregistration.k8s.io/v1
Namespace:
- v1
NetworkPolicy:
- networking.k8s.io/v1
NetworkSet:
- crd.projectcalico.org/v1
Node:
- v1
Operator:
- operators.coreos.com/v1
OperatorGroup:
- operators.coreos.com/v1
PersistentVolume:
- v1
PersistentVolumeClaim:
- v1
Pod:
- v1
PodDisruptionBudget:
- policy/v1beta1
PodSecurityPolicy:
- policy/v1beta1
PodTemplate:
- v1
PriorityClass:
- scheduling.k8s.io/v1beta1
- scheduling.k8s.io/v1
RBACSync:
- ibm.com/v1alpha1
ReplicaSet:
- apps/v1
ReplicationController:
- v1
ResourceQuota:
- v1
Role:
- rbac.authorization.k8s.io/v1
- rbac.authorization.k8s.io/v1beta1
RoleBinding:
- rbac.authorization.k8s.io/v1
- rbac.authorization.k8s.io/v1beta1
Secret:
- v1
SelfSubjectAccessReview:
- authorization.k8s.io/v1
- authorization.k8s.io/v1beta1
SelfSubjectRulesReview:
- authorization.k8s.io/v1
- authorization.k8s.io/v1beta1
Service:
- v1
ServiceAccount:
- v1
StatefulSet:
- apps/v1
StorageClass:
- storage.k8s.io/v1
- storage.k8s.io/v1beta1
SubjectAccessReview:
- authorization.k8s.io/v1
- authorization.k8s.io/v1beta1
Subscription:
- operators.coreos.com/v1alpha1
TokenReview:
- authentication.k8s.io/v1
- authentication.k8s.io/v1beta1
ValidatingWebhookConfiguration:
- admissionregistration.k8s.io/v1beta1
- admissionregistration.k8s.io/v1
VolumeAttachment:
- storage.k8s.io/v1
- storage.k8s.io/v1beta1