验证数据时出错:服务器找不到请求的资源;

时间:2019-09-30 07:19:52

标签: kubernetes kubernetes-helm kubernetes-ingress kubernetes-pod

运行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"}

非常感谢您的帮助

谢谢

4 个答案:

答案 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定义中的imagenameports内联。或者您可以使用以下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无效。您确定不使用某些过时的教程或文档吗?

让我们逐步对其进行调试:

  1. 当我使用与您在问题中发布的代码完全相同时,我收到的错误消息与您发布的错误消息完全不同:
  

错误:解析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 的有效输入,它需要遵循某些规则的特定结构。

  1. 让我们再试一次...现在kubectl apply -f pod.yml返回完全不同的错误:
  

来自服务器的错误(BadRequest):创建“ pod.yml”时出错:   版本“ v1”不能作为Pod处理:未注册任何种类的“ pod”   方案中的版本“ v1”   “ k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go:29”

快速搜索也会为您提供答案。 kind:键的正确值为Pod,而不是pod

  1. 修复该问题后,让我们再次运行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
  1. 如果再次运行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'