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

求可获取AKS集群Pod/Node运行详情及请求统计的C#代码

解决方案

获取Pod/Node运行信息

Kubernetes提供了Downward API让Pod内的应用轻松获取自身及所在节点的元数据,最简便的方式是通过环境变量注入:

第一步:配置Deployment注入元数据

在你的AKS Deployment YAML中添加以下配置,将Pod和Node的核心信息注入为容器环境变量:

spec:
  containers:
  - name: your-app-container
    image: your-app-image:tag
    env:
    - name: POD_NAME
      valueFrom:
        fieldRef:
          fieldPath: metadata.name
    - name: POD_UID
      valueFrom:
        fieldRef:
          fieldPath: metadata.uid
    - name: NODE_NAME
      valueFrom:
        fieldRef:
          fieldPath: spec.nodeName
    - name: NODE_UID
      valueFrom:
        fieldRef:
          fieldPath: spec.nodeUid

请求次数统计实现

使用ASP.NET Core中间件实现全局请求计数,通过Interlocked类保证多线程场景下的计数准确性。

完整C#代码示例

1. 读取Pod/Node元数据的工具类

public class KubernetesMetadata
{
    public string PodName => Environment.GetEnvironmentVariable("POD_NAME") ?? "Unknown";
    public string PodUid => Environment.GetEnvironmentVariable("POD_UID") ?? "Unknown";
    public string NodeName => Environment.GetEnvironmentVariable("NODE_NAME") ?? "Unknown";
    public string NodeUid => Environment.GetEnvironmentVariable("NODE_UID") ?? "Unknown";
}

2. 请求统计中间件

public class RequestCountMiddleware
{
    private static long _requestCount = 0;
    private readonly RequestDelegate _next;

    public RequestCountMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context, ILogger<RequestCountMiddleware> logger)
    {
        // 线程安全地增加请求计数
        Interlocked.Increment(ref _requestCount);
        logger.LogInformation("当前Pod累计请求次数: {Count}, Pod名称: {PodName}", 
            _requestCount, 
            Environment.GetEnvironmentVariable("POD_NAME") ?? "Unknown");

        await _next(context);
    }

    // 对外暴露当前计数的静态方法
    public static long GetRequestCount() => Interlocked.Read(ref _requestCount);
}

// 中间件扩展注册方法
public static class RequestCountMiddlewareExtensions
{
    public static IApplicationBuilder UseRequestCount(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<RequestCountMiddleware>();
    }
}

3. Program.cs中注册服务与中间件

var builder = WebApplication.CreateBuilder(args);

// 注册元数据工具类为单例
builder.Services.AddSingleton<KubernetesMetadata>();

// 添加日志服务
builder.Services.AddLogging();

var app = builder.Build();

// 启用请求统计中间件
app.UseRequestCount();

// 示例接口:返回当前Pod信息与请求计数
app.MapGet("/status", (KubernetesMetadata metadata) =>
{
    return Results.Ok(new
    {
        PodName = metadata.PodName,
        PodUid = metadata.PodUid,
        NodeName = metadata.NodeName,
        NodeUid = metadata.NodeUid,
        TotalRequests = RequestCountMiddleware.GetRequestCount()
    });
});

app.Run();

注意事项

  • 必须确保Deployment已配置Downward API环境变量注入,否则应用会返回"Unknown"值
  • 内存中的请求计数会在Pod重启后重置,如需持久化统计,可将计数同步至Redis、数据库等外部存储
  • 若需要更复杂的Kubernetes资源信息,可使用官方KubernetesClient库调用API,但需为Pod的ServiceAccount配置对应权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:42:46