kopf

A Python framework to write Kubernetes operators in just a few lines of code

MIT License

Downloads
400.1K
Stars
2K
Committers
53

Bot releases are hidden (Show)

kopf - 0.11

Published by nolar about 4 years ago

Originally released on 2019-05-17 12:06:39+00:00 (link).

Breaking change:

  • Legacy KopfPeering (cluster-scoped) is now ClusterKopfPeering.
  • Current KopfPeering is made namespaced.
  • Code is updated to support the previous cluster config smoothly (until 1.0).
  • CRD re-creation is recommended (see docs for peering).

Other changes:

  • Tests, tests, tests for the existing codebase.
  • RBAC docs fixed for the real demo examples.
  • Watching-streaming logic refactored for testability, but keeps the functionality.
  • metadata.generation does not trigger the update handlers in Minikube anymore.
kopf - 0.12

Published by nolar about 4 years ago

Originally released on 2019-05-28 09:06:00+00:00 (link).

New features:

  • Basic tools for testing of the Kopf-based operators (background operator runner).
  • namespace, name, uid kwargs for the handlers (were mentioned in the docs, absent in the code).

Other changes:

  • Tests, tests, tests for the existing codebase (asyncio queueing).
  • End-to-end tests with Minikube with real Kubernetes versions.
  • Some little fixes detected during test writing.
  • Contribution docs.
kopf - 0.13

Published by nolar about 4 years ago

Originally released on 2019-05-28 14:42:06+00:00 (link).

Bugs fixed:

  • Events are posted using v1 instead of v1beta1 API, making it compatible with Google Kubernetes Engine >=1.12. #81

Other changes:

  • Internal refactoring on the module imports & Kubernetes client calls. #78 #71
kopf - 0.14

Published by nolar about 4 years ago

Originally released on 2019-05-31 14:44:45+00:00 (link).

Bugfixes:

  • K8s events are now optional, if posting fails, the operator continues. #88
  • K8s events' messages are now cut to 1024 chars to prevent failures. #88

Other changes:

  • Internal refactoring of the @kopf.on.field() handler. #69
  • Internal refactoring of the cause detection & event handling. #82
kopf - 0.15

Published by nolar about 4 years ago

Originally released on 2019-06-13 16:14:01+00:00 (link).

New features:

  • Silent spy-handlers @kopf.on.event (currently only for custom resources). #86
  • Labels can now be added recursively (e.g. to pod templates within jobs/deployments). #108

Improvements:

  • Diffs are logged on update events. #104
  • Handling is skipped if there are no handlers for the event/cause (and produces no fake logs/statuses). #103

Internal changes:

  • Maintenance docs, RBAC fixes in the docs, typos fixed. #83 #89 #102
  • Few more tests. #90 #91

The release is done as a rollback point from 0.16 if the resume-handlers introduce breaking changes (they shouldn't).

kopf - 0.16

Published by nolar about 4 years ago

Originally released on 2019-06-14 09:18:57+00:00 (link).

New features:

  • Resource "resuming" handlers @kopf.on.resume for threads/tasks. #105

Internal changes:

  • Tests and docs for RBAC status codes for peering. #95
  • Handlers are de-duplicated if registered twice and both do match the event/cause. #105
  • The initial listing of objects is done separately from watching the objects, and is fed into the reactor differently (not event['type']=="ADDED", but event['type']==None). The watching continues from the resource-version of the list, as it must be by design. #105
kopf - 0.17

Published by nolar about 4 years ago

Originally released on 2019-07-03 08:23:43+00:00 (link).

Improvements:

  • Performance improvements when handling hundreds of resources. #109

Internal changes:

  • Internal (non-public) packages restructured — to deal with the growing complexity. #124
    • kopf.engines extracted from kopf.reactor (peering & posting & logging).
    • kopf.utilities extracted from kopf.reactor (reacting to k8s changes).
    • kopf.clients is the new kopf.k8s (renamed).
    • kopf.clients.auth extracted from kopf.config (only auth-related routines).
    • kopf.config got the configuration constants from all over the code.
  • New configuration added:
    • Configurable timeouts and thread pool sizes.
    • Configurable level of k8s-events posted; others are skipped.
  • Everything has been made asynchronous:
    • All internal K8s API wrappers/adapters are made async.
    • All blocking operations (incl. API requests) moved to thread pools.
    • All k8s-event posting is done via a queue with a background posting task. #125
kopf - 0.18

Published by nolar about 4 years ago

Originally released on 2019-07-08 12:42:48+00:00 (link).

Improvements:

  • Finalizer is not added if there are no deletion handlers. #118
  • Deletion handlers can be optional to prevent adding finalizer. #118
  • Script's dir is added to import paths to mimic Python's behaviour. #93 #133
  • .status is ignored in the last-handled state checks (except for fields used in field-handlers). #131
  • .metadata is ignored in the last-handled state checks (except for labels & annotations). #131
  • Operator freezes if the same-priority operator appears (previously, only warned). #114

Bugfixes:

  • The peering self-record was not properly removed on exit. #114
  • Restrict to kubernetes<10.0.0 to keep Kopf runnable at all. #134

Internal changes:

  • Examples can now have their own dedicated tests. #126
kopf - 0.17.post1

Published by nolar about 4 years ago

Originally released on 2019-07-04 12:45:51+00:00 (link).

Hotfix:

  • Restrict to kubernetes<10.0.0 to keep Kopf runnable at all.

See: #134 and kubernetes-client/python#866

kopf - 0.19rc1

Published by nolar about 4 years ago

Originally released on 2019-07-09 13:11:00+00:00 (link).

Improvements:

  • Built-in resources (pods, namespaces) are now also supported. #110
  • Handlers' INFO+ log messages are sent as Kubernetes events implicitly. #128

Internal changes:

  • Switched the internal client from the official kubernetes-python top pykube-ng. #110
  • Code coverage is measured. #72
kopf - 0.19rc2

Published by nolar about 4 years ago

Originally released on 2019-07-12 11:30:47+00:00 (link).

Bugfixes:

  • Operators die with socket timeout in 10s after starting. #144
kopf - 0.19

Published by nolar about 4 years ago

Originally released on 2019-07-16 10:09:39+00:00 (link).

New features:

  • Built-in resources (pods, services, namespaces) are now supported. #110
  • Per-object messages logged via logger kwarg (INFO+ level) are sent as Kubernetes events implicitly. #128 #148

Improvements:

  • Almost proper operator termination on SIGINT/SIGTERM. #147 #151
    • Note: blocking socket reads are not yet fixed and can freeze on exit.

Internal changes:

  • Internal K8s API client is switched from the official kubernetes-python top pykube-ng. #110
  • Code coverage is measured. #72 #146
  • E2E tests are stabilized. #149
kopf - 0.20

Published by nolar about 4 years ago

Originally released on 2019-07-24 09:25:51+00:00 (link).

New feature:

  • Decorator-level filtering of the objects by labels/annotations existence or values. #123
kopf - 0.21rc1

Published by nolar about 4 years ago

Originally released on 2019-08-07 17:45:34+00:00 (link).

New features:

Improvements:

  • Terminate the operator better, with graceful period for clean shutdown. #156
  • K8s-events for cluster-scoped objects are posted to the current namespace, not "default". #165
  • Kopf's handler errors renamed to kopf.PermanentError/kopf.TemporaryError. #159
  • Kopf's permanent/temporary errors do not dump strack-traces anymore. #159

Internal changes:

  • CodeCov PR comments disabled (to prevent spamming). #170
  • Some modules were moved around and split. #155
kopf - 0.21rc2

Published by nolar about 4 years ago

Originally released on 2019-08-08 13:23:01+00:00 (link).

Improvements:

  • Wake up immediately on new changes of the object if currently sleeping for delayed handlers. #162
  • Speed up the deletion (finalizer removal) of the objects with failed creation/update handlers. #162

Bugfixes:

  • Fixed failing with 404 if object was removed too fast or within the handler. #160
  • Fixed implicitly forced peering mode for embeddable operator. #174
kopf - 0.21rc3

Published by nolar about 4 years ago

Originally released on 2019-08-08 14:54:13+00:00 (link).

Improvements:

  • kopf --version added. #175

Bugfixes:

  • Do not add a finalizer to objects excluded by labels/annotations filters. #173
  • Ensure eventual consistency for all handlers even with intermediate object changes. #163
kopf - 0.21rc4

Published by nolar about 4 years ago

Originally released on 2019-08-12 07:38:22+00:00 (link).

Improvements:

  • More logs on reasons of exiting/termination. #179
kopf - 0.21rc5

Published by nolar about 4 years ago

Originally released on 2019-08-14 17:35:01+00:00 (link).

Reverted:

  • Removed "Ensure eventual consistency for all handlers" feature of 0.21rc3. #182 #163
kopf - 0.21

Published by nolar about 4 years ago

Originally released on 2019-09-13 11:01:50+00:00 (link).

New features:

Improvements:

  • kopf --version added. #175
  • More logs on reasons of exiting/termination. #179
  • Wake up immediately on new changes of the object if currently sleeping for delayed handlers. #162
  • Speed up the deletion (finalizer removal) of the objects with failed creation/update handlers. #162
  • Terminate the operator better, with graceful period for clean shutdown. #156
  • K8s-events for cluster-scoped objects are posted to the current namespace, not "default". #165
  • Kopf's handler errors renamed to kopf.PermanentError/kopf.TemporaryError. #159
  • Kopf's permanent/temporary errors (and these only) will not dump strack-traces anymore. #159

Bugfixes:

  • Do not add a finalizer to objects excluded by labels/annotations filters. #173
  • Fixed failing with 404 if object was removed too fast or within the handler. #160
  • Fixed implicitly forced peering mode for embeddable operator. #174

Internal changes:

  • CodeCov PR comments disabled (to prevent spamming). #170
  • Some modules were moved around and split. #155
kopf - 0.22rc1

Published by nolar about 4 years ago

Originally released on 2019-09-26 10:56:43+00:00 (link).

Bugfixes:

  • Implicit logging events obey the configured level. #192 #188
  • Field-change detects sub-fields of change dict-containers. #191 #190

Internal changes:

  • Diffs are turned from tuples to classes, diff ops — from strings to enums. #191