Kubernetes support

* Total CPU and Memory usage for the entire cluster
* Total CPU and Memory usage for kubernetes pods
* Service discovery via annotations on ingress
* No storage stats yet
* No network stats yet
This commit is contained in:
James Wynn 2022-10-24 17:03:35 -05:00
parent b25ba09e18
commit c4333fd2dc
18 changed files with 479 additions and 19 deletions

View file

@ -0,0 +1,42 @@
import { CoreV1Api } from "@kubernetes/client-node";
import getKubeConfig from "../../../../utils/config/kubernetes";
export default async function handler(req, res) {
const APP_LABEL = "app.kubernetes.io/name";
const { service } = req.query;
const [namespace, appName] = service;
if (!namespace && !appName) {
res.status(400).send({
error: "kubernetes query parameters are required",
});
return;
}
const labelSelector = `${APP_LABEL}=${appName}`;
try {
const kc = getKubeConfig();
const coreApi = kc.makeApiClient(CoreV1Api);
const podsResponse = await coreApi.listNamespacedPod(namespace, null, null, null, null, labelSelector);
const pods = podsResponse.body.items;
if (pods.length === 0) {
res.status(200).send({
error: "not found",
});
return;
}
// at least one pod must be in the "Running" phase, otherwise its "down"
const runningPod = pods.find(pod => pod.status.phase === "Running");
const status = runningPod ? "running" : "down";
res.status(200).json({
status
});
} catch {
res.status(500).send({
error: "unknown error",
});
}
}