簡體   English   中英

如何為 Kubernetes nodejs API 客戶端從 Z6EEDC273A68A62D7C733 文件生成“V1Job” object?

[英]How can I generate a `V1Job` object for the Kubernetes nodejs API client from a yaml file?

我以前在 python 中使用:

    with open(path.join(path.dirname(__file__), "job.yaml")) as f:
        body= yaml.safe_load(f)

        try:
            api_response = api_instance.create_namespaced_job(namespace, body)

查看 nodejs api 客戶端的來源:

    public createNamespacedJob (namespace: string, body: V1Job, includeUninitialized?: boolean, pretty?: string, dryRun?: string, options: any = {}) : Promise<{ response: http.IncomingMessage; body: V1Job;  }> {

如何生成V1Job


我已經嘗試了以下但得到一個非常詳細的錯誤消息/響應:

const k8s = require('@kubernetes/client-node');
const yaml = require('js-yaml');
const fs   = require('fs');

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

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

var namespace = {
    metadata: {
        name: 'test123',
    },
};

try {
    var job = yaml.safeLoad(fs.readFileSync('job.yaml', 'utf8'));

    k8sApi.createNamespacedJob(namespace, job).then(
        (response) => {
            console.log('Created namespace');
            console.log("Success!")
        },
        (err) => {
            console.log(err);
            console.log(job);
            console.log("Err")
        },
    );

} catch (e) {
    console.log(e);
}
  1. V1Job似乎是一個普通的對象,所以下面的工作。
  2. 命名空間必須是string而不是對象...
const k8s = require('@kubernetes/client-node');
const yaml = require('js-yaml');
const fs   = require('fs');

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

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

try {
    var job = yaml.safeLoad(fs.readFileSync('job.yaml', 'utf8'));

    k8sApi.createNamespacedJob("default", job).then(
        (response) => {
            console.log("Success")
        },
        (err) => {
            console.log(e);
            process.exit(1);
        },
    );

} catch (e) {
    console.log(e);
    process.exit(1);
}

這與chris-stryczynski的示例相同,但有 2 處細微修改。 另請注意, chris-stryczynski的 NodeJs-8 示例導致(至少在我這邊):

(在執行 k8sApi.createNamespacedJob 時)

TypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type function at promisify

NodeJs-12 不會發生此錯誤。

這是修改后的版本:

const k8s = require('@kubernetes/client-node');
const yaml = require('js-yaml');
const fs   = require('fs');

const kc = new k8s.KubeConfig();
kc.loadFromDefault();                                           //You might consider using kc.loadFromFile(...) here

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

try {
    var job = yaml.load(fs.readFileSync('job.yaml', 'utf8'));   // Change#1 safeLoad->load 

    k8sApi.createNamespacedJob("default", job).then(
        (response) => {
            console.log("Success")
        },
        (err) => {
            console.log(err);                                   // Change#2 e->err 
            process.exit(1);
        },
    );

} catch (e) {
    console.log(e);
    process.exit(1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM