Fabric8: openshift / kubernetes java client, создание настраиваемых объектов, таких как ClusterResourceQuota - PullRequest
0 голосов
/ 05 августа 2020

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

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

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

1 Ответ

2 голосов
/ 06 августа 2020

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

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

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

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

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);
}

Typeless 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();
}

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

...