node-kubernetes-client

Kubernetes client of Node.js


Keywords
kubernetes, k8s, docker
License
MIT
Install
npm install node-kubernetes-client@0.3.2

Documentation

Google Kubernetes client

Node.js client library for Google's Kubernetes API (https://github.com/GoogleCloudPlatform/kubernetes) You can use this library to call a Kubernetes API hosted in a Kubernetes master node using Node.js.

Install:

npm install node-kubernetes-client

Current endpoint support includes:

  • events
  • endpoints
  • namespaces
  • pods
  • minions
  • services
  • replicationControllers
  • nodes
  • proxyMinions
  • proxyNodes
  • proxyPods
  • proxyServices
  • watchPods

Interaction is accomplished via client.<endpoint>.<method>. (see examples below)

Usage

Create client

Authentication can be done via either token or login. If, however, the token expires, the login info will be used to acquire a new token.

var Client = require('node-kubernetes-client');

var client = new Client({
    host:  'xx.xx.xx.xx',
    protocol: 'https',
    version: 'v1beta2',
    token: 'XYZ'
});

Optional params:

Some optional params also exist on initialising the client.

{
    namespace:  'someNamespace', // filter all client requests by a namespace - default is no namespace
    timeout: 20000 // A timeout (in ms) for requests to k8 apis
    reqOptions: {} // array of options used to override the npm request module for this client proxy, auth, etc.
}

Getting from pods

Paging is accomplished automatically. For example, a request for pods will return all pods, not just those returned on the first page.

For example, to get all pods:

client.pods.get(function (err, pods) {
    console.log('pods:', pods);
});

Retrieving from Custom Collections

Retrieving from custom k8 collections is enabled by using the createCollection functionality.

For example, to create a custom collection called "routes":

var schema = null, //optional param
innerCollections = null, // optional param
options = { apiPrefix : 'api2' }; // optionally set a per-collection api prefix
client.routes = client.createCollection('routes', schema, innerCollections, options);
// then use the routes collection like any other

createCollection options

apiPrefix: "apis" // Sets the prefix to the api path for the new collection.
namespaced: true // Controls if paths include "/namespaces/${namespace}".

Custom Collection for k8s deployments

client = new Client({
  host:  'xx.xx.xx.xx',
  protocol: 'https',
  version: 'extensions/v1beta1',
  token: 'XYZ',
  namespace:  'mynamespace',
  reqOptions: {proxy: configLocation.proxy || null},
  timeout: 20000 
});
// add deployments to the api
client.deployments = client.createCollection('deployments', null, null, { apiPrefix : 'apis' });

var deploymentJSON = {
          "apiVersion": "extensions/v1beta1",
          "kind": "Deployment",
          ...
          }

// then use the deployments collection like any other
client.deployments.get(deploymentJSON.metadata.name, function (err, data) {
  if (err && err.statusCode != 404) {
    //something is wrong, bail
    console.log("error checking for deployment:", err);
    return;
  } else if (err && err.statusCode == 404) {
    //create if not found
    client.deployments.create(deploymentJSON, function (err, data) {
      if (err) {
        console.log("error updating deployment:", err);
        return;
      } else {
        console.log("deployment created:", deploymentJSON.metadata.name);
        return;
      }
    });
  } else {
    //update since it did not exist
    client.deployments.update(deploymentJSON.metadata.name, deploymentJSON, function (err, data) {
      if (err) {
        console.log("error updating deployment:", err);
        return;
      }
      console.log("deployment updated:", deploymentJSON.metadata.name);
      return;
    }); 
  }
});

How to run the test cases

install mocha

  npm install mocha

run testcase

  minikube start
  kubectl proxy
  mocha test/test-*

The results will be output to test/results/ directory with formatted JSON.

Roadmap

See issues.

Others

You may interested in kubernetes client library using other programming languanges, please check the below link (https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/client-libraries.md)