c# - Kubernetes - 找出服务中有多少个副本?
问题描述
我在一个服务中分组了一个 .net 核心 C# 控制台应用程序的多个副本。我希望能够在每个副本中读取它们的总数(在它们重新缩放之后-> 总数减少或增加)。
解决方案
您需要查询 kubernetes api 服务器以从运行在 pod 中的应用程序获取副本的详细信息。
使用 Kubernetes API 服务器进行身份验证:
要查询启用了 RBAC 的 kubernetes api 服务器,您需要进行身份验证,并且根据您查询的 api 端点,您还需要所需的角色。
每个 pod 都有一个与之关联的服务帐户,您可以使用该服务帐户向 api-server 进行身份验证。您需要创建以下资源:
ServiceAccount
并将其与 pod 关联。您也可以使用默认服务帐户,但最好创建新的服务帐户,这样您就不会将额外的角色授予命名空间中的所有 pod。Role
get
它对部署的副本数量具有特权RoleBinding
绑定Role
到ServiceAccount
。
注意:根据您尝试查询的资源类型,您可能需要ClusterRole
andClusterRoleBinding
而不是Role
and RoleBinding
。
要将 ServiceAccount 与 pod 关联,请使用spec.serviceAccountName
pod 规范中的字段。
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);
推荐阅读
- android - 房间迁移添加列的值取决于现有的
- multithreading - 如何从另一个使线程启动 GUI 的应用程序更新 TextArea?
- javascript - 为什么我的变量在更改另一个变量的显示后变得未定义?
- css - 使用 Bootstrap col-md-4 网格,但它会中断
- php - 使用另一个多维关联数组对一个多维关联数组中的值进行计数或求和
- javascript - 在jQuery中动态选择一个特定的复选框
- android - 如何用按钮和文本实现动态线性布局?
- java - 解析文本和编译规则,应用于验证输入 XML 文件
- mysql - 尝试通过触发器(插入时)插入多行会导致错误
- r - 将图例中的颜色顺序与堆积条形图中的颜色顺序对应起来