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

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

我希望能够做到:

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

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

          Name:  &"POD_NAMESPACE",
          ValueFrom: &v1.EnvVarSourceApplyConfiguration{
                  FieldRef: &v1.ObjectFieldSelectorApplyConfiguration{
-                         APIVersion: nil,
+                         APIVersion: &"v1",
                          FieldPath:  &"metadata.namespace",
                  },
          },
  },

相应的managedField:

k:{"name":"POD_NAMESPACE"}:
                    .: {}
                    f:name: {}
                    f:valueFrom:
                      f:fieldRef: {}

/sig api-machinery
cc @apelisse

li9yvcax

li9yvcax1#

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

x7rlezfr

x7rlezfr2#

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

cbeh67ev

cbeh67ev3#

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

uyhoqukh

uyhoqukh5#

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

q9yhzks0

q9yhzks06#

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

相关问题