#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 и не будут работать в Windows3. правильно, я использую ubuntu, так что cat будет работать
4. Я использую
cmder
wherecat
работает, но все равно получаю ошибку. есть ли в любом случае я могу отладить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. Вам удалось заставить его работать?