Comments

Хорошая статья, спасибо. Приятно видеть что тема операторов стремительно набирает обороты — скоро будет k8s-оркестрация всего и вся, а не только контейнеров.


Немного отсутствует момент, где вызывается handle(specs) — чтоб понять как и что туда передаётся, и как он реагирует на изменения этих specs.


А если вам потребуется писать более сложные операторы, не обрастая при этом инфраструкторной логикой, а только лишь логикой предметной области, то рекомендую взглянуть на Kopf: https://github.com/zalando-incubator/kopf/ (документация: https://kopf.readthedocs.io/)


Мы тоже начинали с примерно того кода, который в статье. Но потом оно обрастало деталями, многими деталями, очень многими деталями, расползлось по паре-другой репозиториев, и в конце-концов вылилось во фреймворк.


Код задачи из примера выглядел бы как-то так:


import kopf
import kubernetes

rules = {}

@kopf.on.resume('flant.com', 'v1', 'copyrators')
@kopf.on.create('flant.com', 'v1', 'copyrators')
@kopf.on.update('flant.com', 'v1', 'copyrators')
def new_rule(name, spec, **kwargs):
    rules[name] = spec
    for namespace in _get_all_namespaces():
        _ensure(namespace, spec)

@kopf.on.delete('flant.com', 'v1', 'copyrators')
def no_more_rule(name, spec, **kwargs):
    for namespace in _get_all_namespaces():
        _purge(namespace, spec)
    if name in rules:
        del rules[name]

@kopf.on.resume('', 'v1', 'namespaces')
@kopf.on.create('', 'v1', 'namespaces')
def ns_in_sight(name, **kwargs):
    for rule in rules:
        _ensure(name, rule)

def _ensure(namespace, rule_spec):
    pass  # создаём secrets/configmaps

def _purge(namespace, rule_spec):
    pass  # удаляем secrets/configmaps

def _get_all_namespaces():
    api = kubernetes.client.CoreV1Api()
    return [ns.metadata.name for ns in api.list_namespace()]

Не уверен, что я уловил всю логику, конечно. И не тестировал, конечно. Но примерно так выглядел бы оператор, который и на rules, и на namespaces реагирует.


Фреймворк, конечно, пока в версии 0.x. Но уже почти устаканился.

Спасибо за отзыв! Приятно видеть, что ещё кого-то волнует тема.
Смотрим иногда на kopf. Кажется перспективным, да и код выглядит красиво. Все никак руки не дойдут попробовать :)


Более серьёзные операторы сейчас, все же, стараемся писать на Go.

Only those users with full accounts are able to leave comments. Log in, please.