Node.js client library for Google's Kubernetes Kubectl And API
git clone https://github.com/Goyoo/node-k8s-client.git
npm install
npm run build
mocha test
# Install:
npm install k8s
# Usage
## Create client
```js
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'
});
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 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')
}
}
// method GETkubeapi.get('namespaces/default/replicationcontrollers',function(err,data){})// method POSTkubeapi.post('namespaces/default/replicationcontrollers',require('./rc/nginx-rc.json'),function(err,data){})// method PUTkubeapi.put('namespaces/default/replicationcontrollers/nginx',require('./rc/nginx-rc.json'),function(err,data){})// method PATCHkubeapi.patch('namespaces/default/replicationcontrollers/nginx',[{op: 'replace',path: '/spec/replicas',value: 2}],function(err,data){})// method DELETEkubeapi.delete('namespaces/default/replicationcontrollers/nginx',function(err,data){})// method GETkubeapi.get('namespaces/default/replicationcontrollers').then(function(data){}).catch(function(err){})// method POSTkubeapi.post('namespaces/default/replicationcontrollers',require('./rc/nginx-rc.json')).then(function(data){}).catch(function(err){})// method PUTkubeapi.put('namespaces/default/replicationcontrollers/nginx',require('./rc/nginx-rc.json')).then(function(data){}).catch(function(err){})// method PATCHkubeapi.patch('namespaces/default/replicationcontrollers/nginx',[{op: 'replace',path: '/spec/replicas',value: 2}]).then(function(data){}).catch(function(err){})// method DELETEkubeapi.delete('namespaces/default/replicationcontrollers/nginx').then(function(data){}).catch(function(err){})!asyncfunction(){try{// method GETconstdata1=awaitkubeapi.get('namespaces/default/replicationcontrollers')// method POSTconstdata2=awaitkubeapi.post('namespaces/default/replicationcontrollers',require('./rc/nginx-rc.json'))// method PUTconstdata3=awaitkubeapi.put('namespaces/default/replicationcontrollers/nginx',require('./rc/nginx-rc.json'))// method PATCHconstdata4=awaitkubeapi.patch('namespaces/default/replicationcontrollers/nginx',[{op: 'replace',path: '/spec/replicas',value: 2}])// method DELETEconstdata5=awaitkubeapi.delete('namespaces/default/replicationcontrollers/nginx')}catch(err){console.log(err)}}()varres=kubeapi.watch('watch/namespaces/default/pods',function(data){// message},function(err){// exit},[timeout])kubeapi.watch('watch/namespaces/default/pods',[timeout]).subscribe(data=>{// message},err=>{// exit})//kubectl['type']['action]([arguments], [flags], [callback]): Promise//callbackkubect.pod.delete('pod_name',function(err,data){})kubect.pod.delete('pod_name',['--grace-period=0'],function(err,data){})//promisekubect.pod.delete('pod_name').then()kubect.pod.delete('pod_name',['--grace-period=0']).then()//async/awaitconstdata=awaitkubect.pod.delete('pod_name')constdata=awaitkubect.pod.delete('pod_name',['--grace-period=0'])kubectl.command('get pod pod_name --output=json',function(err,data){})kubectl.command('get pod pod_name --output=json').then()constdata=awaitkubectl.command('get pod pod_name --output=json')kubectl.pod.list(function(err,pods){})//selectorvarlabel={name: nginx}kubectl.pod.list(label,function(err,pods){})kubectl.pod.get('nginx',function(err,pod){})// label selectorkubectl.pod.list({app: 'nginx'},function(err,pods){})kubectl.pod.create('/:path/pods/nginx.yaml'),function(err,data){})kubectl.pod.delete('nginx',function(err,data){})kubectl.pod.log('pod_id1 pod_id2 pod_id3',function(err,log){})kubectl.rc.list(function(err,pods){})kubectl.rc.get('nginx',function(err,pod){})kubectl.rc.create('/:path/pods/nginx.yaml'),function(err,data){})kubectl.rc.delete('nginx',function(err,data){})kubectl.rc.rollingUpdate('nginx','nginx:vserion',function(err,data){})kubectl.rc.rollingUpdateByFile('nginx','/:path/rc/nginx-v2.yaml',function(err,data){})kubectl.rc.scale('nginx',3,function(err,data){})kubectl.service.list(function(err,pods){})kubectl.service.get('nginx',function(err,pod){})kubectl.service.create('/:path/service/nginx.yaml'),function(err,data){})kubectl.service.delete('nginx',function(err,data){})kubectl.node.list(function(err,nodes){})kubectl.node.get('node1',function(err,node){})kubectl.node.create('/:path/nodes/node1.yaml'),function(err,node){})kubectl.node.delete('node1',function(err,node){})kubectl.namespace['fn']kubectl.daemonset['fn']kubectl.deployment['fn']kubectl.secrets['fn']kubectl.endpoint['fn']kubectl.ingress['fn']////////////--bye--