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