【问题标题】:Cannot patch Kubernetes pod using Java kubernetes-client library无法使用 Java kubernetes-client 库修补 Kubernetes pod
【发布时间】:2021-07-15 05:31:10
【问题描述】:

我有一个在 pod 上运行健康检查的应用程序。鉴于运行状况检查,我正在尝试将 pod 的标签选择器从 active: true 修补为 active: false。以下是 pod 迭代更改每个 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 作为示例。

运行的输出没有错误。预期的行为是将这些 pod 的标签设置为 true。这些变化没有反映出来。我认为这个问题是由补丁主体提供的语法引起的。以上是访问 pod 中标签的正确语法吗?

【问题讨论】:

  • /spec/template/... 看起来像是来自 Deployment 或 StatefulSet;路径是否需要以 /metadata 开头?
  • 你说得很好,我是从部署中引用标签的路径,而不是在 pod 级别。

标签: api kubernetes java-client


【解决方案1】:

在研究了更多当前的实现之后,客户端提供了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 api 实现了PATCH_FORMAT_STRATEGIC_MERGE_PATCH。我引用了 Kubernetes Patch Example 来构建 Patch 的结构。

【讨论】:

    猜你喜欢
    • 2019-05-22
    • 1970-01-01
    • 2019-12-28
    • 2021-10-23
    • 1970-01-01
    • 2019-11-21
    • 2021-06-26
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多