如何在 Kubernetes 中找到正确的 api 版本?

How to find the correct api version in Kubernetes?

我对 apiVersion 在 Kuberntes 中的使用有疑问。

例如,我正在尝试将 traefik 2.2.1 部署到我的 kubernetes 集群中。我有一个像这样的 traefik 中间件部署定义:

---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: https-redirect
spec:
  redirectScheme:
    scheme: https
    permanent: true
    port: 443

当我尝试使用

部署我的对象时
$ kubectl apply -f middleware.yaml

我收到以下错误消息:

unable to recognize "middleware.yaml": no matches for kind "Middleware" in version "traefik.containo.us/v1alpha1"

同一个对象在 Traefik 2.2.0 版中运行良好,但在 2.2.1 版中运行不佳。

在 traefik 文档中没有使用版本 "traefik.containo.us/v1alpha1"

的示例

我不认为我的部署问题是 traefik 特有的。这是版本冲突的普遍问题。有什么方法可以确定我的集群环境支持哪些 apiVersions?

关于使用已弃用的 apiVersions 发布了太多过时的示例,我想知道是否有某种官方 apiVersion 目录用于 kubernetes?或者也许有一些 kubectl 命令我可以要求 apiversions?

很可能没有安装 traefik v2 的 crds。您可以使用以下命令列出 Kubernetes 集群上可用的 API 版本。

kubectl api-versions | grep traefik
traefik.containo.us/v1alpha1

使用以下命令检查安装在 Kubernetes 集群上的 crds。

kubectl get crds
NAME                                   CREATED AT
ingressroutes.traefik.containo.us      2020-05-09T13:58:09Z
ingressroutetcps.traefik.containo.us   2020-05-09T13:58:09Z
ingressrouteudps.traefik.containo.us   2020-05-09T13:58:09Z
middlewares.traefik.containo.us        2020-05-09T13:58:09Z
tlsoptions.traefik.containo.us         2020-05-09T13:58:09Z
tlsstores.traefik.containo.us          2020-05-09T13:58:09Z
traefikservices.traefik.containo.us    2020-05-09T13:58:09Z

检查 traefik v1 与 v2 here

我发现如果我 运行 kubectl apply 几分钟后它就会工作。