You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Kubernetes C# .NET Client获取Elasticsearch自定义资源状态?

解决方案

Elasticsearch是ECK定义的Kubernetes自定义资源(CRD),你需要先定义匹配其结构的实体类,再通过Kubernetes C# Client的自定义资源接口获取对应数据。

步骤1:定义CRD对应实体类

using KubernetesClient.Models;
using System.Collections.Generic;

[KubernetesEntity(Group = "elasticsearch.k8s.elastic.co", ApiVersion = "v1", Kind = "Elasticsearch", PluralName = "elasticsearches")]
public class Elasticsearch : CustomResource<ElasticsearchSpec, ElasticsearchStatus>
{
}

public class ElasticsearchSpec
{
    public string Version { get; set; }
    public List<NodeSet> NodeSets { get; set; }
    // 其他不需要用到的spec字段可省略
}

public class NodeSet
{
    public string Name { get; set; }
    public int Count { get; set; }
    public Dictionary<string, object> Config { get; set; }
}

public class ElasticsearchStatus
{
    public string Health { get; set; }
    public int Nodes { get; set; }
    public string Version { get; set; }
    public string Phase { get; set; }
    // 其他不需要用到的status字段可省略
}

步骤2:调用客户端获取资源数据

using k8s;
using k8s.Models;

class Program
{
    static async Task Main(string[] args)
    {
        // 加载Kubernetes配置,本地开发默认读取~/.kube/config,集群内运行自动读取Service Account
        var config = KubernetesClientConfiguration.BuildConfigFromConfigFile();
        using var client = new Kubernetes(config);

        string targetNamespace = "ecknamespace";
        
        // 获取命名空间下所有Elasticsearch资源
        var esList = await client.ListNamespacedCustomObjectAsync<Elasticsearch>(targetNamespace);
        foreach (var es in esList.Items)
        {
            Console.WriteLine($"NAME: {es.Metadata.Name}");
            Console.WriteLine($"HEALTH: {es.Status.Health}");
            Console.WriteLine($"NODES: {es.Status.Nodes}");
            Console.WriteLine($"VERSION: {es.Status.Version}");
            Console.WriteLine($"PHASE: {es.Status.Phase}");
            Console.WriteLine($"AGE: {DateTime.UtcNow - es.Metadata.CreationTimestamp.GetValueOrDefault().UtcDateTime}");
        }

        // 可选:直接获取指定名称的单个Elasticsearch资源
        var singleEs = await client.GetNamespacedCustomObjectAsync<Elasticsearch>("quickstart", targetNamespace);
        Console.WriteLine($"指定ES实例健康状态: {singleEs.Status.Health}");
    }
}

补充说明

  • 提前安装Kubernetes C# Client的NuGet包:KubernetesClient
  • 实体类中不需要用到的字段可直接省略,序列化时会自动忽略未定义属性
  • 不同版本的Kubernetes C# Client接口命名可能存在微小差异,以你安装的版本为准

内容的提问来源于stack exchange,提问作者Jerald Baker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:09:02