Kubernetes 使用一个API请求从节点删除特定污染

Kubernetes 使用一个API请求从节点删除特定污染,kubernetes,Kubernetes,有没有一种方法可以通过单个kubernetes API请求按密钥名删除特定的节点污染?据我所知,JSON合并补丁规范只允许按索引修改数组,如果没有额外的请求并冒着竞争条件的风险,我不知道这一点 具体来说,我正在尝试添加/删除专用的NoSchedule键 修补以下主体将清除所有污点: spec: { taints: [] } 或者我可以查询节点,然后修改污点数组并将其重新修补,但这有可能发生另一个操作,该操作将被覆盖。这是一个相当低的风险,但感觉像是一个无论可能性如何都应该避免的风险 至

有没有一种方法可以通过单个kubernetes API请求按密钥名删除特定的节点污染?据我所知,JSON合并补丁规范只允许按索引修改数组,如果没有额外的请求并冒着竞争条件的风险,我不知道这一点

具体来说,我正在尝试添加/删除专用的NoSchedule键

修补以下主体将清除所有污点:

spec: {
    taints: []
}
或者我可以查询节点,然后修改污点数组并将其重新修补,但这有可能发生另一个操作,该操作将被覆盖。这是一个相当低的风险,但感觉像是一个无论可能性如何都应该避免的风险

至少从1.16开始,kubectl在添加或删除污染时采用了第二种方法,每种方法有两个请求,一个GET和一个补丁,因此我不乐观这是可能的:

# following command removes the taint with the key 'dedicated'

kubectl taint nodes my-node-1 dedicated- -v8

# (output clearly shows a GET followed by a PATCH request)

那么,有没有办法编写一个单一的API请求,从而删除一个特定的命名污点,同时让其他人不受影响,而事先不知道污点在污点数组中的位置?

没有办法在一个请求中删除污点数组中的条目,缺少对etcd存储区内的数据执行操作

Kubernetes API中的默认数组是替换该数组,因此需要发送污染数组的完整内容。API中的一些数组允许您在中合并新元素,但我认为甚至没有 一个可用的策略,可以按照您想要的方式进行删除

但这有发生另一个操作的风险,该操作将被覆盖。这是一个相当低的风险,但感觉像是一个无论可能性如何都应该避免的风险

Kuberenetes API提供了一种防止过时数据更新的通用方法。所有kubernetes资源的元数据中都包含resourceVersion属性

发送修补程序时,请包含收到的resourceVersion,如果服务器端记录在检索资源后已更新,则更新将失败

{
  "metadata": { "resourceVersion": "27409402" },
  "spec": {
    "taints": [
      { "effect":"NoSchedule", "key":"whatever", "value":"special" }
    ]
  }
}

除了对etcd存储区内的数据进行处理外,没有一种方法可以在一个请求中从污染数组中删除条目

Kubernetes API中的默认数组是替换该数组,因此需要发送污染数组的完整内容。API中的一些数组允许您在中合并新元素,但我认为甚至没有 一个可用的策略,可以按照您想要的方式进行删除

但这有发生另一个操作的风险,该操作将被覆盖。这是一个相当低的风险,但感觉像是一个无论可能性如何都应该避免的风险

Kuberenetes API提供了一种防止过时数据更新的通用方法。所有kubernetes资源的元数据中都包含resourceVersion属性

发送修补程序时,请包含收到的resourceVersion,如果服务器端记录在检索资源后已更新,则更新将失败

{
  "metadata": { "resourceVersion": "27409402" },
  "spec": {
    "taints": [
      { "effect":"NoSchedule", "key":"whatever", "value":"special" }
    ]
  }
}

我们知道为什么尽管禁止唯一的密钥名,但污染仍然存储在数组中吗?只是看起来更适合k8s术语中的普通对象贴图?。我已经通读了关于修改污染的pkg/util代码,甚至这些代码似乎也因为数据结构的选择而变得复杂。感谢您提供了非常有用的答案。不知道为什么抱歉,但是除非有充分的理由,否则不太可能对NodeSpec API进行破坏性更改我们知道为什么尽管禁止唯一的密钥名,但污染仍然存储在数组中吗?只是看起来更适合k8s术语中的普通对象贴图?。我已经通读了关于修改污染的pkg/util代码,甚至这些代码似乎也因为数据结构的选择而变得复杂。感谢您提供了非常有用的答案。不知道为什么抱歉,但是除非有充分的理由,否则不太可能对NodeSpec API进行破坏性更改