/node-k8s-client

kubernetes client of node.js

Primary LanguageTypeScriptMIT LicenseMIT

Nodejs Kubernetes client

Node.js client library for Google's Kubernetes Kubectl And API

build

    git clone https://github.com/Goyoo/node-k8s-client.git
    npm install
    npm run build

#test for test please install minikube

    
    mocha test

Install:

    npm install k8s

Usage

Create client

var K8s = require('k8s')

// use kubectl

var kubectl = K8s.kubectl({
    endpoint:  'http://192.168.10.10:8080'
    , namespace: 'namespace'
    , binary: '/usr/local/bin/kubectl'
})

//use restful api
var kubeapi = K8s.api({
	endpoint: 'http://192.168.10.10:8080'
	, version: '/api/v1'
})

// Configure using kubeconfig
var kubeapi = K8s.api({
    kubeconfig: '/etc/cluster1.yaml'
    ,version: '/api/v1'
})

var kube = K8s.kubectl({
	binary: '/bin/kubectl'
	,kubeconfig: '/etc/cluster1.yaml'
	,version: '/api/v1'
});

Options

endpoint : URL for API

version : API Version

binary : Path to binary file

kubeconfig : Path to kubeconfig

:auth See below authentication section

:strictSSL If set to false, use of the API will not validate SSL certificate. Defualt is true.

Authentication

Authentication to REST API is done via the auth option. Currently supported authentication method types are username/password, token and client certificate. Presence of authentication details is checked in this order so if a token is specified as well as a client certificate then a token will be used.

Username/password:

{
  "auth": {
    "username": "admin",
    "password": "123123"
  }
}

Token:

{
  "auth": {
    "token": "hcc927ndkcka12"
  }
}

Client certificate:

{
  "auth": {
    "clientKey": fs.readFileSync('k8s-client-key.pem'),
    "clientCert": fs.readFileSync('k8s-client-cert.pem'),
    "caCert": fs.readFileSync('k8s-ca-crt.pem')
  }
}

kubeAPI

using callback

// method GET
kubeapi.get('namespaces/default/replicationcontrollers', function(err, data){})

// method POST
kubeapi.post('namespaces/default/replicationcontrollers', require('./rc/nginx-rc.json'), function(err, data){})
// method PUT
kubeapi.put('namespaces/default/replicationcontrollers/nginx', require('./rc/nginx-rc.json'), function(err, data){})
// method PATCH
kubeapi.patch('namespaces/default/replicationcontrollers/nginx', [{ op: 'replace', path: '/spec/replicas', value: 2 }], function(err, data){})
// method DELETE
kubeapi.delete('namespaces/default/replicationcontrollers/nginx', function(err, data){})

using promise

// method GET
kubeapi.get('namespaces/default/replicationcontrollers').then(function(data){}).catch(function(err){})
// method POST
kubeapi.post('namespaces/default/replicationcontrollers', require('./rc/nginx-rc.json')).then(function(data){}).catch(function(err){})
// method PUT
kubeapi.put('namespaces/default/replicationcontrollers/nginx', require('./rc/nginx-rc.json')).then(function(data){}).catch(function(err){})
// method PATCH
kubeapi.patch('namespaces/default/replicationcontrollers/nginx', [{ op: 'replace', path: '/spec/replicas', value: 2 }]).then(function(data){}).catch(function(err){})
// method DELETE
kubeapi.delete('namespaces/default/replicationcontrollers/nginx').then(function(data){}).catch(function(err){})

using async/await

!async function()
{
    try
    {
        // method GET
        const data1 = await kubeapi.get('namespaces/default/replicationcontrollers')
        // method POST
        const data2 = await kubeapi.post('namespaces/default/replicationcontrollers', require('./rc/nginx-rc.json'))
        // method PUT
        const data3 = await kubeapi.put('namespaces/default/replicationcontrollers/nginx', require('./rc/nginx-rc.json'))
        // method PATCH
        const data4 = await kubeapi.patch('namespaces/default/replicationcontrollers/nginx', [{ op: 'replace', path: '/spec/replicas', value: 2 }])
        // method DELETE
        const data5 = await kubeapi.delete('namespaces/default/replicationcontrollers/nginx')
    }
    catch(err){
        console.log(err)
    }
}()

method GET -> watch

using callback
var res = kubeapi.watch('watch/namespaces/default/pods', function(data){
	// message
}, function(err){
	// exit
}, [timeout])
using rxjs
kubeapi.watch('watch/namespaces/default/pods', [timeout]).subscribe(data=>{
    // message
}, err=>{
    // exit
})

kubectl (callback, promise, async/await)

example

    //kubectl['type']['action]([arguments], [flags], [callback]): Promise

    //callback
    kubect.pod.delete('pod_name', function(err, data){})
    kubect.pod.delete('pod_name', ['--grace-period=0'], function(err, data){})
    //promise
    kubect.pod.delete('pod_name').then()
    kubect.pod.delete('pod_name', ['--grace-period=0']).then()
    //async/await
    const data = await kubect.pod.delete('pod_name')
    const data = await kubect.pod.delete('pod_name',['--grace-period=0'])

excute command

    kubectl.command('get pod pod_name --output=json', function(err, data){})
    kubectl.command('get pod pod_name --output=json').then()
    const data = await kubectl.command('get pod pod_name --output=json')

Pods

get pod list

kubectl.pod.list(function(err, pods){})

//selector
var label = { name: nginx }
kubectl.pod.list(label, function(err, pods){})

get pod

kubectl.pod.get('nginx', function(err, pod){})

// label selector
kubectl.pod.list({ app: 'nginx' }, function(err, pods){}) 

create a pod

kubectl.pod.create('/:path/pods/nginx.yaml'), function(err, data){})

delete a pod

kubectl.pod.delete('nginx', function(err, data){})

log

kubectl.pod.log('pod_id1 pod_id2 pod_id3', function(err, log){})

ReplicationController

get rc list

kubectl.rc.list(function(err, pods){})

get a rc

kubectl.rc.get('nginx', function(err, pod){})

create a rc

kubectl.rc.create('/:path/pods/nginx.yaml'), function(err, data){})

delete a rc

kubectl.rc.delete('nginx', function(err, data){})

rolling-update by image name

kubectl.rc.rollingUpdate('nginx', 'nginx:vserion', function(err, data){})

rolling-update by file

kubectl.rc.rollingUpdateByFile('nginx', '/:path/rc/nginx-v2.yaml', function(err, data){})

change replicas

kubectl.rc.scale('nginx', 3, function(err, data){})

Service

get service list

kubectl.service.list(function(err, pods){})

get a service

kubectl.service.get('nginx', function(err, pod){})

create a service

kubectl.service.create('/:path/service/nginx.yaml'), function(err, data){})

delete a service

kubectl.service.delete('nginx', function(err, data){})

Node

get node list

kubectl.node.list(function(err, nodes){})

get a node

kubectl.node.get('node1', function(err, node){})

create a node

kubectl.node.create('/:path/nodes/node1.yaml'), function(err, node){})

delete a node

kubectl.node.delete('node1', function(err, node){})

Namespace

    kubectl.namespace['fn']

Daemonset

    kubectl.daemonset['fn']

Deployment

    kubectl.deployment['fn']

Secrets

    kubectl.secrets['fn']

endpoint

    kubectl.endpoint['fn']

ingress

    kubectl.ingress['fn']