📅  最后修改于: 2023-12-03 15:02:33.642000             🧑  作者: Mango
当你需要在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中获取。