Kubernetes中CRD的动态键/值输入属性

p8ekf7hl  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(2)|浏览(267)

在定义K8 CRD时,我需要在提交资源对象时灵活地传递任何键/值对作为输入。https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/

schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                image:
                  type: string
                replicas:
                  type: integer

从上面的链接,如果你看到属性只能保存cronSpecimage和/或replicas。它可以是自由格式的吗?这意味着我可以传递任何键/值对,在我的代码中,我得到一个集合(可能是一个Map),可以包含键/值对。
https://stackoverflow.com/users/14044/mike-bryant我尝试使用此CRD:

schema:
    openAPIV3Schema:
      type: object
      properties:
        apiVersion:
          type: string
        spec:
          type: object
          properties:
            appProperties:
              type: object
              properties:
                messages:
                  type: array
                  items:
                    type: object
                    properties:
                      key:
                        type: string
                      value:
                        type: string

其中自定义对象具有如下输入:

messages:
      - key: "server1"
        value: "ping failed"
      - key: "server2"
        value: "abort"
      - key: "server3"
        value: "succes"

但是当我用一些更新状态修补crd时,k8失败并出现以下错误:

kind=Status, message=the server rejected our request due to an error in our request, metadata=ListMeta(_continue=null, remainingItemCount=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=Invalid, status=Failure, additionalProperties={}).:
vaj7vani

vaj7vani1#

我认为您可以使用additionalProperties来完成此操作。
x-kubernetes-preserve-unknown-fields也可能有用:https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#controlling-pruning

slwdgvem

slwdgvem2#

我们可以将additionalPropertiestype: string结合使用。

additionalProperties:
    type: string

例如,我将customSelector属性添加到规范中。customSelector属于object(Map)类型,其中包含用于键/值的字符串。

spec:
    properties:
      customSelector:
        additionalProperties:
          type: string
        description: Free form key value pairs
        type: object
    type: object

相关问题