在定义 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={}).:
为此,我们可以将
additionalProperties
与 type: string
一起使用。
additionalProperties:
type: string
例如,我将
customSelector
属性添加到规范中。 customSelector
是对象类型(映射),带有键/值字符串。
spec:
properties:
customSelector:
additionalProperties:
type: string
description: Free form key value pairs
type: object
type: object
我认为你可以使用
additionalProperties
来实现这一点。
x-kubernetes-preserve-unknown-fields
也可能有用:https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#controlling-pruning
我想在我的 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