📜  kubernetes 获取集群 - Javascript (1)

📅  最后修改于: 2023-12-03 15:02:33.642000             🧑  作者: Mango

Kubernetes 获取集群 - Javascript

当你需要在Javascript中访问Kubernetes集群的API时,你可以使用Kubernetes Javascript client。这是一个官方支持的库,可以方便地与你的Kubernetes集群进行交互。

安装

你可以通过npm安装客户端:

npm install @kubernetes/client-node
认证

前提是你需要已经通过API Server进行了认证,可以使用下面的方法配置客户端:

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

const kc = new k8s.KubeConfig();
kc.loadFromCluster();
const k8sApi = kc.makeApiClient(k8s.CoreV1Api);

这个例子演示了如何从Kubernetes的config文件来加载集群配置。也可以使用loadFromCluster()方法从Pod中获取配置。

如果需要使用自定义的身份认证,可以使用 loadFromOptions 方法从配置选项中加载身份认证信息:

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

const kc = new k8s.KubeConfig();
kc.loadFromOptions({
    clusters: [{
        name: 'cluster-name',
        server: 'https://your.cluster.com',
        skipTLSVerify: true,  // 忽略TLS验证
    }],
    users: [{
        name: 'user-name',
        token: 'your-token',
    }],
    contexts: [{
        name: 'context-name',
        user: 'user-name',
        cluster: 'cluster-name',
    }],
});
const k8sApi = kc.makeApiClient(k8s.CoreV1Api);

Kubernetes的API客户端是异步的,对于REST的读/写操作都是返回Promise类型 来实现。

查询集群资源

一个常见的需求就是查询集群里运行的Pod。以下是一个例子:

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

async function listPods() {
    const kc = new k8s.KubeConfig();
    kc.loadFromCluster();
    const k8sApi = kc.makeApiClient(k8s.CoreV1Api);

    const res = await k8sApi.listPodForAllNamespaces();
    console.log(res.body.items);
}

listPods().catch(err => {
    console.error('Error: ', err);
});

这个例子展示了如何使用listPodForAllNamespaces方法来检索集群中的所有pod并打印它们。

操作集群资源

我们也可以创建和删除集群里的资源。下面是一个例子:

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

async function createSampleDeployment() {
    const kc = new k8s.KubeConfig();
    kc.loadFromCluster();
    const k8sAppsApi = kc.makeApiClient(k8s.AppsV1Api);

    const deploymentManifest = {
        apiVersion: 'apps/v1',
        kind: 'Deployment',
        metadata: {
            name: 'nginx-deployment',
        },
        spec: {
            selector: {
                matchLabels: {
                    app: 'nginx',
                },
            },
            replicas: 2,
            template: {
                metadata: {
                    labels: {
                        app: 'nginx',
                    },
                },
                spec: {
                    containers: [
                        {
                            name: 'nginx',
                            image: 'nginx:1.14.2',
                            ports: [
                                {
                                    containerPort: 80,
                                },
                            ],
                        },
                    ],
                },
            },
        },
    };

    const res = await k8sAppsApi.createNamespacedDeployment('default', deploymentManifest);
    console.log('Deployment created! ' + res.body.metadata.name);
}

createSampleDeployment().catch(err => {
    console.error('Error: ', err);
});

这个例子演示了如何使用createNamespacedDeployment方法创建一个Deployment。对于DELETE操作可以使用deleteNamespacedDeployment方法。

更多

使用@kubernetes/client-node库可以轻松地获取并操作Kubernetes集群。完整代码和更多示例可以在GitHub中获取。