В Java API-интерфейсе Kubernetes-client я могу получить количество доступных и общих развернутых экземпляров 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, где он проверяет количество доступных экземпляров модуля для данного приложения или задания, и если оно не соответствует указанному количеству экземпляры, это вызовет предупреждение?
Указанный порог может быть общим deployedPods
или может быть из другого файла конфигурации или шаблона.