在 Java 中创建 Kubernetes 服务
Creating a Kubernetes Service in Java
我正在使用 fabric8.io 在 Kubernetes 中编排应用程序容器。我希望创建一个服务来管理在特定端口上具有特定标签的容器。是否有执行此操作的 API 的具体示例。我在示例中找不到它
似乎没有可用的 javadoc???
我用的是同一个库,你是对的,创作部门的文档有点欠缺。我不得不使用 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 文件中列出的多个资源。
我正在使用 fabric8.io 在 Kubernetes 中编排应用程序容器。我希望创建一个服务来管理在特定端口上具有特定标签的容器。是否有执行此操作的 API 的具体示例。我在示例中找不到它
似乎没有可用的 javadoc???
我用的是同一个库,你是对的,创作部门的文档有点欠缺。我不得不使用 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 文件中列出的多个资源。