无法在本地 kubernetes 集群中部署 emissary-ingress。因“验证数据错误:ValidationError(CustomResourceDefinition.spec)”而失败
Posted
技术标签:
【中文标题】无法在本地 kubernetes 集群中部署 emissary-ingress。因“验证数据错误:ValidationError(CustomResourceDefinition.spec)”而失败【英文标题】:Unable to deploy emissary-ingress in local kubernetes cluster. Fails with `error validating data: ValidationError(CustomResourceDefinition.spec)` 【发布时间】:2021-11-25 01:37:16 【问题描述】:我正在尝试使用 instructions here 安装 emissary-ingress。
它开始失败并出现错误no matches for kind "CustomResourceDefinition" in version "apiextensions.k8s.io/v1beta"
。我在 Stack Overflow 上搜索并找到了一个 answer,它说我将 apiextensions.k8s.io/v1beta1
更新为 apiextensions.k8s.io/v1
。
它还要求使用我的 kubectl 已经使用的 admissionregistration.k8s.io/v1
。
当我运行kubectl apply -f filename.yml
命令时,上面的错误消失了,一个新的错误开始出现错误:error validating data: ValidationError(CustomResourceDefinition.spec): unknown field "validation" in io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.CustomResourceDefinitionSpec;
接下来我该怎么做?
我的 kubectl 版本 - 客户端版本:version.InfoMajor:"1", Minor:"21", GitVersion:"v1.21.4", GitCommit:"3cce4a82b44f032d0cd1a1790e6d2f5a55d20aae", GitTreeState:"clean", BuildDate:"2021 -08-11T18:16:05Z",GoVersion:"go1.16.7",编译器:"gc",平台:"windows/amd64" 服务器版本:version.InfoMajor:"1", Minor:"22", GitVersion:"v1.22.2", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"clean", BuildDate:"2021-09-15T21:32: 41Z", GoVersion:"go1.16.8", 编译器:"gc", 平台:"linux/amd64"
minikube 版本 - minikube 版本:v1.23.2 提交:0a0ad764652082477c00d51d2475284b5d39ceed
编辑:
自定义资源定义yml文件:here
rbac yml 文件:here
【问题讨论】:
你能分享你的 YAML 文件来看看吗? @VicenteAyala 编辑了帖子以放置指向 yml 的链接 感谢您分享您的 YAML 文件。我已经查看了它们以搜索语法错误,但我没有找到任何人,但我发现当您在 yaml 文件中使用---
并且当它编译时,引擎解释为同一个 yaml 文件中的新部署文档。
yaml 文档由---
分隔,如果任何流(例如文件)包含多个文档,则应使用 yaml.load_all 函数而不是 yaml.load。代码:import yaml
stream = open("test", "r") docs = yaml.load_all(stream) for doc in docs: for k,v in doc.items(): print k, "->", v print "\n",
在这里您可以查看有关您的问题的帖子。 ***.com/questions/14359557/…
这些 yaml 文件由 emissary-ingress 提供。我不是在生成它们。因此,必须有意识地分离成不同的部署。
【参考方案1】:
validation
字段已在 apiextensions.k8s.io/v1 中正式弃用。
根据官方 kubernetes 文档,您应该使用 schema
代替 validation.
这是使用schema
而不是validation:
的示例代码
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: crontabs.stable.example.com
spec:
group: stable.example.com
versions:
- name: v1
served: true
storage: true
---> schema: <---
# openAPIV3Schema is the schema for validating custom objects.
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?)4$'
image:
type: string
replicas:
type: integer
minimum: 1
maximum: 10
【讨论】:
以上是关于无法在本地 kubernetes 集群中部署 emissary-ingress。因“验证数据错误:ValidationError(CustomResourceDefinition.spec)”而失败的主要内容,如果未能解决你的问题,请参考以下文章