c# - Kubernetes - 找出服务中有多少个副本?

标签 c# kubernetes

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

最佳答案

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

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

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

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

  • ServiceAccount 并将其与 Pod 关联。您还可以使用默认服务帐户,但最好创建新的服务帐户,这样您就不会向命名空间中的所有 Pod 授予额外的角色。
  • 角色,有权获取部署副本的数量
  • RoleBindingRole 绑定(bind)到 ServiceAccount

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

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

Kubernetes 将与每个 Pod 内的服务帐户关联的 token 安装在 /var/run/secrets/kubernetes.io/serviceaccount/token 处。

查询 Kubernetes API 服务器:

  • 您可以在应用程序的 docker 镜像中安装 kubectl 并从代码中调用它来查询 api 服务器。 kubectl 可以检测到它正在从 Pod 内部运行,并自动使用 token 向 kubernetes api-server 进行身份验证。

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

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

关于c# - Kubernetes - 找出服务中有多少个副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59682162/

相关文章:

kubernetes - Helm chart 上是否可以有条件变量以进行部署?

kubernetes - Kubernetes 上的 Redis 主/从复制可实现超低延迟

具有自定义路由表的 Azure Kubernetes 服务

c# - Java 格式 Date to UTC 有时会产生 '????-??-??T??:??:??.???Z'

c# - 获取已安装 Msi 的产品代码

c# - 如何制作 CookieContainer 的副本?

kubernetes - 使用 Kubernetes 安装的 Eclipse Hono 1.1.1 - 创建租户时出现问题

c# - 将 C# 代码列表导出为具有颜色语法的 HTML 代码

c# - 如何自动创建 .cs 文件?

google-compute-engine - GCE - 没有节点的 stackdriver 内存指标