在Kubernetes-client Java api中,我可以使用以下方式获取给定应用程序的可用和总部署 pod 实例数:
ApiClient defaultClient = Configuration.getDefaultApiClient();
AppsV1beta1Api apiInstance = new AppsV1beta1Api();
...
try {
AppsV1beta1DeploymentList result = apiInstance.listDeploymentForAllNamespaces(_continue, fieldSelector, includeUninitialized, labelSelector, limit, pretty, resourceVersion, timeoutSeconds, watch);
foreach(ExtensionsV1beta1Deployment extensionsDeployment : result.getItems() ) {
Map<String, String> labels = extensionsDeployment.getMetadata().getLabels();
String appName = labels.getOrDefault("app", "");
ExtensionsV1beta1DeploymentStatus status = extensionsDeployment.getStatus();
int availablePods = status.getAvailableReplicas();
int deployedPods = status.getReplicas();
if ( availablePods != deployedPods) {
// Generate an alert
}
}
} catch (ApiException e) {
System.err.println("Exception when calling AppsV1beta1Api#listDeploymentForAllNamespaces");
e.printStackTrace();
}
在上面的示例中,我将availablePods
与进行比较deployedPods
,如果它们不匹配,我会生成警报。
如何使用 Prometheus 使用警报规则和/或 Alertmanager 配置复制此逻辑,它检查给定应用程序或作业的可用 pod 实例数量,如果它与指定数量的实例不匹配,它将触发警报?
指定的阈值可以是总阈值deployedPods
,也可以来自另一个配置文件或模板。