Kubernetes C# 客户端 API 之间的区别

Difference between Kubernetes C# client APIs

我有 KubernetesClient 代码 运行 我在 K3s Orchestrator 上的应用程序。

我想了解两个 K3s API PatchNamespacedServiceWithHttpMessagesAsyncReplaceNamespacedServiceWithHttpMessagesAsync [link to these APIs] 之间的区别(用例)。除此之外 link 我找不到任何地方可以阅读有关 K3s API 用例的信息。请在这里帮助我。

PS:

  1. 基本上我正在尝试更新现有的服务,所以想了解上述两个 API 之间的区别,我将使用更新的补丁主体(更新的服务部署)调用其中任何一个。
  2. 这个问题是我的
  3. 的扩展

TL;DR

ReplaceNamespacedServiceWithHttpMessagesAsync 使用 PUT HTTP method. PatchNamespacedServiceWithHttpMessagesAsync use PATCH HTTP 方法。

PUT 方法是更新或创建一个新的对象。如果这样的对象已经存在,则更新所有数据,如果不存在,则根据发送的信息创建一个新对象。 PATCH 方法与 PUT 一样,用于更新有关对象的数据,但它需要对象存在。这是因为它没有在请求中发送完整的数据,而只发送了要更新的数据。


总的来说,这两个 API 彼此非常相似。它们仅在几个地方不同:

我们在第一行有一个不同的名字: 在ReplaceNamespacedServiceWithHttpMessagesAsync

public async Task<HttpOperationResponse<V1Service>> ReplaceNamespacedServiceWithHttpMessagesAsync(
             V1Service body,

并在 PatchNamespacedServiceWithHttpMessagesAsync 中:

public async Task<HttpOperationResponse<V1Service>> PatchNamespacedServiceWithHttpMessagesAsync(
            V1Patch body,

PatchNamespacedServiceWithHttpMessagesAsync

的第7行添加了一个bool
bool? force = null,

第 36 行:

tracingParameters.Add("force", force);

ReplaceNamespacedServiceWithHttpMessagesAsync 的第 37 行和 PatchNamespacedServiceWithHttpMessagesAsync 的第 39 行也不同:

ServiceClientTracing.Enter(_invocationId, this, "ReplaceNamespacedService", tracingParameters);

ServiceClientTracing.Enter(_invocationId, this, "PatchNamespacedService", tracingParameters);

然后添加片段(从第 56 行到第 59 行)PatchNamespacedServiceWithHttpMessagesAsync:

if (force != null)
             {
                 _queryParameters.Add(string.Format("force={0}", System.Uri.EscapeDataString(SafeJsonConvert.SerializeObject(force, SerializationSettings).Trim('"'))));
             }

最后也是最重要的区别是 ReplaceNamespacedServiceWithHttpMessagesAsync 中的第 65 行和 PatchNamespacedServiceWithHttpMessagesAsync 中的第 71 行。

_httpRequest.Method = HttpMethod.Put;

_httpRequest.Method = HttpMethod.Patch;