Возникли проблемы с исправлением работы в кубернетах с помощью почтальона

Создал работу в кубернетах, используя метод post, используя почтальон, теперь пытаюсь исправить ту же работу, используя метод patch, используя почтальон, и я получаю 400 неверных запросов.

Заголовки для публикации: Content-type application / yaml

тело метода post:

---
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
  labels:
    app: dev
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

Заголовки для патча: Content-type application / strategy-merge-patch + json

Content-Type в заголовках

тело запроса на исправление:

{
  "apiVersion": "batch/v1",
  "kind": "Job",
  "metadata": {
    "name": "pi"
  },
  "spec": {
    "template": {
      "spec": {
        "containers": [
          {
            "name": "pi",
            "image": "perl",
            "command": [
              "perl",
              "-Mbignum=bpi",
              "-wle",
              "print bpi(2000)"
            ]
          }
        ],
        "restartPolicy": "Never"
      }
    },
    "backoffLimit": 5
  }
}

Поменял тело пожалуйста по ссылке. тело запроса исправления

Модификация, которую я сделал, была изменена backofflimit на 5. Я мог публиковать и исправлять другие ресурсы, такие как службы и развертывания, но я застрял в исправлении задания, я выполнил точно такие же шаги и для других.

ошибка, я получаю ошибку


person naveen kumar    schedule 12.07.2019    source источник


Ответы (2)


С типом 'strategy-merge-patch + json' вы должны использовать в теле запроса только этот json-патч:

{"spec":{"backoffLimit": 7}}

Поскольку ваше намерение состоит в том, чтобы объединить / заменить существующее значение объекта на основе ключа backoffLimit.
Проверьте документация, например, использование стратегического-слияния-патча для обновления ресурсов.

Обновление. Попробуйте использовать curl:

  1. Запустить локальный прокси-сервер Kubernetes: kubectl proxy
  2. curl -k -v -XPATCH -H "Content-Type: application/strategic-merge-patch+json" --data '{"spe":{"backoffLimit": 9}}' http://localhost:8001/apis/batch/v1/namespaces/default/jobs/pi

Выход:

< HTTP/1.1 200 OK <-patch succeeded 
< Audit-Id: 02d97d05-2bfb-4500-ac34-c8eb04ff8503
< Content-Length: 1795
< Content-Type: application/json
< Date: Fri, 12 Jul 2019 13:54:37 GMT
< 
{
  "kind": "Job",
  "apiVersion": "batch/v1",
  "metadata": {
    "name": "pi",
    "namespace": "default",
    "selfLink": "/apis/batch/v1/namespaces/default/jobs/pi",
    "uid": "5ac61d6d-a4a0-11e9-abc7-42010a80012c",
    "resourceVersion": "4339038",
    "creationTimestamp": "2019-07-12T12:27:03Z",
    "labels": {
      "app": "dev"
    }
  },
  "spec": {
    "parallelism": 1,
    "completions": 1,
    "backoffLimit": 9 <-patch succeeded 

,

person Nepomucen    schedule 12.07.2019
comment
Возможно, в вашем случае это не удается из-за неправильного метода запроса. Попробуйте использовать PATCH вместо POST - person Nepomucen; 12.07.2019
comment
привет @Nepomucen, пожалуйста, проверьте обновленный вопрос. я загрузил несколько изображений. Спасибо за помощь. - person naveen kumar; 13.07.2019

С Content-Type как application / strategy-merge-patch + json

и с телом

{"spec": {"backoffLimit": 7}}

Я воссоздал запрос, и он работал нормально.

Что пошло не так с первого раза, так это то, что, хотя «тип содержимого» правильно упоминается в заголовках, так как «приложение / стратегическое-слияние-патч + json» почтальон принимает неправильный тип содержимого, поэтому я удалил запрос и воссоздал патч. запрос с тем же телом и заголовками работал отлично.

person naveen kumar    schedule 17.07.2019