Javascript Kubernetes 客户端:列出和读取自定义资源定义

时间:2021-06-30 09:51:19

标签: node.js kubernetes

我正在使用 Javascript Kubernetes Client 并尝试从自定义资源定义中读取所有资源。我特别想运行 kubectl get prometheusrule(prometheusrule 是我的 CRD)。

我还没有找到可以执行此操作的 wat。我可以这样阅读资源:

const kc = new k8s.KubeConfig();
kc.loadFromDefault();

const k8sApi = kc.makeApiClient(k8s.CoreV1Api);

k8sApi.listNamespacedPod('default').then((res) => {
    res.body.items.forEach(pod => console.log(pod.metadata.name));
});

但它没有提供读取 CRD 的方法。

我也试过

const k8Client = k8s.KubernetesObjectApi.makeApiClient(kc);
k8Client.read({ kind: "service"}).then(res => console.log(res));

但是这样我得到错误 UnhandledPromiseRejectionWarning: Error: Unrecognized API version and kind: v1 service

知道如何实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

您可以使用 listNamespacedCustomObject 函数。此函数有四个必需参数,如下所述:

  • group - 自定义资源的组名
  • version - 自定义资源的版本
  • 命名空间 - 自定义资源的命名空间
  • 复数 - 自定义资源的复数名称。

我创建了一个示例脚本,列出了所有 PrometheusRules 以说明其工作原理:

$ cat list_rules.js
const k8s = require('@kubernetes/client-node')
const kc = new k8s.KubeConfig()
kc.loadFromDefault()

const k8sApi = kc.makeApiClient(k8s.CustomObjectsApi)

k8sApi.listNamespacedCustomObject('monitoring.coreos.com','v1','default', 'prometheusrules').then((res) => {
    res.body.items.forEach(rule => console.log(rule.metadata.name));
});

我们可以检查它是否按预期工作:

$ node list_rules.js
prometheus-kube-prometheus-alertmanager.rules
prometheus-kube-prometheus-etcd
prometheus-kube-prometheus-general.rules
prometheus-kube-prometheus-k8s.rules
...