ошибка при проверке данных: серверу не удалось найти запрошенный ресурс; - PullRequest
0 голосов
/ 30 сентября 2019

Я вижу следующую ошибку при запуске модуля. Я совпал с документацией на веб-странице Kubernetes, и этот код совпадает с тем, который я написал ниже, но Istill в итоге приводит к ошибке ниже.


ошибка при проверке данных: сервер не может найтизапрашиваемый ресурс;если вы решите игнорировать эти ошибки, отключите проверку с помощью --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"}

Любая помощь будет высоко оценена

Спасибовы

Ответы [ 3 ]

1 голос
/ 30 сентября 2019

resources должно быть встроено в image, name, ports в определении 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 голос
/ 30 сентября 2019

Я сопоставил с документацией на веб-странице 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 выглядит фактически полностью нормально, поэтомупроблема должна быть в другом месте. Давайте отладим его дальше, используя этот онлайн-валидатор yaml. Это также предполагает, что это yaml синтаксически неверно, однако оно указало на другую строку:

(): не нашел ожидаемый ключ при синтаксическом анализе сопоставления блоков в столбце 9 строки 5

Если вы внимательно посмотрите на приведенный выше фрагмент кода, вы можете заметить, что уровень отступа в строке 13 выглядит довольно странно. Когда вы удаляете один ненужный пробел прямо перед resources (он должен быть на том же уровне, что и порты) yaml validador сообщит вам, что ваш синтаксис yaml правильный. Хотя это может быть уже действительный yaml, это не значит, что это действительный ввод для Kubernetes , который требует определенной структуры, следуя определенным правилам.

Давайте попробуем еще раз ... Теперь kubectl apply -f pod.yml возвращает совершенно другую ошибку:

Ошибка сервера (BadRequest): ошибка при создании «pod.yml»: pod в версии«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: есть «карта», ожидаемый «массив»;

, что само собой разумеется и означает, что вы не должны использовать "map" в месте, где ожидался "array" , и в сообщении об ошибке точно указано, где, а именно:

Pod.spec.containers[0].ports.

Давайте исправим этот фрагмент:

11     ports:
12       containerPort: 3000

В формате yaml символ - подразумевает начало массива, поэтому он должен выглядеть следующим образом:

11     ports:
12     - containerPort: 3000
Если мы снова запустим kubectl apply -f pod.yml, мы, наконец, получим ожидаемое сообщение:

pod / helloworld-deployed creation

Окончательная, правильная версияопределения 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"
1 голос
/ 30 сентября 2019

Ваш 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
...