无法使用 Java kubernetes-client 库修补 Kubernetes pod
Cannot patch Kubernetes pod using Java kubernetes-client library
我有一个应用程序 运行 对 pods 进行健康检查。考虑到健康检查,我正在尝试将 pod 的标签选择器从 active: true 修改为 active: false。以下是 pods 迭代更改每个 pod 标签的代码。
CoreV1Api corev1Api = new CoreV1Api();
for (V1Pod pod : fetchPodsByNamespaceAndLabel.getItems()) {
String jsonPatchBody = "[{\"op\":\"replace\",\"path\":\"/spec/template/metadata/labels/active\",\"value\":\"true\"}]";
V1Patch patch = new V1Patch(jsonPatchBody);
corev1Api.patchNamespacedPodCall(pod.getMetadata.getName(), namespace, patch, null, null, null, null, null);
}
我已经从 Kubernetes 文档部分的 Patch Example 中改编了 jsonPatchBody 作为示例。
运行 的输出没有错误。预期的行为是将这些 pods 的标签全部设置为 true。这些更改不会反映出来。我认为问题是由补丁正文提供的语法引起的。以上是访问 pod 中标签的正确语法吗?
在研究了更多当前的实现之后,客户端提供了 PatchUtils api 让我可以构建一种补丁。
CoreV1Api coreV1Api = new CoreV1Api();
String body = "{\"metadata\":{\"labels\":{\"active\":\"true\"}}}";
V1Pod patch =
PatchUtils.patch(
V1Pod.class,
() ->
coreV1Api.patchNamespacedPodCall(
Objects.requireNonNull(pod.getMetadata().getName()),
namespace,
new V1Patch(body),
null,
null,
null,
null,
null),
V1Patch.PATCH_FORMAT_STRATEGIC_MERGE_PATCH,
coreV1Api.getApiClient());
System.out.println("Pod name: " + Objects.requireNonNull(pod.getMetadata()).getName() + "Patched by json-patched: " + body);
我想确保补丁只是更新标签选择器中 属性 的当前值,所以我从 V1Patch
[=19= 实现了 PATCH_FORMAT_STRATEGIC_MERGE_PATCH
].我参考了 Kubernetes Patch Example 构建 Patch 的结构。
我有一个应用程序 运行 对 pods 进行健康检查。考虑到健康检查,我正在尝试将 pod 的标签选择器从 active: true 修改为 active: false。以下是 pods 迭代更改每个 pod 标签的代码。
CoreV1Api corev1Api = new CoreV1Api();
for (V1Pod pod : fetchPodsByNamespaceAndLabel.getItems()) {
String jsonPatchBody = "[{\"op\":\"replace\",\"path\":\"/spec/template/metadata/labels/active\",\"value\":\"true\"}]";
V1Patch patch = new V1Patch(jsonPatchBody);
corev1Api.patchNamespacedPodCall(pod.getMetadata.getName(), namespace, patch, null, null, null, null, null);
}
我已经从 Kubernetes 文档部分的 Patch Example 中改编了 jsonPatchBody 作为示例。
运行 的输出没有错误。预期的行为是将这些 pods 的标签全部设置为 true。这些更改不会反映出来。我认为问题是由补丁正文提供的语法引起的。以上是访问 pod 中标签的正确语法吗?
在研究了更多当前的实现之后,客户端提供了 PatchUtils api 让我可以构建一种补丁。
CoreV1Api coreV1Api = new CoreV1Api();
String body = "{\"metadata\":{\"labels\":{\"active\":\"true\"}}}";
V1Pod patch =
PatchUtils.patch(
V1Pod.class,
() ->
coreV1Api.patchNamespacedPodCall(
Objects.requireNonNull(pod.getMetadata().getName()),
namespace,
new V1Patch(body),
null,
null,
null,
null,
null),
V1Patch.PATCH_FORMAT_STRATEGIC_MERGE_PATCH,
coreV1Api.getApiClient());
System.out.println("Pod name: " + Objects.requireNonNull(pod.getMetadata()).getName() + "Patched by json-patched: " + body);
我想确保补丁只是更新标签选择器中 属性 的当前值,所以我从 V1Patch
[=19= 实现了 PATCH_FORMAT_STRATEGIC_MERGE_PATCH
].我参考了 Kubernetes Patch Example 构建 Patch 的结构。