在版本“ extensions / v1beta1”中没有种类“部署”的匹配项

dan*_*dan 3 kubernetes

我在部署mojaloop .kubernetes时遇到问题,并显示错误日志,例如

我已经检查了我的Kubernetes版本,而1.16是该版本,所以我该如何解决API版本的这种问题。从调查中发现Kubernetes不支持apps / v1beta2,apps / v1beta1,所以我如何使Kubernetes成为使用当前未弃用的版本或受支持的版本我是Kubernetes的新手,任何可以支持我的人我都很高兴

错误:验证失败:[无法识别“”:版本“ apps / v1beta2”中没有与类型“ Deployment”匹配,无法识别“”:版本“ extensions / v1beta1”中没有与类型“ Deployment”匹配,无法识别“”:版本“ apps / v1beta2”中没有匹配类型“ StatefulSet”,无法识别“”:版本“ apps / v1beta1”中没有匹配类型“ StatefulSet”]

小智 16

要将旧部署转换为 apps/v1,您可以运行:

kubectl convert -f ./my-deployment.yaml --output-version apps/v1
Run Code Online (Sandbox Code Playgroud)

  • 为我解决了 - 谢谢!请注意终端的未来版本:`kubectl Convert 已弃用,并将在未来版本中删除。“为了进行转换,kubectl 将对象应用到集群,然后 kubectl 获取所需的版本”` (2认同)
  • 我收到“错误:未知命令“convert”为“kubectl””。我有 **kubectl** 版本`客户端版本:version.Info{主要:“1”,次要:“20”,GitVersion:“v1.20.4”,...` (2认同)

Bru*_*ego 11

作为替代,您可以手动更改。获取舵图:

helm fetch --untar stable/metabase
Run Code Online (Sandbox Code Playgroud)

访问图表文件夹:

cd ./metabase
Run Code Online (Sandbox Code Playgroud)

更改 API 版本:

sed -i 's|extensions/v1beta1|apps/v1|g' ./templates/deployment.yaml
Run Code Online (Sandbox Code Playgroud)

添加spec.selector.matchLabels

spec:
[...]
selector:
    matchLabels:
    app: {{ template "metabase.name" . }}
[...]
Run Code Online (Sandbox Code Playgroud)

最后安装你修改过的图表:

helm install ./ \
  -n metabase \
  --namespace metabase \
  --set ingress.enabled=true \
  --set ingress.hosts={metabase.$(minikube ip).nip.io}
Run Code Online (Sandbox Code Playgroud)

享受!


Pjo*_*erS 10

在Kubernetes 1.16中api已进行了一些更改。

您可以使用以下命令检查哪些API支持当前的Kubernetes对象

$ kubectl api-resources | grep deployment
deployments                       deploy       apps                           true         Deployment
Run Code Online (Sandbox Code Playgroud)

这意味着只有apiVersion具有才适用apps于Deployments(extensions不支持Deployment)。与StatefulSet相同的情况。

您只需要将Deployment和StatefuSet apiVersion更改为即可apiVersion: apps/v1

如果这样做没有帮助,请添加您的YAML问题。

编辑 由于问题是由部署中包含旧apiVersions的HELM模板引起的,而版本1.16中不支持该版本,因此有2种可能的解决方案:

1. git clone整个回购和替换apiVersion到apps/v1的所有模板/ deployment.yaml使用脚本
2.使用旧版本的Kubernetes的(1.15)时,验证接受extensionsapiVersion用于DeployentStatefulSet

  • 我检查了这个 mojaloop/mojaloop 舵图。不幸的是,所有带有部署的模板都有 apiVersions:`extensions/v1beta1`。可能的解决方法之一是“git clone”整个存储库,并使用脚本“find”将所有 templates/deployment.yaml 中的 apiVersion 替换为“apps/v1”。-name 'deployment.yaml' | xargs -n 1 perl -pi -e 's/(apps\/v1beta2)|(extensions\/v1beta1)/apps\/v1/g'.` 第二个解决方法可能是在验证器时使用旧版本的 Kubernetes (1.15)接受 Deployent 和 StatefulSet 的扩展作为 apiVersion。 (3认同)

小智 8

简而言之,您不会强制当前安装使用过时版本的 API;您修复配置文件中的版本。如果您想检查当前 kube 支持哪个版本,请运行:

root@ubn64:~# kubectl api-versions | grep -i apps

apps/v1
Run Code Online (Sandbox Code Playgroud)


San*_*noj 7

我收到以下错误 -
错误:无法识别“deployment.yaml”:版本“extensions/v1beta1”中没有与类型“Deployment”匹配的内容

对我有用的解决方案 -

将deployment.yaml中的行从 apiVersion:extensions/v1beta1 修改为 apiVersion:apps/v1

原因 - 我们升级了 K8 集群,因此发生了此错误。


sur*_*ren 5

我更喜欢kubectl explain

# kubectl explain deploy
KIND:     Deployment
VERSION:  apps/v1

DESCRIPTION:
     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/sig-architecture/api-conventions.md#resources

   kind <string>
     Kind is a string value representing the REST resource this object
     represents. Servers may infer this from the endpoint the client submits
     requests to. Cannot be updated. In CamelCase. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

   metadata     <Object>
     Standard object metadata.

   spec <Object>
     Specification of the desired behavior of the Deployment.

   status       <Object>
     Most recently observed status of the Deployment.
Run Code Online (Sandbox Code Playgroud)