用Java创建Kubernetes服务

use*_*mda 3 java service fabric8 kubernetes

我正在使用fabric8.io在Kubernetes中编排应用程序容器.我正在寻找创建一个服务来管理某个端口上具有特定标签的pod.是否有API的特定示例执行此操作.我在例子中找不到它

https://github.com/fabric8io/kubernetes-client/blob/master/kubernetes-examples/src/main/java/io/fabric8/kubernetes/examples/FullExample.java#L75

似乎没有javadoc可用???

ioc*_*nel 6

Fabric8的Kubernetes Client使用生成的模型和DSL,其结构与JSON和YAML配置完全相同.

所以为了创建一个看起来像这样的Service实例:

 {
   "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",
  }
Run Code Online (Sandbox Code Playgroud)

}

您可以使用以下代码:

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();
Run Code Online (Sandbox Code Playgroud)

如果不需要保存服务对象的引用而您只想创建它,则可以将其内联为:

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();
Run Code Online (Sandbox Code Playgroud)

JSON等效的更紧凑,因为可以提交默认值,也可以选择内联一些像选择器这样的内容.

这不仅适用于Service,也适用于每一个Kubernetes/Openshift资源.

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

Service service = client.services().load(inputStream).get();
Run Code Online (Sandbox Code Playgroud)

这里有更多选项,比如直接创建服务:

Service newService = client.services().load(inputStream).create();
Run Code Online (Sandbox Code Playgroud)

无论lang,格式如何,记住结构始终是相同的总是有帮助的.几乎所有内容都可以内联,因此IDE中的选项卡完成确实非常有用.