kubernetes applyconfiguration.Extract与defaulting的交互效果较差,

bis0qfac  于 9个月前  发布在  Kubernetes
关注(0)|答案(6)|浏览(247)

我希望能够做到:

  1. desiredState := ... some applyconfig ...
  2. currentState := applyconfiguration.ExtractDeployment(Get(...))
  3. if !Equal(desired, current) {
  4. Apply(applyconfig)
  5. }

这里的目的是避免不必要的Apply调用。请注意,Get()基本上是免费的,因为它是一个informer,所以在https://kubernetes.io/blog/2022/10/20/advanced-server-side-apply/#reconstructive-controllers中关于它是如此便宜的建议(Get)似乎在这里直接适用。
然而,我遇到了一个关于默认字段的问题。
当我比较期望状态和当前状态时,由于默认值(我假设),当前状态总是有一些额外的字段:

  1.    Name: &"POD_NAMESPACE",
  2.    ValueFrom: &v1.EnvVarSourceApplyConfiguration{
  3.    FieldRef: &v1.ObjectFieldSelectorApplyConfiguration{
  4. -  APIVersion: nil,
  5. +  APIVersion: &"v1",
  6.    FieldPath: &"metadata.namespace",
  7.    },
  8.    },
  9.   },

相应的managedField:

  1. k:{"name":"POD_NAMESPACE"}:
  2. .: {}
  3. f:name: {}
  4. f:valueFrom:
  5. f:fieldRef: {}

/sig api-machinery
cc @apelisse

li9yvcax

li9yvcax1#

感谢您的报告!我很快就会查看。

x7rlezfr

x7rlezfr2#

过去曾讨论过类似的事情,
/cc @justinsb@seans3

cbeh67ev

cbeh67ev3#

默认值这件事值得怀疑,我不确定是什么导致的。我会检查测试用例,看看我们是否能重现这个bug。

mm5n2pyu

mm5n2pyu4#

/wg api-expression

uyhoqukh

uyhoqukh5#

有任何更新吗?这项工作是否在其他地方被跟踪?

q9yhzks0

q9yhzks06#

上下文中,SSA用于检查apply是否导致实际更改的等式检查相当复杂(我现在有两个修复方案),并涉及类似以下内容:
kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/equality.go
第75行 51f89c3
| | funcIgnoreManagedFieldsTimestampsTransformer( |

相关问题