kubectl создать модуль с помощью переопределения ошибка возврата: Недопустимое исправление JSON

#json #kubernetes #kubectl #kubernetes-pod

Вопрос:

Я пытаюсь запустить свой модуль, используя команду ниже, но продолжаю получать ошибку:

 error: Invalid JSON Patch
 
 kubectl run -i tmp-pod --rm -n=my-scripts --image=placeholder --restart=Never --overrides= "$(cat pod.json)"
 

Вот мое pod.json досье:

 {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "name": "test",
        "namespace": "my-ns",
        "labels": {
            "app": "test"
        }
    },
    "spec": {
        "containers": [
            {
                "name": "test",
                "image": "myimage",
                "command": [
                    "python",
                    "/usr/bin/cma/excute.py"
                ]
            }
        ]
    }
}
 

Что я здесь делаю не так?

Ответ №1:

это работает для меня, однако я попытался удалить пространство имен

pod.json

 {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "name": "test",
        "labels": {
            "app": "test"
        }
    },
    "spec": {
        "containers": [
            {
                "name": "test",
                "image": "myimage",
                "command": [
                    "python",
                    "/usr/bin/cma/excute.py"
                ]
            }
        ]
    }
}
 

команда

 kubectl run -i tmp-pod --rm --image=placeholder --restart=Never --overrides= "$(cat pod.json)"
 

Комментарии:

1. в какой операционной системе вы работаете, я работаю в Windows cmder . но все равно получаю ошибку

2. @user1591156 вы используете какую-то виртуальную машину или WSL? $() и cat являются специфичными командами bash и не будут работать в Windows

3. правильно, я использую ubuntu, так что cat будет работать

4. Я использую cmder where cat работает, но все равно получаю ошибку. есть ли в любом случае я могу отладить kubectl команду, чтобы проверить, какая строка вызывает error: Invalid JSON Patch.

Ответ №2:

Я провел небольшое тестирование, и , похоже, возникла проблема с тем, что Cmder не выполняется $() должным образом — либо вообще не работает, либо обрабатывает новые строки как Enterи, следовательно, выполняет коммант до передачи всего JSON.

Возможно, вы захотите попробовать выполнить свои команды в PowerShell:

 kubectl run -i tmp-pod --rm -n=my-scripts --image=placeholder --restart=Never --overrides=$(Get-Content pod.json -Raw)
 

Существует аналогичная проблема на GitHub [Windows]. Запуск kubectl не принимает допустимый JSON как —переопределение в Windows (тот же JSON работает на Mac) #519. К сожалению, для этого нет четкого решения.

Возможными решениями являются:

  • Прямая передача JSON в виде строки
     kubectl run -i tmp-pod --rm -n=my-scripts --image=placeholder --restart=Never --overrides='{"apiVersion":"v1","kind":"Pod","metadata":{...}}'
     
  • Использование ' вместо " переопределений.
  • Использование тройных кавычек """ вместо одинарных кавычек " в файле JSON.

Комментарии:

1. Привет @user1591156. Вам удалось заставить его работать?