kubernetes - Fabric8:openshift/kubernetes java 客户端,创建自定义对象,如 ClusterResourceQuota
问题描述
我正在研究基于 CRD 自动创建命名空间、标签、注释的 Kubernetes 运算符。
我被fabric8io-kubernetes-client未公开的特定openshift对象ClusterResourceQuota (quota.openshift.io/v1)卡住了。
即使从文件加载,是否有任何替代方法可以创建此类对象...?
解决方案
我来自 Fabric8 团队。Fabric8 Kubernetes Client 支持两种方式创建自定义对象:
- 类型化 API(需要提供自定义资源模型(POJO))
- 无类型 API(将自定义资源作为普通 HashMap 处理)
类型化 API:
假设您已经拥有ClusterResourceQuota
和的 POJO 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,你可以使用 Fabric8 Kubernetes Client 的 Raw API 来处理自定义资源。以下是您的操作方法:
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();
}
推荐阅读
- sql - 提取 hive 中的最后一个特定值
- javascript - 我的三元运算符与应该发生的情况相反
- javascript - 如何使用 puppeteer 的 page.evaluate() 获取所有网络请求?
- c# - 使用表“帐户”中的用户名获取表“位置”SQL 的值
- django - 按时间范围筛选创建日期
- reactjs - 如何在 RMWC TopAppBar 组件中使用图标?
- mongodb - MongoDB - 按单词排序
- android - AndroidManifest.xml 错误:未解析的类,属性 android:***** 此处不允许
- css - 无法使用 css flexbox 设置元素样式
- delphi-2009 - 如何从 TDataSet 一次读取整条记录?