Mehrere Umgebungen (Staging, Qualitätssicherung, Produktion, etc) mit Kubernetes
Was ist als gute Praxis mit K8S für die Verwaltung mehrerer Umgebungen (QA, Staging, Produktion, Dev, etc)?
Als ein Beispiel, sagen, dass ein team an einem Produkt zu arbeiten, das erfordert die Bereitstellung von ein paar APIs, zusammen mit einem front-end-Anwendung. In der Regel erfordert dies mindestens 2 Umgebungen:
- Inszenierung: Für Iterationen/Test und Validierung vor der Freigabe an den client
- Produktion: Dies ist die Umgebung, die der client Zugriff hat. Enthalten sollte eine stabile und gut getestete features.
So, vorausgesetzt das team ist mit Kubernetes, was wäre eine gute Praxis, um als host für diese Umgebungen? So weit haben wir betrachtet, zwei Optionen:
- Verwenden K8s-cluster für jede Umgebung
- Verwenden Sie nur eine K8s-cluster und halten Sie in unterschiedlichen namespaces.
(1) Scheint eine der sichersten Möglichkeiten, da es minimiert die Risiken von möglichen menschlichen Fehler und Ausfälle von Maschinen zu beherrschen, könnte die Produktion Umwelt in Gefahr. Allerdings geht das mit den Kosten für mehr master-Maschinen und auch die Kosten für weitere Infrastruktur-management.
(2) wie Schaut es vereinfacht die Infrastruktur und deployment-management, denn es gibt einen einzigen cluster, aber es wirft ein paar Fragen wie:
- Wie stellt man sicher, dass ein menschlicher Fehler könnte Auswirkungen auf die Produktionsumgebung?
- Wie stellt man sicher, dass eine hohe Auslastung in der staging-Umgebung nicht zu einem Verlust der Leistung in der Produktionsumgebung?
Möglicherweise gibt es einige andere betrifft, so bin ich zu erreichen, um die K8s-community auf StackOverflow, um ein besseres Verständnis davon, wie Menschen den Umgang mit dieser Art von Herausforderungen.
- Wie sind Sie dazu gekommen, dies zu tun? Könnten Sie bitte lassen Sie uns wissen,... ich bin auch zu lernen, und versucht, herauszufinden, der beste Weg,. Klingt wie der Einrichtung von getrennten Clustern ist wohl der richtige Weg zu gehen...
- Wir endeten mit zwei Cluster für die Inszenierung und ein anderes für die Produktion. Es gibt eine extra-management über Kopf aus einer Infrastruktur, die Sicht, sondern in unserem Fall der Isolationsstufe war es Wert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Definitiv eine separate cluster für die Entwicklung und das erstellen von docker-images, so dass Ihre staging - /production-Cluster gesperrt werden kann security-wise. Egal ob Sie mit separaten Clustern für
staging + production
ist bis zu Sie zu entscheiden, basierend auf der Risiko/Kosten - sicherlich halten Sie separate vermeidenstaging
beeinflussenproduction
.Ich würde auch empfehlen, mit GitOps zu fördern Versionen Ihrer apps zwischen Ihren Umgebungen.
Zu minimieren menschliche Fehler, die ich auch empfehlen, die Sie sehen in der Automatisierung so viel wie Sie können für Ihre CI/CD und Werbung.
Hier eine demo zu automatisieren, CI/CD mit mehreren Umgebungen auf Kubernetes mit GitOps für die Förderung zwischen Umgebungen und Vorschau-Umgebungen über Pull-Requests, die getan wurde live auf GKE obwohl Jenkins X unterstützt die meisten kubernetes-Cluster
Es hängt davon ab, was Sie testen möchten-in jedem der Szenarien. Im Allgemeinen würde ich versuchen, zu vermeiden ausführen von test-Szenarien auf die Produktions-cluster zu vermeiden, die unnötige Nebenwirkungen (Auswirkung auf die Leistung, etc.).
Wenn Ihre Absicht ist, die Prüfung mit einem staging-system, das genau imitiert die Produktion system ich würde empfehlen, anspringt, eine exakte Nachbildung des kompletten cluster-und heruntergefahren werden, nachdem Sie fertig sind, testen und verschieben Sie die Bereitstellungen für die Produktion.
Wenn Ihr Zweck ist, die Prüfung ein staging-system, das es ermöglicht testen der Anwendung bereitstellen würde ich eine kleinere Inszenierung cluster dauerhaft und aktualisieren Sie die Bereitstellungen (mit auch eine abgespeckte version der Bereitstellungen) als Voraussetzung für den kontinuierlichen Tests.
Steuerung der verschiedenen Cluster, die ich lieber mit einem separaten ci/cd-Maschine, die nicht Teil des Clusters ist, sondern verwendet für starten und Herunterfahren Cluster sowie die Durchführung der Bereitstellung der Arbeit, die Einleitung tests, etc. Dieses ermöglicht hoch-und heruntergefahren werden Cluster als Teil von automatisierten Test-Szenarien.
Es ist klar, dass durch die Beibehaltung der Produktion cluster appart aus der Inszenierung ein, die Gefahr von möglichen Fehlerquellen Auswirkungen auf die Produktion und Dienstleistungen verringert wird. Allerdings geht dies zu Kosten von mehr Infrastruktur/configuration management, denn es erfordert mindestens:
Lasst uns auch nicht vergessen, dass es könnte mehr als einer Umgebung. Zum Beispiel arbeitete ich bei Firmen, wo es mindestens 3 Umgebungen:
Ich denke, Ephemere/on-demand-Cluster macht Sinn, aber nur für bestimmte Anwendungsfälle (Last - /performance-Tests oder sehr « big » integration/end-to-end-Tests), aber für hartnäckigere/sticky-Umgebungen sehe ich einen Aufwand, der könnte reduziert werden, indem Sie Sie in einem einzigen cluster.
Ich denke, ich wollte zu erreichen, um die k8s-community, um zu sehen, welche Muster werden für solche Szenarien wie die, die ich beschrieben habe.
Mehrere Cluster Überlegungen
Werfen Sie einen Blick auf dieses blog-post: Checkliste: vor-und Nachteile der Verwendung von mehreren Kubernetes-Cluster, und wie die Verteilung von Arbeitslasten zwischen Ihnen.
Möchte ich einige hervorheben der Vorteile/Nachteile:
Angesichts einer nicht allzu teuren Umgebung, mit einer durchschnittlichen Wartung, und noch in der Gewährleistung der Sicherheit isolation für Produktions-Anwendungen würde ich empfehlen:
Umgebung Parität
Es ist ein gute Praxis zu halten, development, staging und production so ähnlich wie möglich:
Kombinieren eine leistungsfähige CI - /CD-tool mit helm. Sie können die Flexibilität von Ruder Werte, legen Sie Standard-Konfigurationen, nur das überschreiben der configs, die sich aus einer Umgebung in eine andere.
GitLab CI/CD mit AutoDevops hat eine starke integration mit Kubernetes, die Ihnen erlaubt, zu verwalten mehrere Kubernetes-Cluster bereits mit Ruder-Unterstützung.
Die Verwaltung mehrerer Cluster (
kubectl
Interaktionen)Überwinden:
asdf
zum verwalten von mehrerenkubectl
VersionenKUBECONFIG
env var Wechsel zwischen mehrerenkubeconfig
Dateienkube-ps1
zu behalten Ihre aktuellen Kontext/namespacekubectx
undkubens
zu schnell ändern sich zwischen den Clustern/namespacesWerfen Sie einen Blick auf diese Artikel, es wird erklärt, wie Sie dies bewerkstelligen: Mit verschiedenen kubectl Versionen mit mehreren Kubernetes-Cluster
Ich auch empfehlen, das zu Lesen: Die Beherrschung der KUBECONFIG Datei
Es sei denn, compliance-oder sonstigen Vorschriften entgegenstehen, bin ich für einen einzelnen cluster für alle Umgebungen. Mit diesem Ansatz, die Aufmerksamkeit Punkte sind:
Stellen Sie sicher, dass Sie auch Knoten pro Umwelt durch die Verwendung von labels. Sie können dann die
nodeSelector
auf Ressourcen, um sicherzustellen, dass Sie ausgeführt werden, die auf bestimmte Knoten. Dies reduziert die Chancen der (überschüssige) Ressourcen-Verbrauch "Spill over" zwischen den Umgebungen.Behandlung von namespaces als Subnetze und Verbot alle ausgehenden/eingehenden Datenverkehr standardmäßig. Sehen https://kubernetes.io/docs/concepts/services-networking/network-policies/.
Haben eine Strategie für die Verwaltung von Dienstkonten.
ClusterRoleBindings
bedeuten etwas anderes, wenn ein Cluster-hosts mit mehr als einer Umgebung.Kontrolle bei der Verwendung von tools wie der Helm. Einige Diagramme krass installieren von service-Konten mit cluster-wide-Berechtigungen, jedoch werden die Berechtigungen für die Dienstkonten sollte begrenzt werden, um die Umwelt Sie sind in.
Ich denke, dass die Ausführung eines einzelnen Clusters Sinn, denn es verringert den overhead, überwachung. Aber, müssen Sie sicherstellen, dass Netzwerk-policies, Zugriffskontrolle statt.
Netzwerk Politik - zu verbieten dev/qa-Umgebung workload für die Interaktion mit prod - /staging-Shops.
Access control - wer Zugriff auf die verschiedenen Umwelt-Ressourcen mithilfe von ClusterRoles, Rollen etc..