在Java中创建Kubernetes服务

在Java中创建Kubernetes服务,java,service,kubernetes,fabric8,Java,Service,Kubernetes,Fabric8,我使用fabric8.io在Kubernetes中编排应用程序容器。我希望创建一个服务来管理在特定端口上具有特定标签的pod。是否有一个API的具体示例可以实现这一点。我在例子中找不到它 似乎没有可用的javadocs???我使用的是同一个库,你是对的,文档在创建部门有点缺乏。我不得不使用Eclipse手动探索API,因为我也找不到任何解释。下面是它的工作原理 KubernetesClient client = new KubernetesClient(masterURL); Service

我使用fabric8.io在Kubernetes中编排应用程序容器。我希望创建一个服务来管理在特定端口上具有特定标签的pod。是否有一个API的具体示例可以实现这一点。我在例子中找不到它


似乎没有可用的javadocs???

我使用的是同一个库,你是对的,文档在创建部门有点缺乏。我不得不使用Eclipse手动探索API,因为我也找不到任何解释。下面是它的工作原理

KubernetesClient client = new KubernetesClient(masterURL);
Service serv = (Service) KubernetesHelper.loadJson(serviceJson);
Service result = client.services().create(serv);
因此,基本上,您可以使用KubernetesClient创建所有对象。它将为每个对象提供方法(服务、复制控制器等)以及与之关联的任何操作。第二行将服务定义文件或字符串加载到服务对象中。然后使用客户机在Kubernetes中创建对象

KubernetesHelper对象可以加载yaml或json。您还可以使用ServiceBuilder对象以编程方式构建它


编辑:在回顾标记为kubernetes的答案之后,我在一个问题中发现了这一点:Fabric8的kubernetes客户端使用的是生成的模型和DSL,其结构与JSON和YAML配置完全相同

因此,为了创建一个如下所示的服务实例:

 {
   "kind": "Service",
   "apiVersion": "v1",
   "metadata": {
       "name": "myservice"
   },
   "spec": {
       "ports": [
           {
              "protocol": "TCP",
              "port": 80,
              "targetPort": 8080,
          }
      ],
      "selector": {
          "key": "value1",
      },¬
      "portalIP": "172.30.234.134",
      "type": "ClusterIP",
  }
}

您可以使用以下代码:

Service service = new ServiceBuilder()
          .withNewMetadata()
              .withName("myservice")
          .endMetadata()
          .withNewSpec()
            .addNewPort()
              .withProtocol("TCP")
              .withPort(80)
              .withNewTargetPort(8080)
            .endPort()
            .addToSelector("key1", "value1")
            .withPortalIP("172.30.234.134")
            .withType("ClusterIP")
          .endSpec()
          .build();
如果不需要保存服务对象的引用,而只想创建它,则可以像以下那样内联它:

client.services().createNew()
          .withNewMetadata()
              .withName("myservice")
          .endMetadata()
          .withNewSpec()
            .addNewPort()
              .withProtocol("TCP")
              .withPort(80)
              .withNewTargetPort(8080)
            .endPort()
            .addToSelector("key1", "value1")
            .withPortalIP("172.30.234.134")
            .withType("ClusterIP")
          .endSpec()
          .done();
它甚至比JSON等价物更紧凑,因为可以提交默认值,也可以选择将选择器之类的内容内联到一行中

这不仅适用于服务,而且适用于每个Kubernetes/Openshift资源

如果您已经准备好JSON或YAML,您可以通过向客户端提供输入流来轻松加载它们:

Service service = client.services().load(inputStream).get();
这里有更多选项,如直接创建服务:

Service newService = client.services().load(inputStream).create();

记住无论语言、格式如何,结构都是一样的,这总是有帮助的。几乎任何东西都可以内联,因此IDE中的制表符补全非常有用。

如果您不知道要创建的资源类型(pod、服务、部署等),则可以使用

client.load(inputStream).createOrReplaceAnd();
它将创建或更新已创建的资源

注: 如果要在单个yaml文件中定义要创建的多个资源,并且使用最新的kubernetes客户端,则只能创建第一个资源


使用kubernetes dashboard或kubectl,您应该能够创建同一yaml文件中列出的多个资源。

对于后代:这里有模型类的Javadoc:。这里有客户端类的Javadoc:。(我不知道为什么fabric8不生成它们并将它们放在他们的站点上。)有没有办法将服务定义导出为yaml或json文件?