运行Pod时出现以下错误。我与Kubernetes网页中的文档相匹配,它的代码与我在下面编写的代码相同,但最终还是出现以下错误。
错误验证数据:服务器找不到请求的资源;如果您选择忽略这些错误,请使用--validate = false
关闭验证apiVersion: v1
kind: pod
metadata:
name: helloworld-deployment
labels:
app: helloworld
spec:
containers:
- name: helloworld
image: anishanil/kubernetes:node
ports:
containerPort: 3000
resources:
limits:
memory: "100Mi"
cpu: "100m"
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.1", GitCommit:"b0b7a323cc5a4a2019b2e9520c21c7830b7f708e", GitTreeState:"clean", BuildDate:"2017-04-03T20:44:38Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.6+IKS", GitCommit:"44b769243cf9b3fe09c1105a4a8749e8ff5f4ba8", GitTreeState:"clean", BuildDate:"2019-08-21T12:48:49Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
非常感谢您的帮助
谢谢
答案 0 :(得分:1)
您的Yaml错误。您可以使用Yaml验证工具进行检查。或改为使用以下内容:
---
apiVersion: v1
kind: pod
metadata:
labels:
app: helloworld
name: helloworld-deployment
spec:
containers:
-
image: "anishanil/kubernetes:node"
name: helloworld
ports:
containerPort: 3000
resources:
limits:
cpu: 100m
memory: 100Mi
答案 1 :(得分:1)
resources
应该与yaml定义中的image
,name
,ports
内联。或者您可以使用以下yaml。
apiVersion: v1
kind: pod
metadata:
labels:
app: helloworld
name: helloworld-deployment
spec:
containers:
- image: "anishanil/kubernetes:node"
name: helloworld
ports:
containerPort: 3000
resources:
limits:
cpu: 100m
memory: 100Mi
答案 2 :(得分:1)
我与Kubernetes网页中的文档匹配,它是 该代码与我在下面编写的代码相同...
您可以链接与代码进行比较的文档片段吗?正如其他人在其答案和评论中已经建议的那样,您的yaml
无效。您确定不使用某些过时的教程或文档吗?
让我们逐步对其进行调试:
错误:解析pod.yml时发生错误:将YAML转换为JSON时发生错误:yaml: 第12行:找不到预期的密钥
好,让我们转到第12行,检查问题出在哪里:
11 ports:
12 containerPort: 3000
13 resources:
14 limits:
15 memory: "100Mi"
16 cpu: "100m"
第12行本身看起来完全没问题,因此问题应该出在其他地方。让我们使用this在线Yaml验证程序进一步调试它。这也表明此yaml
在语法上是不正确的,但是它指出了不同的行:
():在解析块映射时未找到预期的密钥 在第9行第5列
如果仔细看一下上面引用的代码片段,您可能会注意到第13行的缩进级别看起来很奇怪。当您在resources
之前删除一个不必要的空间(该空间应该与端口位于同一级别)时, yaml validador 会告诉您yaml
语法是正确的。尽管它可能已经是有效的yaml
,但这并不意味着它是 Kubernetes 的有效输入,它需要遵循某些规则的特定结构。
kubectl apply -f pod.yml
返回完全不同的错误:来自服务器的错误(BadRequest):创建“ pod.yml”时出错: 版本“ v1”不能作为Pod处理:未注册任何种类的“ pod” 方案中的版本“ v1” “ k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go:29”
快速搜索也会为您提供答案。 kind:
键的正确值为Pod
,而不是pod
。
kubectl apply -f pod.yml
。现在它给了我们不同的错误:错误:验证“ pod.yml”时出错:验证数据时出错: ValidationError(Pod.spec.containers [0] .ports):的无效类型 io.k8s.api.core.v1.Container.ports:已获取“地图”,预期为“数组”;
这很容易解释,这意味着您不应在预期会出现“ array” 且错误消息准确的地方使用“ map” 指出哪里,即:
Pod.spec.containers[0].ports
。
让我们纠正这个片段:
11 ports:
12 containerPort: 3000
在yaml格式中,-
字符表示数组的开始,因此应如下所示:
11 ports:
12 - containerPort: 3000
kubectl apply -f pod.yml
,我们最终会收到预期的消息:创建了pod / helloworld-deployment
Pod
定义的最终正确版本如下:
apiVersion: v1
kind: Pod
metadata:
name: helloworld-deployment
labels:
app: helloworld
spec:
containers:
- name: helloworld
image: anishanil/kubernetes:node
ports:
- containerPort: 3000
resources:
limits:
memory: "100Mi"
cpu: "100m"
答案 3 :(得分:0)
对于因一些类似问题而偶然发现此问题的人。我在下面的答案中找到了一个对我有用的解决方案。我首先忽略了它,因为它无法解决问题......但它确实解决了。
解决方案基本上是在 Kubectl 配置窗口中的高级下拉列表下方选中“检查最新版本”框或在 Kubernetes 任务输入下添加以下行:
checkLatest: true
回答链接: ADO: error validating data: the server could not find the requested
依次链接到此: Release Agent job kubectl apply returns 'error validating data'