【问题标题】:error validating data: the server could not find the requested resource;验证数据错误:服务器找不到请求的资源;
【发布时间】:2020-01-29 11:18:48
【问题描述】:

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

非常感谢任何帮助

谢谢

【问题讨论】:

  • yaml缩进不正确,你可以在yamllint.com验证你的yaml

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


【解决方案1】:

我匹配了 Kubernetes 网页中的文档,它是 代码和我下面写的一样……

您能否链接与您的代码进行比较的文档片段?正如其他人在他们的答案和 cmets 中已经建议的那样,您的 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 之前删除一个不必要的空格(它应该与ports 处于同一级别)yaml validador 会告诉您您的yaml 语法是正确的。虽然它可能已经是一个有效的yaml,但这并不意味着它是 Kubernetes 的有效输入,它需要遵循特定规则的特定结构。

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

来自服务器的错误(BadRequest):创建“pod.yml”时出错:pod in 版本“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"

【讨论】:

  • 您应该获得奖牌,让互联网变得更美好。我喜欢你的回复很有帮助。
【解决方案2】:

您的 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

【讨论】:

    【解决方案3】:

    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
    

    【讨论】:

      【解决方案4】:

      对于由于一些类似问题而偶然发现此问题的人。我在下面的答案中找到了对我有用的解决方案。我首先忽略了它,因为它无法解决问题……但它确实解决了。

      解决方案基本上是选中 Kubectl 配置窗口中高级下拉菜单下方的“检查最新版本”框或在 Kubernetes 任务输入下添加以下行:

      checkLatest: true
      

      回答链接: ADO: error validating data: the server could not find the requested

      这又链接到这个: Release Agent job kubectl apply returns 'error validating data'

      【讨论】:

        猜你喜欢
        • 2019-11-14
        • 2017-06-23
        • 2021-05-10
        • 2020-06-08
        • 2021-08-07
        • 2019-01-11
        • 1970-01-01
        • 1970-01-01
        • 2015-11-15
        相关资源
        最近更新 更多