【问题标题】:Javascript Kubernetes Client: List and Read Custom Resource DefinitionJavascript Kubernetes 客户端:列出和读取自定义资源定义
【发布时间】:2021-09-12 11:26:09
【问题描述】:

我正在使用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

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

【问题讨论】:

    标签: node.js kubernetes


    【解决方案1】:

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

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

    我创建了一个示例脚本,列出了所有 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
    ...
    

    【讨论】:

    • 您知道有一种方法可以获取所有自定义对象吗?或者我需要调用listNamespacedCustomObject,然后为每个对象调用getNamespacedCustomObject
    • 我已经检查了customObjectsApi.ts,但我不确定是否还有其他方法。
    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多