Node.js 我可以在Kubernetes中部署YAML代码作为没有YAML文件的文件吗

Node.js 我可以在Kubernetes中部署YAML代码作为没有YAML文件的文件吗,node.js,kubernetes,yaml,kubectl,Node.js,Kubernetes,Yaml,Kubectl,通过使用kubectl apply或使用helm install一次部署所有YAML文件,可以很容易地在Kubernetes中部署YAML文件,但我正在寻找一种方法,通过这种方法,我可以在不实际创建文件的情况下部署YAML文件,并直接通过nodeJS代码进行部署 我现在正在做的是: 我可以部署由nodeJS代码创建的YAML文件,nodeJS代码首先创建JSON对象并将其解析为YAML,然后生成其YAML文件,同样的代码也可以部署这些文件 我需要的是: 我希望能够在不创建YAML文件的情况下直接

通过使用
kubectl apply
或使用
helm install
一次部署所有YAML文件,可以很容易地在Kubernetes中部署YAML文件,但我正在寻找一种方法,通过这种方法,我可以在不实际创建文件的情况下部署YAML文件,并直接通过nodeJS代码进行部署

我现在正在做的是:

我可以部署由nodeJS代码创建的YAML文件,nodeJS代码首先创建JSON对象并将其解析为YAML,然后生成其YAML文件,同样的代码也可以部署这些文件

我需要的是:


我希望能够在不创建YAML文件的情况下直接部署YAML代码。

要从命令行应用,请使用:

node js generate yaml命令| kubectl apply-f-

或者直接从代码使用kubectl javascript客户端

这里可以找到
kubectl apply
的示例

import*作为k8s从'@kubernetes/client node'导入;
从“fs”导入*作为fs;
从“js yaml”导入*作为yaml;
从“util”导入{promisify};
/**
*复制“kubectl apply”的功能。也就是说,如果在“specFile”中定义了资源,则创建这些资源
*不存在,如果确实存在,请对其进行修补。
*
*@param specPath文件系统路径到YAML Kubernetes规范。
*@return已创建资源数组
*/
导出异步函数apply(specPath:string):Promise{
const kc=新的k8s.KubeConfig();
kc.loadFromDefault();
const client=k8s.KubernetesObjectApi.makeApiClient(kc);
const fsReadFileP=promisify(fs.readFile);
const specString=await fsReadFileP(specPath,'utf8');
常量规范:k8s.KubernetesObject[]=yaml.safeLoadAll(规范字符串);
const validSpecs=specs.filter((s)=>s&&s.kind&&s.metadata);
创建的常量:k8s.KubernetesObject[]=[];
用于(有效规格的常量规格){
//这是为了说服旧版本的TypeScript,即使我们已经过滤了规范,元数据仍然存在
//没有元数据输出
spec.metadata=spec.metadata | |{};
spec.metadata.annotations=spec.metadata.annotations | |{};
删除spec.metadata.annotations['kubectl.kubernetes.io/last applicated configuration'];
spec.metadata.annotations['kubectl.kubernetes.io/last applicated configuration']=JSON.stringify(spec);
试一试{
//尝试获取资源,如果它不存在,将抛出一个错误,我们将最终陷入捕获
//街区。
等待客户。阅读(规范);
//我们得到了资源,所以它存在,所以修补它
const response=wait client.patch(规范);
创建.push(response.body);
}捕获(e){
//我们没有得到资源,所以它不存在,所以创建它
const response=wait client.create(spec);
创建.push(response.body);
}
}
创建回报;
}

知道如何读取、修补和创建名称空间吗?读取和创建部分可以工作,但当修补时,我得到的
请求主体的格式未知-接受的媒体类型包括:application/json patch+json、application/merge patch+json、,application/apply patch+yaml
尝试为Kubernetes发行版找到合适的客户端。不知道。Mby尝试升级Kubernetes客户端。
import * as k8s from '@kubernetes/client-node';
import * as fs from 'fs';
import * as yaml from 'js-yaml';
import { promisify } from 'util';

/**
 * Replicate the functionality of `kubectl apply`.  That is, create the resources defined in the `specFile` if they do
 * not exist, patch them if they do exist.
 *
 * @param specPath File system path to a YAML Kubernetes spec.
 * @return Array of resources created
 */
export async function apply(specPath: string): Promise<k8s.KubernetesObject[]> {
    const kc = new k8s.KubeConfig();
    kc.loadFromDefault();
    const client = k8s.KubernetesObjectApi.makeApiClient(kc);
    const fsReadFileP = promisify(fs.readFile);
    const specString = await fsReadFileP(specPath, 'utf8');
    const specs: k8s.KubernetesObject[] = yaml.safeLoadAll(specString);
    const validSpecs = specs.filter((s) => s && s.kind && s.metadata);
    const created: k8s.KubernetesObject[] = [];
    for (const spec of validSpecs) {
        // this is to convince the old version of TypeScript that metadata exists even though we already filtered specs
        // without metadata out
        spec.metadata = spec.metadata || {};
        spec.metadata.annotations = spec.metadata.annotations || {};
        delete spec.metadata.annotations['kubectl.kubernetes.io/last-applied-configuration'];
        spec.metadata.annotations['kubectl.kubernetes.io/last-applied-configuration'] = JSON.stringify(spec);
        try {
            // try to get the resource, if it does not exist an error will be thrown and we will end up in the catch
            // block.
            await client.read(spec);
            // we got the resource, so it exists, so patch it
            const response = await client.patch(spec);
            created.push(response.body);
        } catch (e) {
            // we did not get the resource, so it does not exist, so create it
            const response = await client.create(spec);
            created.push(response.body);
        }
    }
    return created;
}