【问题标题】:How to get status of custom resource using Kubernetes C# .net Client?如何使用 Kubernetes C# .net 客户端获取自定义资源的状态?
【发布时间】:2021-11-25 12:48:46
【问题描述】:

在安装了 here 提到的 eck-operator 后,我使用以下 yaml 清单创建了一个 Elasticsearch 资源。

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 7.15.0
  nodeSets:
  - name: default
    count: 1
    config:
      node.store.allow_mmap: false

应用此清单后,我可以通过执行手动获取状态:

kubectl get elasticsearch -n ecknamespace

输出如下:

> $ kubectl get elasticsearch -n ecknamespace
  NAME          HEALTH   NODES  VERSION   PHASE   AGE 
  quickstart    green    3       7.15.0   Ready   3d17h

使用Kubernetes C# Client,如何以编程方式获取上述数据?

【问题讨论】:

  • 这和java有关吗?
  • java和C# k8s客户端的API类似,所以实现也差不多
  • 如果你添加了 java 标签,那么 java 开发人员会看到这篇文章,并且可能会有点胡思乱想,因为问题不是关于 java 的。标签应该是精确的,这不是添加尽可能多的练习:)

标签: c# kubernetes kubectl kubernetes-apiserver


【解决方案1】:

客户端包含如何与自定义资源交互的example

这将要求您定义文件cResource.csCustomResourceDefinition.cs 中描述的类。

之后,以下代码应列出elasticsearch 资源:

var config = KubernetesClientConfiguration.BuildConfigFromConfigFile();
var client = new GenericClient(config,  "elasticsearch.k8s.elastic.co", "v1", "elasticsearches");
var elasticSearches = await client.ListNamespacedAsync<CustomResourceList<CResource>>("default").ConfigureAwait(false);
foreach (var es in elasticSearches.Items)
{
    Console.WriteLine(es.Metadata.Name);
}

EDIT在OP的cmets之后:要查看自定义资源的所有字段,需要编辑CustomResource类(示例中为文件CustomResourceDefinition.cs)和相应的字段。

【讨论】:

  • 我试过了——但是我没有得到 kubectl get elasticsearch 输出中显示的“健康”、“阶段”和其他字段
  • 以后,请在问题中描述您之前的尝试及其结果。另外,您能否将kubectl get elasticsearch -n ecknamespace -o json 的输出添加到您的原始问题中?这样我就可以编辑我的答案以包含这些字段。
  • 我明白了,我进入函数 ListNamespacedAsync 并看到响应 JSON 中出现的那些字段。由于我的自定义资源类结构,这些字段在反序列化期间丢失。
猜你喜欢
  • 2021-09-04
  • 2021-09-12
  • 2021-07-22
  • 1970-01-01
  • 2022-09-27
  • 2020-07-26
  • 2021-09-15
  • 2019-03-16
  • 1970-01-01
相关资源
最近更新 更多