What is @kubernetes/client-node?
@kubernetes/client-node is an official Kubernetes client library for Node.js. It allows developers to interact with Kubernetes clusters programmatically, providing a way to manage Kubernetes resources, perform CRUD operations, and watch for changes in the cluster.
What are @kubernetes/client-node's main functionalities?
CRUD Operations on Kubernetes Resources
This feature allows you to perform CRUD operations on Kubernetes resources. The code sample demonstrates how to list all pods in the default namespace.
const k8s = require('@kubernetes/client-node');
const kc = new k8s.KubeConfig();
kc.loadFromDefault();
const k8sApi = kc.makeApiClient(k8s.CoreV1Api);
// List all pods in the default namespace
k8sApi.listNamespacedPod('default').then((res) => {
console.log(res.body);
});
Watch for Changes in the Cluster
This feature allows you to watch for changes in the Kubernetes cluster. The code sample demonstrates how to watch for changes in pods in the default namespace.
const k8s = require('@kubernetes/client-node');
const kc = new k8s.KubeConfig();
kc.loadFromDefault();
const watch = new k8s.Watch(kc);
// Watch for changes in pods in the default namespace
watch.watch('/api/v1/namespaces/default/pods', {},
(type, obj) => {
console.log(`Type: ${type}`);
console.log(`Object: ${JSON.stringify(obj)}`);
},
(err) => {
console.error(err);
}
);
Custom Resource Definitions (CRDs)
This feature allows you to interact with Custom Resource Definitions (CRDs). The code sample demonstrates how to list all custom resources of a specific type in the default namespace.
const k8s = require('@kubernetes/client-node');
const kc = new k8s.KubeConfig();
kc.loadFromDefault();
const customObjectsApi = kc.makeApiClient(k8s.CustomObjectsApi);
// List all custom resources of a specific type
customObjectsApi.listNamespacedCustomObject('example.com', 'v1', 'default', 'examples').then((res) => {
console.log(res.body);
});
Other packages similar to @kubernetes/client-node
kubernetes-client
The 'kubernetes-client' package, also known as 'node-kubernetes-client', is another Node.js client for Kubernetes. It provides similar functionalities to @kubernetes/client-node, such as managing Kubernetes resources and performing CRUD operations. However, it is not an official client library and may have different API conventions and support.
k8s
The 'k8s' package is a lightweight Kubernetes client for Node.js. It offers basic functionalities for interacting with Kubernetes clusters, such as listing, creating, and deleting resources. Compared to @kubernetes/client-node, it is simpler and may lack some advanced features but can be easier to use for basic tasks.
Javascript Kubernetes Client information
The Javascript clients for Kubernetes is implemented in
typescript, but can be called from either
Javascript or Typescript.
For now, the client is implemented for server-side use with node
using the request
library.
There are future plans to also build a jQuery compatible library but
for now, all of the examples and instructions assume the node client.
Installation
npm install @kubernetes/client-node
Example code
List all pods
const k8s = require('@kubernetes/client-node');
const kc = new k8s.KubeConfig();
kc.loadFromDefault();
const k8sApi = kc.makeApiClient(k8s.Core_v1Api);
k8sApi.listNamespacedPod('default').then((res) => {
console.log(res.body);
});
Create a new namespace
const k8s = require('@kubernetes/client-node');
const kc = new k8s.KubeConfig();
kc.loadFromDefault();
const k8sApi = kc.makeApiClient(k8s.Core_v1Api);
var namespace = {
metadata: {
name: 'test',
},
};
k8sApi.createNamespace(namespace).then(
(response) => {
console.log('Created namespace');
console.log(response);
k8sApi.readNamespace(namespace.metadata.name).then((response) => {
console.log(response);
k8sApi.deleteNamespace(namespace.metadata.name, {} );
});
},
(err) => {
console.log('Error!: ' + err);
},
);
Create a cluster configuration programatically
const k8s = require('@kubernetes/client-node');
const cluster = {
name: 'my-server',
server: 'http://server.com',
};
const user = {
name: 'my-user',
password: 'some-password',
};
const context = {
name: 'my-context',
user: user.name,
cluster: cluster.name,
};
const kc = new k8s.KubeConfig();
kc.loadFromOptions({
clusters: [cluster],
users: [user],
contexts: [context],
currentContext: context.name,
});
const k8sApi = kc.makeApiClient(k8s.Core_v1Api);
...
Additional Examples
There are several more examples in the examples directory.
Development
All dependencies of this project are expressed in its
package.json
file. Before you start developing, ensure
that you have NPM installed, then run:
npm install
(re) Generating code
cd ../
git clone https://github.com/kubernetes-client/gen
cd javascript
../gen/openapi/typescript.sh src settings
Formatting
Run npm run format
or install an editor plugin like https://github.com/prettier/prettier-vscode.
Linting
Run npm run lint
or install an editor plugin like https://github.com/Microsoft/vscode-typescript-tslint-plugin
Testing
Tests are written using the Chai library. See
config_test.ts
for an example.
To run tests, execute the following:
npm test
Contributing
Please see CONTRIBUTING.md for instructions on how to contribute.