knop
v0.2.0
Published
Kubernetes operators made easy
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 devDevelopment
Scripts
npm run dev: start operator locally (uses~/.kube/configfor 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 Elasticsearchapi-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 Elasticsearchapi-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/*.yamlOperator 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) |
