[英]kubectl run override nodeselctor: error: Invalid JSON Patch
I'm trying to override the node selector for a kubectl run
.我正在尝试覆盖
kubectl run
的节点选择器。
kubectl run -it powershell --image=mcr.microsoft.com/powershell:lts-nanoserver-1809-20211215 --restart=Never --overrides='{ "apiVersion": "v1", "spec": { "template": { "spec": { "nodeSelector": { "kubernetes.io/os": "windows" } } } } }' -- pwsh
But I get "Invalid Json Path".但我得到“无效的 Json 路径”。
This is my yaml if I do a deployment:如果我进行部署,这是我的 yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
...
spec:
...
nodeSelector:
kubernetes.io/os: windows
and if I do get pods -o json
I get:如果我
get pods -o json
我得到:
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
...
},
"spec": {
...
"nodeSelector": {
"kubernetes.io/os": "windows"
}
kubectl run
is a command to start a Pod
. kubectl run
是启动Pod
的命令。 You can read more about it here你可以在这里阅读更多关于它的信息
kubectl run -it powershell --image=mcr.microsoft.com/powershell:lts-nanoserver-1809-20211215 --restart=Never --overrides='{ "apiVersion": "v1", "spec": { "template": { "spec": { "nodeSelector": { "kubernetes.io/os": "windows" } } } } }' -- pwsh
Using a command above you are trying run a Pod
with specification "template": { "spec": {
which is used only for Deployment
and that is why you get an error Invalid Json Path
.使用上面的命令,您正在尝试运行具有规范
"template": { "spec": {
的Pod
,它仅用于Deployment
,这就是您收到错误Invalid Json Path
的原因。
nodeSelector
as you can see in documentation could be specify under spec
in Pod
config file as below:您可以在文档中看到的
nodeSelector
可以在Pod
配置文件中的spec
下指定,如下所示:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
When you add --dry-run=client -o yaml
to your command to see how the object would be processed, you will see below output which doesn't have nodeSelector
:当您将
--dry-run=client -o yaml
到命令中以查看如何处理 object 时,您将在下面看到 output 没有nodeSelector
:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: powershell
name: powershell
spec:
containers:
- image: mcr.microsoft.com/powershell:lts-nanoserver-1809-20211215
name: powershell
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}
To solve your issue, you can delete template
and spec
from you command which should look as below:要解决您的问题,您可以从命令中删除
template
和spec
,如下所示:
kubectl run -it powershell --image=mcr.microsoft.com/powershell:lts-nanoserver-1809-20211215 --restart=Never --overrides='{ "apiVersion": "v1", "spec": { "nodeSelector": { "kubernetes.io/os": "windows" } } }' -- pwsh
Adding --dry-run=client -o yaml
to see what will be changed, you will see that nodeSelector
exist:添加
--dry-run=client -o yaml
看看会发生什么变化,你会看到nodeSelector
存在:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: powershell
name: powershell
spec:
containers:
- image: mcr.microsoft.com/powershell:lts-nanoserver-1809-20211215
name: powershell
resources: {}
dnsPolicy: ClusterFirst
nodeSelector:
kubernetes.io/os: windows
restartPolicy: Never
status: {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.