簡體   English   中英

kubectl 運行覆蓋節點選擇器:錯誤:無效的 JSON 補丁

[英]kubectl run override nodeselctor: error: Invalid JSON Patch

我正在嘗試覆蓋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

但我得到“無效的 Json 路徑”。

如果我進行部署,這是我的 yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
 ...
spec:
  ...
  template:
    ...
    spec:
      ...
      nodeSelector:
        kubernetes.io/os: windows

如果我get pods -o json我得到:

{
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        ...
    },
    "spec": {
        ...
        "nodeSelector": {
            "kubernetes.io/os": "windows"
        }

kubectl run是啟動Pod的命令。 你可以在這里閱讀更多關於它的信息

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

使用上面的命令,您正在嘗試運行具有規范"template": { "spec": {Pod ,它僅用於Deployment ,這就是您收到錯誤Invalid Json Path的原因。

您可以在文檔中看到的nodeSelector可以在Pod配置文件中的spec下指定,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd

當您將--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: {}

要解決您的問題,您可以從命令中刪除templatespec ,如下所示:

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

添加--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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM