我正在使用 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
知道如何实现这一目标吗?
答案 0 :(得分:1)
您可以使用 listNamespacedCustomObject 函数。此函数有四个必需参数,如下所述:
我创建了一个示例脚本,列出了所有 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
...