Warum Polycrate
Benutzerfreundliches Interface
Mit Hilfe von simplen Actions können komplexe, vor-konfigurierte Infrastruktur-Prozesse abstrahiert und technisch weniger versierten Anwendern zugänglich gemacht werden.
# block.poly
name: nginx
actions:
- name: install
script:
- kubectl run nginx --image=nginx --port=80
- name: uninstall
script:
- kubectl delete deployment nginx
- name: status
script:
- kubectl get deployment nginx
Obige Actions können ohne Kenntnis der eigentlichen Implementierung durch den Anwender ausgeführt werden:
polycrate run nginx install
polycrate run nginx status
polycrate run nginx uninstall
Cloud-native Toolchain im Gepäck
Polycrate hat cloud-native Tools wie Ansible, Terraform oder Python im Gepäck. Dadurch können Anwender direkt mit der Entwicklung von Blöcken und Programm-Logik beginnen, ohne sich Gedanken zu machen, welche Version von Ansible sie für Ihr Betriebssystem installieren müssen und ob diese Version Abhängigkeits-Probleme mit älteren Python-Versionen hervorruft.
Komplexe Prozesse einfach abstrahiert
Um Actions auszuführen ist kein Wissen über die eigentliche Implementierung einer Action notwendig. Ein Polycrate Workspace kann als sehr simples, benutzer-freundliches Interface für komplexe Anwendungs-Logik gestaltet werden - es liegt ganz in der Hand des Workspace Entwicklers, die komplexität des Workspaces vor dem Benutzer zu verstecken und ihm einfache Mittel an die Hand zu geben, Infrastruktur mit Hilfe des Workspace zu verwalten.
Nur eine Konfigurations-Datei
Ein Workspace wird über eine einzelne Datei - die Workspace Konfigurations-Datei (workspace.poly
) beschrieben und konfiguriert. Alle Blöcke eines Workspace erben von dieser Datei. Das macht es unglaublich einfach, selbst komplexe Systeme an einer zentralen Stelle zu beschreiben und instrumentierbar zu machen.
Keine neue Sprache
Polycrate baut auf Industrie-Standards wie YAML auf. Im Gegensatz zu Tools wie Terraform ist es nicht nötig, eine neue DSL oder Programmiersprache zu lernen, um mit Polycrate Erfolge zu erzielen.
Für Teamwork gemacht
Blöcke mit verständlichen Actions erlauben es auch nicht-technischen Kollegen Tasks rund um einen Workspace zu übernehmen, ohne die Implementierungs-Details (z.B. Terraform) zu kennen. Das Installieren von Anwendungen oder Infrastruktur kann so einfach sein wie polycrate run app install
oder polycrate run app restart
.
# block.poly
name: myapp
kubeconfig:
from: aks
actions:
- name: dns-logs
script:
- kubectl --namespace kube-system logs -l k8s-app=kube-dns
- name: ingress-logs
script:
- kubectl --namespace ingress-nginx logs -l app.kubernetes.io/name=ingress-nginx
- name: restart-myapp
script:
- kubectl rollout restart deployment myapp
Funktioniert mit existenten Tools
Es ist nicht nötig, existierenden Code für die Arbeit mit Polycrate umzuschreiben. Polycrate kann wie eine Runtime betrachtet werden, die Code einfach nur ausführt. Entsprechend kann z.B. aus einem existenten Python-Script, das Daten aus einem Zielsystem abholt, einfach ein Block gemacht werden, der dann im Workspace nutzbar ist:
# block.poly
name: random-data
actions:
- name: get
script:
- python get-random-data.py
- name: delete
script:
- python delete-random-data.py
Mit Ansible integriert
Polycrate hat eine sehr tiefe Integration in Ansible, welches Unterstützung für die meisten der aktuell verfügbaren Systeme und Provider im cloud-nativen Ökosystem mitbringt. Dadurch ergeben sich zahlreiche Möglichkeiten, mit Ansible Automatisierungen zu erstellen, Kubernetes oder Docker Deployments zu machen oder Infrastruktur bei einem Cloud-Provider zu erstellen.
# block.poly
name: docker
inventory:
from: servers
actions:
- name: install
script:
- ansible-playbook install.yml
Polycrate stellt sicher, dass Ansible ein gültiges Inventory zur Verfügung gestellt wird und Verbindungs-relevante Komponenten wie SSH-Keys oder ein Kubeconfig-File bei Ausführung von Ansible richtig integriert sind.
Block-Registry
Polycrate nutzt OCI-kompatible Registries als Medium um Blöcke mit Anderen teilen zu können. Blöcke können mit Polycrate in eine Registry gepusht oder aus einer Registry gepullt werden, was auf Workspace-Ebene ein seichtes Dependency-Management ermöglicht.
Häufig genutzte Blöcke können generalisiert und der Allgemeinheit oder anderen internen Teams zur Nutzung zur Verfügung gestellt werden.
Polycrate macht keinen Unterschied zwischen SaaS-Registries wie dem Docker Hub oder selbst-gehosteten Registries wie Harbor oder der offiziellen Docker Container Registry. Blöcke werden verpackt wie reguläre Docker Images und können auch ohne die Polycrate CLI mittels docker pull
oder docker push
transportiert werden.
- Block pullen:
polycrate block pull ayedo/hcloud/k8s:0.0.1
- Block pushen:
polycrate block push my-registry.io/my/secret/block
Block-Namen können analog zum Verhalten von Docker mit oder ohne Registry-Prefix definiert werden. Wird das Prefix ausgelassen, fällt Polycrate zurück auf die Default Registry des Polycrate Hub: cargo.ayedo.cloud
Mit Git integriert
Ein Workspace ist wie eine Blackbox und enthält alle nötigen Informationen und Komponenten um zu funktionieren. Entsprechend kann ein Workspace mit Hilfe von Git versioniert, verwaltet und mit anderen geteilt werden.
Polycrate hat außerdem eine automatische Logging-Funktion, die bei Ausführung der CLI getriggert wird und Informationen zum letzten Stand des Workspaces bei Ausführung einer Action in Form eines Snapshots im Workspace persistiert und (sofern mit Git integriert) die Änderungen in Form eines Commits im Repository festhält.