Fabric8: клиент java openshift / kubernetes, создание настраиваемых объектов, таких как ClusterResourceQuota

Я работаю над оператором Kubernetes, который автоматически создает пространства имен, метки, аннотации ... на основе CRD.

Я застрял с конкретным объектом openshift ClusterResourceQuota (quota.openshift.io/v1), который не отображается в fabric8io-kubernetes-client.

Есть ли альтернатива для создания таких объектов, даже если они загружены из файла ...?


person Kolo    schedule 05.08.2020    source источник
comment
Да, вы можете сделать это через клиент fabric8 kubernetes. Пожалуйста, проверьте: github.com/fabric8io / kubernetes-client / blob / master / doc /   -  person Rohan Kumar    schedule 06.08.2020
comment
Если у вас нет типов, воспользуйтесь API без типов: github.com/fabric8io/kubernetes-client/blob/master/doc/   -  person Rohan Kumar    schedule 06.08.2020


Ответы (1)


Я из команды Fabric8. Клиент Fabric8 Kubernetes поддерживает создание настраиваемых объектов двумя способами:

  • Типизированный API (требуется наличие настраиваемой модели ресурсов (POJO))
  • Бестиповый API (обрабатывает пользовательский ресурс как простые HashMaps)

Типизированный API:

Предполагая, что у вас уже есть POJO для ClusterResourceQuota иClusterResourceQuotaList. Вы можете создать экземпляр клиента kubernetes для этого конкретного настраиваемого ресурса, как этот, и использовать его для операций с настраиваемым ресурсом:

try (KubernetesClient client = new DefaultKubernetesClient()) {
    // Create ClusterResourceQuota object
    ClusterResourceQuota clusterResourceQuota = getClusterResourceQuota();

    // ClusterResourceQuota Client
    MixedOperation<ClusterResourceQuota, ClusterResourceQuotaList, DoneableClusterResourceQuota, Resource<ClusterResourceQuota, DoneableClusterResourceQuota>> clusterResourceQuotaClient = null;
    CustomResourceDefinitionContext context = new CustomResourceDefinitionContext
            .Builder()
            .withGroup("quota.openshift.io")
            .withKind("ClusterResourceQuota")
            .withName("clusterresourcequota-crd")
            .withPlural("clusterresourcequotas")
            .withScope("Namespaced")
            .withVersion("v1")
            .build();

    // Initializing ClusterResourceQuota Client, POJOs to be provided
    clusterResourceQuotaClient = client.customResources(context, ClusterResourceQuota.class, ClusterResourceQuotaList.class, DoneableClusterResourceQuota.class);
    // Using ClusterResourceQuota Client to create ClusterResourceQuota resource
    clusterResourceQuotaClient.inNamespace("default").createOrReplace(clusterResourceQuota);
}

Бестиповый API

Если у вас нет POJO, вы можете использовать Raw API Fabric8 Kubernetes Client для работы с настраиваемыми ресурсами. Вот как бы вы это сделали:

try (KubernetesClient client = new DefaultKubernetesClient()) {
    // Create Custom Resource Context
    CustomResourceDefinitionContext context = new CustomResourceDefinitionContext
            .Builder()
            .withGroup("quota.openshift.io")
            .withKind("ClusterResourceQuota")
            .withName("clusterresourcequota-crd")
            .withPlural("clusterresourcequotas")
            .withScope("Namespaced")
            .withVersion("v1")
            .build();

    // Load from Yaml
    Map<String, Object> clusterResourceQuota = client.customResource(context)
            .load(CustomResourceCreateDemoTypeless.class.getResourceAsStream("/clusterquota-cr.yml"));
    // Create Custom Resource
    client.customResource(context).create("default", clusterResourceQuota);
} catch (IOException e) {
    e.printStackTrace();
}

Вы также можете посмотреть эти блоги на введено и typeless подходит подробно.

person Rohan Kumar    schedule 06.08.2020
comment
Просто любопытно, для подхода typed есть ли какие-нибудь инструменты для создания POJO из crd? Спасибо! - person Mingliang; 02.09.2020
comment
Умм, я думаю, вы можете сгенерировать go-структуры из CRD: itnext.io/. После создания структуры go вы сможете создавать POJO с помощью скрипта генератора pojo клиента kubernetes: github.com/fabric8io/kubernetes-client/tree/master/ - person Rohan Kumar; 03.09.2020
comment
Я начал POC о том, как создавать POJO непосредственно из структуры, просто предоставив некоторую базовую конфигурацию: github.com/fabric8io/kubernetes-client/tree/master/ (но это WIP) - person Rohan Kumar; 03.09.2020