@mittwald/kubernetes

Kubernetes client library

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
@mittwald/kubernetes
3.7.02 months ago6 years agoMinified + gzip package size for @mittwald/kubernetes in KB

Readme

Kubernetes client for Node.JS
npm version Build Status

Contents

- Setup - General usage - Rate-limiting API access - Watching resources - Accessing CRDs

Installation

You can install this package via NPM:
$ npm install @mittwald/kubernetes

Usage

Setup

External configuration using a kubeconfig file:
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):
import {
  InClusterConfig,
  KubernetesRESTClient,
  KubernetesAPI,
} from "@mittwald/kubernetes";

const config = new InClusterConfig();
const client = new KubernetesRESTClient(config);
const api = new KubernetesAPI(client);

General usage

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

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

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 package as an example), you can use the extend method to add the respective API client:
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
- x pods - x configMaps - x endpoints - x namespaces - x nodes - x persistentVolumes - x persistentVolumeClaims - x services - x secrets - x serviceAccounts
  • apps/v1
- x daemonSets - x deployments - x replicaSets - x statefulSets
  • apps/v1beta1
- x deployments - x statefulSets
  • batch/v1
- x jobs
  • batch/v1beta1
- x cronJobs
  • extensions/v1beta1
- x daemonSets - x ingresses - x networkPolicies - x replicaSets
  • rbac/v1
- x clusterRoles - x clusterRoleBindings - x roles - x roleBindings
  • autoscaling/v1
- x horizontalPodAutoscalers
  • apiextensions.k8s.io/v1beta1
- x customResourceDefinitions
  • admissionRegistration.k8s.io/v1
- x validatingWebhookConfigurations - mutatingWebhookConfigurations

References

  • https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/
  • https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md