knop
v0.2.0
Published
Kubernetes operators made easy
Downloads
6
Readme
Knop, Kubernetes Nodejs OPerators made easy
Getting started
# install cli
npm install -g knop-cli
# or using knop-cli with npx
npx -p knop-cli knop
# create an operator projet into my-operator directory (package name)
npx -p knop-cli knop new operator --name MyOperator
# add a controlled crd (api)
npx -p knop-cli knop new api --api-version svc.docaposte.cloud/v1alpha1 --kind Elasticsearch
# add the corresponding crd controller (api)
npx -p knop-cli knop new crd-controller --api-version svc.docaposte.cloud/v1alpha1 --kind Elasticsearch
# run operator in dev mode
npm run dev
Development
Scripts
npm run dev
: start operator locally (uses~/.kube/config
for connecting to cluster)npm run dk:build
: Build docker operator imagenpm run clean
: remove artifacts (coverage, tmp, compiled files)npm run test
: run tests (jest)npm run test:watch
: run tests with watchingnpm run lint
: check code with eslintnpm run build
: build (compile) operator sources filesnpm run build:watch
: build with watching
Generators
Operator
Generate a new node project for an operator
knop new operator --name "MyOperator"
only name is required.
|parameter|value| |-|-| |name| Humanized operator name, (underscore + dash for package name)| |orgName | Humanized Organization name | |org| npm organization| | repo | git repository | |dockerRepo | docker repository|
Api (CRD)
Generate a new CRD (yaml files & types)
knop new api --api-version svc.docaposte.cloud/v1alpha1 --kind Elasticsearch
api-version & kind are required
|parameter|value| |-|-| |api-version| kubernetes api version with group (ex svc.docaposte.cloud/v1alpha1) | |kind | kubernetes kind |
CRD Controller
Generate a new CRD Controller, handle CR create/update/delete with deduplication (dosent fire if CR doesn't change)
knop new crd-controller --api-version svc.docaposte.cloud/v1alpha1 --kind Elasticsearch
api-version & kind are required (refers to managed CRD)
|parameter|value| |-|-| |api-version| kubernetes api version with group (ex svc.docaposte.cloud/v1alpha1) | |kind | kubernetes kind |
Deployment
# In a generated application (with at least an API)
# Register CRDs first
kubectl apply -f ./deploy/crds/*_crd.yaml
# Deploy operator (need docker image)
kubectl apply -f ./deploy/*.yaml
Operator runtime Env options
| Variable | Default | Info |
|-------------------|---------------|--------------------------------------------------------------------------------------|
| NODE_ENV
| null | |
| LOGGER_LEVEL
| info
| see pino level |
| LAST_CONFIG_ANNOTATION
| knop.skimia.org/last-applied-configuration
| annotation used in resource for storing changes |
| WATCH_NAMESPACE
| null | When deployed it take the namespace of pod |
| REGISTER_CRD
| 0
| Unused now, create CRD in kubernetes at startup (update if exists) |