我有一个 .net core C# 控制台应用程序的多个副本,分组在一个服务中。我希望能够在每个副本中读取它们的总数(在重新缩放后 -> 总数减少或增加)。
最佳答案
您需要查询 kubernetes api 服务器以从 Pod 内运行的应用程序获取副本的详细信息。
使用 Kubernetes API 服务器进行身份验证:
要查询启用了 RBAC 的 kubernetes api 服务器,您需要经过身份验证,并且根据您正在查询的 api 端点,您还需要所需的角色。
每个 Pod 都有一个与其关联的服务帐户,您可以使用该帐户向 api 服务器进行身份验证。您需要创建以下资源:
ServiceAccount
并将其与 Pod 关联。您还可以使用默认服务帐户,但最好创建新的服务帐户,这样您就不会向命名空间中的所有 Pod 授予额外的角色。角色
,有权获取
部署副本的数量RoleBinding
将Role
绑定(bind)到ServiceAccount
。
注意:根据您尝试查询的资源类型,您可能需要 ClusterRole
和 ClusterRoleBinding
而不是 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/