Проверка CRD со встроенным core.v1.PodSpec - PullRequest
0 голосов
/ 08 мая 2019

Я разрабатываю контроллер с CRD.CRD включает в себя наш пользовательский материал наряду со встроенным core.v1.PodSpec.(v1.13.1)

Я определяю раздел проверки в CRD, который может проверять и применять ограничения на наших настраиваемых полях, но я не могу понять, как это сделать для встроенной PodSpec.PodSpec слишком большой и слишком много вариантов, чтобы вручную добавить это в раздел проверки CRD:

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: mystuff.example.com
spec:
  group: mystuff.example.com
  versions:
    - name: v1alpha1
      served: true
      storage: true
  names:
    kind: MyStuff
    plural: mystuffs
    singular: mystuff
    shortNames:
    - ms
  scope: Namespaced
  additionalPrinterColumns:
  - JSONPath: .status.phase
    name: Status
    type: string
  - JSONPath: .metadata.resourceVersion
    name: Version
    type: string
  validation:
    openAPIV3Schema:
      properties:
        spec:
          required:
            - myVar1
            - myVar2
            - podSpec
          properties:
            myVar1:
              type: boolean
            myVar2:
              type: boolean
            # Here I need to validate a valid core.v1.PodSpec
            podSpec:
              type: core.v1.PodSpec

Как другие люди подходят к этому?

Мне также нужна проверка для любого механизма, в котором пользователь может передать рабочую нагрузку, т. Е. Непосредственно с помощью сервера кубов или с помощью kubectl.

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Существует несколько способов проверки CRD. Статическая проверка с помощью .validation является одним из способов, как вы знаете. Другой способ - выполнить динамическое через ValidatingAdmissionWebhook. Это позволяет внедрить и развернуть сервер, который будет вызывать сервер API Kubernetes непосредственно перед допуском ресурсов.

0 голосов
/ 08 мая 2019

В целом CRD не позволяет ставить ссылки на другие объекты.Было обсуждение этого вопроса: https://github.com/kubernetes/kubernetes/issues/54579. Было принято решение не добавлять ссылки.

Обходной путь описан в этом комментарии: https://github.com/kubernetes/kubernetes/issues/54579#issuecomment-370372942 Я не использовал его, но вы можете попробовать,

...