繁体   English   中英

如何使用 Node.js SDK 创建 Kubernetes 部署

[英]How to create a Kubernetes deployment using the Node.js SDK

我正在使用 Node.js 构建一个项目,这将要求我有一个可以部署到 Kubernetes 的应用程序。 我正在处理的服务将获取一些 Kubernetes 清单,向其中添加一些 ENV 变量,然后部署这些资源。

我有一些代码可以使用 SDK 和createNamespacedeleteNamespace为我创建和销毁命名空间。 这部分按我想要的方式工作,即不需要 Kubernetes YAML 文件。 我也想使用 SDK 来创建部署,但我似乎无法让它工作。 我找到了createNamespacedDeployment的代码示例,但是使用0.13.2的 0.13.2 版我无法使其正常工作。 当我运行找到的示例代码时,我收到此错误消息。

k8sApi.createNamespacedDeployment is not a function

我试图检查 SDK 的 git 存储库,尽管它很大,我还没有找到任何可以让我在 Z3B2819DD4C24EDA2FAF2052EEF449551 中定义部署的代码,但是找到了最接近的 IEF449551 部署不适合我,我需要部署。

如何通过 Node.js 创建部署并将其应用于我的 Kubernetes 集群?

您可以使用@c6o/kubelcient kubernetes 客户端。 这有点简单:

import { Cluster } from '@c6o/kubeclient'

const cluster = new Cluster({}) // Assumes process.env.KUBECONFIG is set
const result = await cluster.upsert({kind: 'Deployment', apiVersion.. })
if (result.error) ...

如果您有多个步骤,您也可以使用流利的 API :

           await cluster
            .begin(`Provision Apps`)
                .upsertFile('../../k8s/marina.yaml', options)
                .upsertFile('../../k8s/store.yaml', options)
                .upsertFile('../../k8s/harbourmaster.yaml', options)
                .upsertFile('../../k8s/lifeboat.yaml', options)
                .upsertFile('../../k8s/navstation.yaml', options)
                .upsertFile('../../k8s/apps.yaml', options)
                .upsertFile('../../k8s/istio.yaml', options)
            .end()

我们正在处理文档,但这里有很多使用此客户端的供应商: https://github.com/c6o/provisioners

部署管理由AppsV1Api class 处理:

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

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

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

const deploymentYamlString = fs.readFileSync('./deployment.yaml', { encoding: 'utf8'});
const deployment = k8s.loadYaml(deploymentYamlString);
const res = await appsApi.createNamespacedDeployment('default', deployment);

Generally, you can find the relevant API class for managing a Kubernetes object by its apiVersion, eg: Deployment -> apiVersion: apps/v1 -> AppsV1Api , CronJob -> apiVersion: batch/v1 -> BatchV1Api .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM