首页 > 解决方案 > Kubernetes - 找出服务中有多少个副本?

问题描述

我在一个服务中分组了一个 .net 核心 C# 控制台应用程序的多个副本。我希望能够在每个副本中读取它们的总数(在它们重新缩放之后-> 总数减少或增加)。

标签: c#kubernetes

解决方案


您需要查询 kubernetes api 服务器以从运行在 pod 中的应用程序获取副本的详细信息。

使用 Kubernetes API 服务器进行身份验证

要查询启用了 RBAC 的 kubernetes api 服务器,您需要进行身份验证,并且根据您查询的 api 端点,您还需要所需的角色。

每个 pod 都有一个与之关联的服务帐户,您可以使用该服务帐户向 api-server 进行身份验证。您需要创建以下资源:

  • ServiceAccount并将其与 pod 关联。您也可以使用默认服务帐户,但最好创建新的服务帐户,这样您就不会将额外的角色授予命名空间中的所有 pod。
  • Roleget它对部署的副本数量具有特权
  • RoleBinding绑定RoleServiceAccount

注意:根据您尝试查询的资源类型,您可能需要ClusterRoleandClusterRoleBinding而不是Roleand RoleBinding

要将 ServiceAccount 与 pod 关联,请使用spec.serviceAccountNamepod 规范中的字段。

Kubernetes 将与服务帐户关联的令牌安装在每个 pod 中/var/run/secrets/kubernetes.io/serviceaccount/token

查询 Kubernetes API 服务器

  • 您可以kubectl在应用程序的 docker 映像中安装并从您的代码中调用它来查询 api-server。kubectl可以检测到它是从 pod 内部运行的,并自动使用令牌向 kubernetes api-server 进行身份验证。

  • 您还可以使用 kubernetes 客户端库(https://github.com/kubernetes-client/csharp)。在这种情况下,您需要InClusterConfig使用服务帐户令牌。

    var config = KubernetesClientConfiguration.InClusterConfig()
    var client = new Kubernetes(config);

推荐阅读