java - 在 Java 中创建 Kubernetes 服务

标签 java service kubernetes fabric8

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

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

似乎没有可用的 javadoc???

最佳答案

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 中的制表符补全功能非常有用。

关于java - 在 Java 中创建 Kubernetes 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33372535/

相关文章:

mongodb - 从其他容器与 Kubernetes (GKE) 上的容器通信

nginx - GKE配置502错误网关上的Ingress-nginx

java - 尽管 AndroidManifest.xml 中提到了,为什么我的 Android 应用程序无法获得某些权限

java - 网络代码有时会抛出 UnknownHostException

android - AltBeacon : BeaconConsumer in Service Not Working

powershell - 如何使用 PowerShell 提取所有服务的 "Path to executable"

spring-boot - 如何从外部对运行在kubernetes pod中的应用程序进行http调用?

java - 无法创建 Android PHP MySQL 登录应用程序

java - 使用 ProducerTemplate 设置 activemq 优先级

c++ - 是否可以从 Windows 服务中获知上次用户事件?