首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使用io.fabric8客户端创建velero.io/v1-备份存储位置

无法使用io.fabric8客户端创建velero.io/v1-备份存储位置
EN

Stack Overflow用户
提问于 2019-04-26 22:37:45
回答 1查看 284关注 0票数 0

我使用io.Fabric 8.kubernetes-client,版本4.1.1。我正在尝试使用io.fabric库加载yaml。

代码语言:javascript
复制
---
apiVersion: "velero.io/v1"
kind: "BackupStorageLocation"
spec:
  providerType: "aws"
  objectStorage:
    bucket: "test"
  config:
    region: "us-west-1"
metadata:
  annotations: {}
  name: "default"
  namespace: "velero"
  labels: {}
代码语言:javascript
复制
String content = "---\n" + 
            "apiVersion: \"velero.io/v1\"\n" + 
            "kind: \"BackupStorageLocation\"\n" + 
            "spec:\n" + 
            "  providerType: \"aws\"\n" + 
            "  objectStorage:\n" + 
            "    bucket: \"test\"\n" + 
            "  config:\n" + 
            "    region: \"us-west-1\"\n" + 
            "metadata:\n" + 
            "  annotations: {}\n" + 
            "  name: \"default\"\n" + 
            "  namespace: \"velero\"\n" + 
            "  labels: {}\n" + 
            "";
List<HasMetadata> list = client.load(new ByteArrayInputStream(content.trim().getBytes())).createOrReplace();

获取以下异常:

代码语言:javascript
复制
Caused by: com.fasterxml.jackson.databind.JsonMappingException: No resource type found for:velero.io/v1#BackupStorageLocation
 at [Source: (BufferedInputStream); line: 14, column: 13]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:271)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:1718)
    at io.fabric8.kubernetes.internal.KubernetesDeserializer.deserialize(KubernetesDeserializer.java:78)
    at io.fabric8.kubernetes.internal.KubernetesDeserializer.deserialize(KubernetesDeserializer.java:32)
    at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1611)
    at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1188)
    at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:129)
EN

回答 1

Stack Overflow用户

发布于 2019-04-29 01:22:01

Kubernetes客户端最近增加了创建自定义资源的支持。您可以加载自定义资源定义,但为了提供使用的自定义资源,您需要为该自定义资源提供模型,请参阅旧的CrdExample。但它现在已经变得更少类型(不向客户端提供任何自定义资源模型(Pojos))。您现在可以像这样创建自定义资源(我在4.2.2 bdw上):

对于名为animal的自定义资源定义:

代码语言:javascript
复制
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: animals.jungle.example.com
spec:
  group: jungle.example.com
  versions:
    - name: v1
      served: true
      storage: true
  scope: Namespaced
  names:
    plural: animals
    singular: animals
    kind: Animal
    shortNames:
    - al

为了创建自定义资源,您需要向客户端提供CustomResourceDefinitionContext。下面的示例显示了通过InputStream或原始字符串创建。有关详细信息,请参阅this

代码语言:javascript
复制
    CustomResourceDefinitionContext customResourceDefinitionContext = new CustomResourceDefinitionContext.Builder()
      .withName("animals.jungle.example.com")
      .withGroup("jungle.example.com")
      .withVersion("v1")
      .withPlural("animals")
      .withScope("Namespaced")
      .build();

    // Create via file
    Map<String, Object> object = client.customResource(customResourceDefinitionContext).create(currentNamespace, getClass().getResourceAsStream("/test-rawcustomresource.yml"));

    // Create via raw json/yaml
    String rawJsonCustomResourceObj = "{\"apiVersion\":\"jungle.example.com/v1\"," +
      "\"kind\":\"Animal\",\"metadata\": {\"name\": \"walrus\"}," +
      "\"spec\": {\"image\": \"my-awesome-walrus-image\"}}";
    object = client.customResource(customResourceDefinitionContext).create(currentNamespace, rawJsonCustomResourceObj);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55869890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档