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