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

问题描述 投票:0回答:3

在定义 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

从上面的链接中,如果您看到属性只能容纳

cronSpec
image
和/或
replicas
。可以是自由形式吗?这意味着我可以传递任何键/值对,并且在我的代码中我得到一个可以包含键/值对的集合(可能是映射)。

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={}).:
kubernetes kubernetes-custom-resources
3个回答
2
投票

为此,我们可以将

additionalProperties
type: string
一起使用。

additionalProperties:
    type: string

例如,我将

customSelector
属性添加到规范中。
customSelector
是对象类型(映射),带有键/值字符串。

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

0
投票

我认为你可以使用

additionalProperties
来实现这一点。

x-kubernetes-preserve-unknown-fields
也可能有用:https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#controlling-pruning


0
投票

我想在我的 k8s 自定义资源定义中任意嵌套 json。 不幸的是,虽然“addtionalProperties:true”似乎有效,但它仅适用于一级规范(即仍然不允许嵌套)。 这不符合 Kubernetes 应该遵循的 OpenAPI v3 规范! 我最终确定了以下解决方案:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: exampleconfigs.mycompany.com
spec:
  group: mycompany.com
  names:
    kind: ExampleConfig
    listKind: ExampleConfigList
    plural: exampleconfigs
    singular: exampleconfig
  scope: Namespaced
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              x-kubernetes-preserve-unknown-fields: true
© www.soinside.com 2019 - 2024. All rights reserved.