@mittwald/kubernetes
Version:
Kubernetes client library
146 lines (114 loc) • 3.69 kB
Markdown
# Kubernetes client for Node.JS
[](https://www.npmjs.com/package/@mittwald/kubernetes)
[](https://travis-ci.org/mittwald/node-kubernetes)
## Contents
- [Installation](#installation)
- [Usage](#usage)
- [Setup](#setup)
- [General usage](#general-usage)
- [Rate-limiting API access](#rate-limiting-api-access)
- [Watching resources](#watching-resources)
- [Accessing CRDs](#accessing-crds)
- [Supported resources](#supported-resources)
- [References](#references)
## Installation
You can install this package via NPM:
$ npm install @mittwald/kubernetes
## Usage
### Setup
External configuration using a `kubeconfig` file:
```typescript
import {FileBasedConfig, KubernetesRESTClient, KubernetesAPI} from "@mittwald/kubernetes";
const config = new FileBasedConfig("/home/mhelmich/.kube/config");
const client = new KubernetesRESTClient(config);
const api = new KubernetesAPI(client);
```
Internal configuration (when the client is running within a Kubernetes cluster):
```typescript
import {InClusterConfig, KubernetesRESTClient, KubernetesAPI} from "@mittwald/kubernetes";
const config = new InClusterConfig();
const client = new KubernetesRESTClient(config);
const api = new KubernetesAPI(client);
```
### General usage
```typescript
api.core().v1().pods.namespace("default").list().then(pods => {
console.log("Found " + pods.length + " Pods:");
pods.forEach(pod => {
console.log(pod.metadata.name);
});
});
```
### Rate-limiting API access
```typescript
import {
InClusterConfig,
KubernetesRESTClient,
RatelimitingKubernetesRESTClient,
KubernetesAPI,
} from "@mittwald/kubernetes";
const config = new InClusterConfig();
const client = new KubernetesRESTClient(config);
const limitedClient = new RatelimitingKubernetesRESTClient(client);
const api = new KubernetesAPI(limitedClient);
```
### Watching resources
```typescript
api.core().v1().pods.namespace("default").watch({"some-label": "foo"}, ev => {
console.log(`Pod: ${ev.type}: ${ev.object}`);
});
```
### Accessing CRDs
If you have a package that offers a client for _Custom Resource Definitions_
(take a look at the [@mittwald/kubernetes-rook](https://github.com/mittwald/node-kubernetes-rook)
package as an example), you can use the `extend` method to add the respective
API client:
```typescript
import {RookCustomResourceAPI} from "@mittwald/kubernetes-rook";
// ...
let extendedAPI = api.extend("rook", new RookCustomResourceAPI(client));
```
## Supported resources
This library supports a reasonable subset of Kubernetes resources
(these were implemented on an as-needed basis). Feel free to open a
new issue or pull request to add support for additional API objects.
- core/v1
- pods
- configMaps
- endpoints
- namespaces
- nodes
- persistentVolumes
- persistentVolumeClaims
- services
- secrets
- serviceAccounts
- apps/v1
- daemonSets
- deployments
- replicaSets
- statefulSets
- apps/v1beta1
- deployments
- statefulSets
- batch/v1
- jobs
- batch/v1beta1
- cronJobs
- extensions/v1beta1
- daemonSets
- ingresses
- networkPolicies
- replicaSets
- rbac/v1
- clusterRoles
- clusterRoleBindings
- roles
- roleBindings
- autoscaling/v1
- horizontalPodAutoscalers
- apiextensions.k8s.io/v1beta1
- customResourceDefinitions
## References
- https://kubernetes.io/docs/api-reference/v1.9
- https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md