Monedula
Teksty i open source

Ta strona została przetłumaczona maszynowo z języka angielskiego. Przeczytaj oryginał

monedula-gitops v0.1.0, AGPL-3.0

GitOps dla Apache Kafki

Opisz tematy, dostęp, limity, schematy, użytkowników SCRAM i Confluent RBAC jako YAML w Gicie. monedula-gitops porównuje ten opis z działającym klastrem, stosuje tylko to, co się zmieniło, i kończy zadanie CI błędem, gdy w klastrze pojawi się dryf. Te same manifesty działają z CLI i z operatora Kubernetesa.

brew install monedula-dev/tap/monedula-gitops
manifests/orders.yaml
apiVersion: gitops.monedula.dev/v1alpha1
kind: KafkaTopic
metadata:
  name: orders
spec:
  clusterRef: { name: prod }
  topicName: orders
  partitions: 6
  config:
    retention.ms: "604800000"
  access:
    producers:
      - principal: User:svc-checkout
    consumers:
      - principal: User:svc-fraud
        group: fraud-orders
terminal
monedula-gitops diff -f ./manifests --cluster-config-file ./cluster.yaml# preview: the topic, plus the ACLs its access block compiles tomonedula-gitops apply -f ./manifests --cluster-config-file ./cluster.yamlmonedula-gitops verify -f ./manifests --cluster-config-file ./cluster.yaml# exit 0: no drift. exit 1: drift, and the CI job fails.
6
rodzajów zasobów, od tematów po powiązania ról Confluent RBAC
8
obrazów brokera testowanych w CI: Apache Kafka od 3.9 do 4.3, Confluent Platform od 7.6 do 8.3
25
gotowych do uruchomienia scenariuszy w repozytorium, każdy sprawdzony od początku do końca

Problem

Konfiguracja Kafki rzadko znajduje się w jednym miejscu.

Tematy pochodzą z jednego skryptu, ACL z drugiego, schematy z pipeline'ów aplikacji, limity od administratora, a powiązania ról Confluent RBAC z jeszcze innego narzędzia. Z czasem system opisuje już tylko działający klaster, a tego opisu nikt nie przejrzał.

Jak to działa

  1. 01 import cluster

    Zaimportuj

    Zamień działający klaster w manifesty.

  2. 02 YAML + pull request

    Zadeklaruj

    Tematy, dostęp, limity, schematy, użytkownicy SCRAM i powiązania ról jako YAML w stylu Kubernetesa.

  3. 03 diff

    Porównaj

    diff i apply --dry-run najpierw pokazują plan wobec działającego klastra.

  4. 04 apply

    Zastosuj

    Uruchamiane są tylko potrzebne operacje. Usuwanie nadmiarowych zasobów (prune) i ryzykowne zmiany czekają na jawne flagi.

  5. 05 verify

    Zweryfikuj

    verify kończy się kodem 1 przy dryfie, więc zaplanowane zadanie CI wyłapuje zmiany wprowadzone z pominięciem Gita.

  1. Repozytorium Git manifests/*.yaml, przeglądane w pull requestach
  2. CLI w CI validate, diff, apply, verify
    Operator w Kubernetesie CRD, webhooki admission, pętla uzgadniania
  3. Kafka tematy, ACL, limity, użytkownicy SCRAM
    Schema Registry i MDS schematy, powiązania ról Confluent RBAC
Manifesty w Gicie sterują CLI w CI i operatorem w Kubernetesie, które zmieniają Kafkę, Schema Registry i MDS.

Temat i dostęp do niego w jednym manifeście

Większość narzędzi do Kafki trzyma temat w jednym miejscu, a dostęp do niego w innym. monedula-gitops dołącza dostęp do samego tematu: wypisz producentów i konsumentów, a odpowiadające im ACL tematu i grupy konsumentów zostaną wygenerowane. Na klastrach z RBAC ten sam blok może kompilować się do powiązań ról Confluent MDS.

Gdy potrzebujesz wzorców z prefiksem, współdzielonych grup konsumentów lub ograniczeń hostów, masz do dyspozycji osobne zasoby KafkaAccessPolicy i KafkaRoleBinding.

Strimzi
KafkaTopic + KafkaUser
Confluent for Kubernetes
temat + osobne zasoby powiązań ról
Jikkou
temat + osobne zasoby principali
Terraform
jeden zasób na każdy ACL
monedula-gitops
jeden KafkaTopic z blokiem access

Zaimportuj istniejący klaster

import cluster odczytuje tematy, ACL, limity, schematy oraz, tam, gdzie jest to obsługiwane, powiązania ról RBAC i zapisuje je jako manifesty. Ich weryfikacja wobec tego samego klastra nie zgłasza dryfu.

Jak zaimportować klaster (po angielsku)

terminal
monedula-gitops import cluster --cluster-config-file ./clusters/prod.yaml --output-dir ./imported
monedula-gitops verify -f ./imported -R --cluster-config-file ./clusters/prod.yaml   # exits 0: no drift

Użytkownicy SCRAM i powiązania ról Confluent RBAC

KafkaUser deklaruje poświadczenie SCRAM, więc temat, dostęp do niego i principal, który z niego korzysta, są opisane razem w Gicie. CLI odczytuje hasło ze zmiennej środowiskowej lub z pliku; operator odczytuje je z obiektu Secret w Kubernetesie albo je generuje.

KafkaRoleBinding zarządza powiązaniami ról Confluent MDS obok ACL.

manifests/svc-checkout.yaml
apiVersion: gitops.monedula.dev/v1alpha1
kind: KafkaUser
metadata:
  name: svc-checkout
spec:
  clusterRef: { name: prod }
  password:
    valueFrom: { env: SVC_CHECKOUT_PASSWORD }

Nic nie znika przez przypadek

--dry-run pokazuje podgląd każdej zmiany. CLI nigdy nie usuwa tematu, użytkownika SCRAM ani limitu, który usuniesz z Gita. --prune usuwa tylko ACL i powiązania ról mieszczące się w uprawnieniu, które twoje manifesty wciąż deklarują, a ryzykowne zmiany, takie jak zwiększenie liczby partycji, obniżenie poziomu zgodności schematu czy usunięcie wartości limitu, czekają na --allow-destructive. W Kubernetesie polityka usuwania tematu decyduje, czy usunięcie zasobu usuwa też temat, a Delete wymaga dodatkowo adnotacji allow-delete.

Zabezpieczenia (po angielsku)

Kody wyjścia
0Sukces albo brak dryfu dla verify
1Wykryto dryf (verify)
2Błąd walidacji, konfiguracji lub połączenia albo nieudana operacja
3Zostały tylko operacje wymagające zgody: czekają na --allow-destructive

Instalacja

Homebrew
brew install monedula-dev/tap/monedula-gitops
Go
go install github.com/monedula-dev/monedula-gitops/cmd/monedula-gitops@latest
Docker
docker run --rm ghcr.io/monedula-dev/monedula-gitops:latest --help
Helm (operator)
helm install monedula-gitops oci://ghcr.io/monedula-dev/charts/monedula-gitops

Gotowe binaria dla Linuksa i macOS są na stronie wydań. Dalej: pierwsze kroki z CLI (po angielsku).

Pytania

Czy monedula-gitops jest darmowy i czy mogę go używać w pracy?
Tak. Jest na licencji AGPL-3.0, bez płatnej edycji, a używanie go na własnych klastrach, jako CLI albo jako operatora we własnej infrastrukturze, nie zobowiązuje cię do udostępnienia twojego kodu ani manifestów: obowiązki wynikające z AGPL powstają, gdy go rozpowszechniasz, zmodyfikowanego lub nie, albo gdy pozwalasz innym korzystać przez sieć ze zmodyfikowanej wersji. W sprawie licencji komercyjnej skontaktuj się z nami.
Czy działa z Confluent Platform i Confluent Cloud?
Apache Kafka i Confluent Platform są w pełni wspierane, w tym Schema Registry oraz, w Confluent Platform, powiązania ról MDS. Confluent Cloud jest zweryfikowany dla tematów, ACL, schematów i importu; Cloud nie udostępnia API limitów ani SCRAM. Przetestowane wersje podaje strona obsługiwane platformy (po angielsku).
Czym różni się od Jikkou?
Oba narzędzia zarządzają Kafką jako kodem. monedula-gitops deklaruje dostęp przy samym temacie, działa zarówno jako CLI, jak i jako operator Kubernetesa, który w sposób ciągły uzgadnia stan, i zarządza powiązaniami ról Confluent Platform przez MDS. Jikkou działa jako CLI lub serwer API i obejmuje więcej platform i typów zasobów, takich jak konektory Kafka Connect i powiązania ról Confluent Cloud. Strona porównania (po angielsku) wymienia szczegóły wraz z datą ich sprawdzenia.

Wsparcie

Pomoc od twórców narzędzia

Możemy pomóc ci korzystać z monedula-gitops w dużym środowisku, od projektu po codzienną eksploatację.

Porozmawiajmy

Część
Monedula Flock

Więcej darmowych narzędzi dla Apache Kafki od tego samego zespołu. Czym jest Flock