jkcfg / kubernetes

Apache License 2.0
26 stars 6 forks source link

helm plugin #55

Open dlespiau opened 4 years ago

dlespiau commented 4 years ago

This PR works on top of https://github.com/jkcfg/jk/pull/288 and provides a way for jk to render helm charts and import the result as js objects.

TODO:

Example:

import * as std from '@jkcfg/std';
import * as helm from '@jkcfg/kubernetes/helm';

const memcached = new helm.Chart('helm/memcached');

memcached.render({
    name: 'myrelease',
    namespace: 'myns',
  }, {
    memcached: {
      maxItemMemory: 1024,
    },
  }).then(chart => std.write(chart.objects(), '', { format: std.Format.YAMLStream }));
$ helm pull stable/memcached --untar --untardir helm
$ jk run helm.js
apiVersion: v1
kind: Service
metadata:
  annotations: {}
  labels:
    app: myrelease-memcached
    chart: memcached-3.2.0
    heritage: Helm
    release: myrelease
  name: myrelease-memcached
  namespace: myns
spec:
  clusterIP: None
  ports:
  - name: memcache
    port: 11211
    targetPort: memcache
  selector:
    app: myrelease-memcached
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: myrelease-memcached
    chart: memcached-3.2.0
    heritage: Helm
    release: myrelease
  name: myrelease-memcached
  namespace: myns
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myrelease-memcached
      release: myrelease
  serviceName: myrelease-memcached
  template:
    metadata:
      labels:
        app: myrelease-memcached
        chart: memcached-3.2.0
        heritage: Helm
        release: myrelease
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchLabels:
                app: myrelease-memcached
                release: myrelease
            topologyKey: kubernetes.io/hostname
      containers:
      - command:
        - memcached
        - -m 1024
        - -o
        - modern
        - -v
        image: memcached:1.5.19-alpine
        imagePullPolicy: ""
        livenessProbe:
          initialDelaySeconds: 30
          tcpSocket:
            port: memcache
          timeoutSeconds: 5
        name: myrelease-memcached
        ports:
        - containerPort: 11211
          name: memcache
        readinessProbe:
          initialDelaySeconds: 5
          tcpSocket:
            port: memcache
          timeoutSeconds: 1
        resources:
          requests:
            cpu: 50m
            memory: 64Mi
        securityContext:
          runAsUser: 1001
      securityContext:
        fsGroup: 1001
  updateStrategy:
    type: RollingUpdate