【问题标题】:Missing default value in nested field of kubernetes custom resourceKubernetes 自定义资源的嵌套字段中缺少默认值
【发布时间】:2021-12-31 10:54:46
【问题描述】:

我有一个自定义资源定义,其中包含具有默认值的嵌套字段(为简洁起见,省略了一些样板文件):

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
spec:
  scope: Namespaced
  group: thismatters.stackoverflow
  names:
    kind: BadDefault
  versions:
  - name: v1alpha
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              regularThing:
                type: integer
                default: 6
              shouldDefault:
                type: object
                properties:
                  nestedThing:
                    type: integer
                    default: 12

每当我在没有指定 shouldDefault 对象的情况下创建此类资源时:

apiVersion: thismatters.stackoverflow/v1alpha
kind: BadDefault
metadata:
  name: blank-demo
spec: 
  regularThing: 7

.shouldDefault.nestedThing的默认值在资源为described时不会出现:

apiVersion: thismatters.stackoverflow/v1alpha
kind: BadDefault
metadata:
  name: blank-demo
spec: 
  regularThing: 7

如果我使用此清单更新资源:

apiVersion: thismatters.stackoverflow/v1alpha
kind: BadDefault
metadata:
  name: blank-demo
spec: 
  regularThing: 7
  shouldDefault: {}

然后在described时填充嵌套字段默认值:

apiVersion: thismatters.stackoverflow/v1alpha
kind: BadDefault
metadata:
  name: blank-demo
spec: 
  regularThing: 7
  shouldDefault:
    nestedThing: 12

我可以在 CRD 中做些什么来消除资源清单中对 shouldDefault: {} 行的需求,并在嵌套字段中填充默认值吗?

我的集群使用的是 Kubernetes 1.19 版。

【问题讨论】:

  • 您正在使用已弃用的 Kubernetes 版本。你能把它更新成supported one吗?
  • EKS 仍然支持 1.19(甚至仍然支持 1.18)。 1.19 中是否存在阻止自动填充嵌套字段的默认值的已知问题?

标签: kubernetes kubernetes-custom-resources


【解决方案1】:

default 属性添加到shouldDefault 对象可以解决此问题:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
spec:
  scope: Namespaced
  group: thismatters.stackoverflow
  names:
    kind: BadDefault
  versions:
  - name: v1alpha
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              regularThing:
                type: integer
                default: 6
              shouldDefault:
                type: object
                default: {}   #  <-- this was added
                properties:
                  nestedThing:
                    type: integer
                    default: 12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多