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

Ral*_*lph 4 kubernetes traefik

我有一个关于 Kubernetes 中 apiVersion 的使用的问题。

例如,我正在尝试将 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
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下方式部署我的对象时

$ kubectl apply -f middleware.yaml
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

unable to recognize "middleware.yaml": no matches for kind "Middleware" in version "traefik.containo.us/v1alpha1"
Run Code Online (Sandbox Code Playgroud)

同一个对象在 Traefik 2.2.0 版本中工作正常,但在 2.2.1 版本中则不行。

在 traefik 文档中,没有其他使用版本“traefik.containo.us/v1alpha1”的示例

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

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

Arg*_*dhu 6

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

kubectl api-versions | grep traefik
traefik.containo.us/v1alpha1
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

在这里检查 traefik v1 与 v2