kubernetes 在使用服务器端应用时,在创建了带有设置的pod亲和性字段的部署后,无法删除pod亲和性字段,

nwsw7zdq  于 4个月前  发布在  Kubernetes
关注(0)|答案(8)|浏览(70)

发生了什么?
我们有一个控制器,它管理集群上的对象,并使用服务器端应用。对于这个特定的例子,我们对部署对象感兴趣,在下面的示例中,部署恰好是gatekeeper部署。
步骤1:控制器创建带有pod反亲和性字段设置的部署资源。

步骤2:控制器修改部署对象,删除Pod亲和性字段,并在部署资源上执行SSA dry run Patch。dry run没有检测到差异。忽略差异并应用补丁也不会导致pod反亲和性字段被删除。

  • 更新的部署+显示仍然未删除的反亲和性字段:

updated_deployment.txt
还要注意:

  • 步骤1和步骤2使用相同的fieldOwner,因此这里不应该有任何冲突(并且dry run和apply都没有显示任何冲突)。步骤1有managed-field操作Update,步骤2有managed-field操作Apply
  • 控制器在应用补丁时也会设置force ownership。
    **注意:**如果我们在创建部署时不设置亲和性字段,那么我们可以使用Patch轻松地设置/删除它。问题似乎只发生在创建了带有亲和性字段的部署,然后我们尝试使用补丁将其删除的情况下。

其他注意事项:

  • 这似乎与kubectl --server-side apply一起工作。在这种情况下,唯一的managed-field操作是Apply。请参阅日志:

kubectl_ssa.txt
在pod容忍度上也可以看到相同的行为。

我们期望发生什么?

期望在更新部署对象时,通过SSA删除亲和性字段的live对象中的pod反亲和性字段被删除。

我们如何尽可能精确地重现它?

  1. 使用带有pod反亲和性字段设置的部署创建。
  • 使用SSA Patch删除反亲和性字段。
  • 将Apply设置为使用SSA
  • 将客户端选项FieldOwner设置为与用于创建和ForceOwnership相同的field owner。

我们需要了解的其他信息吗?

  • 无响应*

Kubernetes版本

云提供商

GKE

OS版本

# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here

# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here

安装工具

容器运行时(CRI)及其版本(如适用)

相关插件(CNI、CSI等)及其版本(如适用)

cdmah0mi

cdmah0mi1#

/sig api-machinery
for SSA
客户端版本:version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.0", GitCommit:"4ce5a8954017644c5420bae81d72b09b735c21f0", GitTreeState:"clean", BuildDate:"2022-05-03T13:46:05Z", GoVersion:"go1.18.1", 编译器:"gc", 平台:"linux/amd64"}
Kustomize版本: v4.5.4
服务器版本:version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.3-gke.100", GitCommit:"6466b51b762a5c49ae3fb6c2c7233ffe1c96e48c", GitTreeState:"clean", BuildDate:"2023-06-23T09:27:28Z", GoVersion:"go1.20.5 X:boringcrypto", 编译器:"gc", 平台:"linux/amd64"}
注意,这不是受支持的客户端/服务器偏差
https://kubernetes.io/releases/version-skew-policy/#kubectl

ijnw1ujt

ijnw1ujt2#

客户端版本:version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.0", GitCommit:"4ce5a8954017644c5420bae81d72b09b735c21f0", GitTreeState:"clean", BuildDate:"2022-05-03T13:46:05Z", GoVersion:"go1.18.1", Compiler:"gc", Platform:"linux/amd64"}
Kustomize版本: v4.5.4
服务器版本:version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.3-gke.100", GitCommit:"6466b51b762a5c49ae3fb6c2c7233ffe1c96e48c", GitTreeState:"clean", BuildDate:"2023-06-23T09:27:28Z", GoVersion:"go1.20.5 X:boringcrypto", Compiler:"gc", Platform:"linux/amd64"}
注意,这不是受支持的客户端/服务器偏差 https://kubernetes.io/releases/version-skew-policy/#kubectl
上述问题在使用Kubernetes Go客户端时出现。kubectl版本无关紧要。

amrnrhlw

amrnrhlw3#

/triage accepted
/assign @apelisse
ccrfmcuu

ccrfmcuu4#

/unassign
/remove-triage accepted
6rqinv9w

6rqinv9w5#

@apelisse,这是否仍然可以接受?为什么不可以?

ruoxqz4g

ruoxqz4g6#

我无法永远解决这些bug:-(我现在正在处理一些稍微不同的事情,我可以帮忙,但我没有计划专门修复这个问题,抱歉。

oyt4ldly

oyt4ldly7#

我永远无法解决这些bug:-(我现在正在处理一些稍微不同的事情,我可以帮忙,但我没有计划专门修复这个问题,抱歉。
完全公平!所以我们需要找到另一个所有者。暂时将问题推迟到下一次扫描。

vxf3dgd4

vxf3dgd48#

如果是这样,可以让@Jefftree看一下吗?

/assign @Jefftree
谢谢。
/triage accepted

相关问题