Beziehung zwischen Vagrant, Docker, Chef und OpenStack (oder ähnlichen Produkten)?

56

Ich bin ein Webentwickler, aber ich interessiere mich auch für einige administrative Aufgaben. Daher ist der neue Übergang von der reinen Verwaltung zu Entwicklern für mich praktisch.

Wie auch immer, ich habe einige Probleme, ein paar Dinge in eine Beziehung zu bringen. Vielleicht gibt es keine, deshalb wollte ich um Hilfe bitten, um das zu klären.

Grundsätzlich möchte ich vier Arten von Software in Beziehung setzen (nach meinem Verständnis). Die genauen Produkte spielen keine Rolle, Sie können jede ähnliche Software alternativ platzieren:

  • Vagrant: Meines Erachtens geht es darum, die Erstellung und Verwaltung von VMs zu automatisieren: Sie werden eingerichtet, gestartet und gestoppt. Dies kann mit einer lokalen VM oder remote erfolgen, z. B. auf einer Cloud-Plattform.
  • Docker: Eine "schlanke VM", die auf einigen Linux-Kernelkonzepten basiert und zum isolierten Ausführen von Prozessen verwendet werden kann, z. B. in einer gemeinsam genutzten Webhosting-Umgebung.
  • Chef: Ein Tool zum Einrichten und Konfigurieren eines Betriebssystems, z. B. innerhalb einer VM.
  • OpenStack: Ein Tool, mit dem Sie Ihre eigene private Cloud erstellen können, also vergleichbar mit etwas wie AWS.

Frage 1: Stimmen meine Erklärungen, oder irre ich mich mit einigen (oder allen) dieser Konsumationen?

Frage 2: Wie könnte ich all diese Tools mischen? Wäre das sinnvoll?

Nach meiner Vorstellung und meinem Verständnis könnten Sie gehen und

  • Verwenden Sie OpenStack, um Ihre eigene Cloud zu erstellen.
  • Verwenden Sie Vagrant, um die in der Cloud ausgeführten VMs zu verwalten.
  • Verwenden Sie Chef, um diese VMs einzurichten
  • und schließlich mit Docker Prozesse innerhalb der VMs ausführen.

Ist das richtig? Und wenn ja, können Sie mir einen Rat geben, wie ich mit all dem anfangen soll (es ist ziemlich viel zur gleichen Zeit und ich weiß noch nicht, wo ich anfangen soll)?

Golo Roden
quelle
1
Nicht kompetent genug, um dies vollständig zu beantworten, aber Ihre Einschätzung von Vagrant und Chef scheint korrekt zu sein. In meiner Entwicklungsbox starte ich VMs mit Vagrant und stelle sie dann mit Chef bereit. Das funktioniert sehr gut.
APS

Antworten:

54

Lassen Sie uns auf den jeweiligen Webseiten herausfinden, worum es bei all diesen Projekten geht. Ich ändere jedoch die Reihenfolge, in der Sie aufgeführt sind:

  • Chef : Chef ist eine Automatisierungsplattform, die Infrastruktur in Code umwandelt.

    Dies ist eine Konfigurationsverwaltungssoftware . Die meisten von ihnen verwenden dasselbe Paradigma: Sie können den Status definieren, den eine Maschine haben soll, in Bezug auf Konfigurationsdateien, installierte Software, Benutzer, Gruppen und viele andere Ressourcentypen. Die meisten von ihnen bieten auch Funktionen zum Übertragen von Änderungen auf bestimmte Computer, ein Vorgang, der normalerweise als Orchestrierung bezeichnet wird .

  • Vagrant : Erstellen und konfigurieren Sie kompakte, reproduzierbare und portable Entwicklungsumgebungen.

    Es bietet eine reproduzierbare Möglichkeit, vollständig virtualisierte Maschinen mithilfe der VirtualBox- oder VMWare-Technologie von Oracle als Anbieter zu generieren . Vagrant kann sich mit einer Konfigurationsverwaltungssoftware abstimmen, um den Installationsprozess fortzusetzen, bei dem das Installationsprogramm des Betriebssystems abgeschlossen ist. Dies wird als Bereitstellung bezeichnet .

  • Docker : Ein Open-Source-Projekt zum Packen, Versenden und Ausführen einer beliebigen Anwendung als kompakter Container

    Die Funktionalität dieser Software überschneidet sich etwas mit der von Vagrant, in der sie die Möglichkeit bietet, Betriebssysteminstallationen zu definieren, unterscheidet sich jedoch erheblich in der für diesen Zweck verwendeten Technologie. Docker verwendet Linux-Container , die an sich keine virtuellen Maschinen sind, sondern isolierte Prozesse, die in isolierten Dateisystemen ausgeführt werden. Docker kann auch ein Konfigurationsmanagementsystem verwenden, um die Container bereitzustellen.

  • OpenStack : Open Source-Software zum Erstellen von privaten und öffentlichen Clouds.

    OpenStack kann zwar auf einem einzelnen Computer bereitgestellt werden , diese Bereitstellung dient jedoch nur dem Proof-of-Concept und ist aus Gründen der Ressourcenbeschränkung wahrscheinlich nicht sehr funktionsfähig.

    Das Hauptziel für OpenStack-Installationen sind Bare-Metal-Umgebungen mit mehreren Knoten, in denen die verschiedenen Komponenten in dedizierter Hardware verwendet werden können, um bessere Ergebnisse zu erzielen.

    Eine wichtige Funktion von OpenStack ist die Unterstützung vieler Virtualisierungstechnologien, von vollständig virtualisiert (VirtualBox, VMWare) über paravirtualisiert (KVM / Qemu) bis hin zu Containern (LXC) und sogar User Mode Linux (UML) .

Ich habe versucht, diese Produkte als Komponenten einer bestimmten Architektur zu präsentieren. Aus meiner Sicht ist es sinnvoll, zunächst Ihre Anforderungen in Bezug auf die von Ihnen benötigte Umgebung zu definieren (Chef, Puppet, Ansible, ...) und dann in der Lage zu sein, sie kontrolliert einzusetzen (Vagrant, Docker) , ...) und schließlich auf die globale Größe skalieren, falls dies erforderlich ist.

Wie viel von all diesen Funktionen Sie benötigen, sollte im Rahmen Ihres Projekts festgelegt werden.

Beachten Sie auch, dass ich fast alle technischen Erklärungen zu stark vereinfacht habe. Bitte benutzen Sie die Links, auf die verwiesen wird, um detaillierte Informationen zu erhalten.

Dawud
quelle
sind chef und puppe dasselbe werkzeug? Ich meine, sie sind gleichwertig? Wenn Sie dies auf einem Windows 10-Host ausführen möchten, welche Tools würden Sie verwenden?
ReynierPM
Puppet ist ein ähnliches Werkzeug wie Chefkoch. Unsicher, ob es unter Windows besser ist.
Adeerlike
3

Ich denke, ein Entwickler-Hintergrund macht es schwieriger, ein "Entwickler" zu werden. Ihre Frage ist fast 3 Jahre alt. Es wäre interessant zu hören, wie Sie die Reise finden. Ich werde aus der Sicht von eine Antwort geben der sys admin über die von ihnen oben erwähnten anwendungen und hoffentlich gibt er etwas lichtes oder eine nicht-technische perspektive, die erklären kann, warum eine person (admin oder dev) genau darüber nachdenken würde, was sie zb von den devops gefragt haben Perspektive Wie ist die Beziehung zwischen x, y, z? Sind diese Werkzeuge größer als die Summe ihrer Teile?

Ich denke tatsächlich, dass Sys-Administratoren hier die Oberhand haben. Die meisten der in Ihrer Frage erwähnten Anwendungen lösen Administrationsprobleme und bieten auf diese Weise eine abstraktere Rechenzentrumsumgebung, die wiederum für Entwickler und neue Benutzer besser programmierbar ist. devops 'strategie (lies strategie / team, devops ist keine person). Wie ist also die Beziehung zu den Apps, die Sie erwähnen? Wie ergibt sich ein ganzheitlicher Ansatz für den IT-Service?

OpenStack: Ein Tool, mit dem Sie Ihre eigene private Cloud erstellen können, also vergleichbar mit etwas wie AWS

Das ist was es ist, aber was macht es? - Das Betriebssystem mit dem meistens treffenden Namen war DOS - Es betrieb Ihre Festplatte durch Abstraktion des BIOS, OpenStack betreibt Ihr Rechenzentrum und abstrahiert Ihre Infrastruktur (IaaS - ist Jargon für das Betriebssystem des Rechenzentrums). Jetzt verfügt Ihr Rechenzentrum über eine API, eine Befehlssyntax und eine GUI. OpenStack kann Hypervisoren, Switches, Router, Firewalls, Storage Area Networks, Load Balancer, Docker-Hosts usw. steuern. Openstack verwendet das Plug-In Ihres Hardwareherstellers oder die jeweilige Funktion kann nur in Software als Software existieren, die etwas definiertoder Netzwerkfunktionsvirtualisierung. Darüber hinaus können OpenStack und alle anderen Clouds ihre eigene Infrastruktur orchestrieren, indem Sie Skripte lesen, die Sie in die Orchestrierungs-Engine einschleusen oder die auf Regeln basieren (Skalieren, Skalieren usw.). Openstack ist also eine riesige Abstraktionsebene, z. B. ist es mir egal, welchen Switch ich habe, geben Sie mir ein Netzwerk mit diesem Befehl, oder erstellen Sie mir einen komplizierten Lastenausgleich, HA, öffentlich verfügbar, automatische Skalierung, registrierter Domainname, Speicher beigefügte Sache - mit diesem Skript fand ich im Internet.

Docker: Eine "schlanke VM", die auf einigen Linux-Kernelkonzepten basiert und zum isolierten Ausführen von Prozessen verwendet werden kann, z. B. in einer gemeinsam genutzten Webhosting-Umgebung.

Docker ist eine weitere Abstraktionsebene und wie Cloud eine disruptive Technologie ist, verändert sie die Branche, da sie viele betriebliche "Probleme" wie Softwareabhängigkeiten, Upgrades, Datenisolierung und reine Portabilität löst. Java wurde populär wegen seiner Quellcode-Portabilität, über die Entwickler nicht nachdenken mussten. Eine laufende JVM bedeutete, dass ihr Code auf der Kaffeemaschine ausgeführt werden sollte, solange sie Java unterstützt. Docker löst ein ähnliches Problem. Um meine App auszuführen, benötigen Sie einen Docker-Host, nicht, du brauchst diese Version von Python, diesen Kernel, diese Linux-Distribution und so weiter, die App hat natürlich immer noch diese Abhängigkeiten, aber der zugrunde liegende Host kümmert sich nicht darum und der Administrator kümmert sich nicht darum, was du in einem isolierten Container tust ( bis zu einem Punkt). Docker verändert sowohl das Entwicklungs- als auch das Betriebsparadigma und behandelt ein gesamtes Betriebssystem und dessen Dienste wie eine Binärdatei. wir können sie aus einem Repository holen , versionieren, modifizieren, mit Parametern ausführen usw.

Chef: Ein Tool zum Einrichten und Konfigurieren eines Betriebssystems, z. B. innerhalb einer VM.

Ja, und nicht so störend wie die ersten beiden: Chef, Marionette, Ansible, Salt, System Center Operations Manager und eine Vielzahl anderer Anwendungen in diesem Bereich bieten Entwicklern und Administratoren die Möglichkeit, Bereitstellungen, Upgrades und andere Aktionen zu modellieren (config Änderungen), scheint es keinen Standard zu geben, der diese Bemühungen wie bei der Cloud beurteilt . Aber wir haben es nicht mit etwas so Bestimmtem wie der Infrastruktur zu tun, daher ist es schmerzhafter, dies zu lernen, und es ist nicht viel von einem zum anderen übertragbar.

Vagrant: Meines Erachtens geht es darum, die Erstellung und Verwaltung von VMs zu automatisieren: Sie werden eingerichtet, gestartet und gestoppt. Dies kann mit einer lokalen VM oder remote erfolgen, z. B. auf einer Cloud-Plattform.

Dies ist die ungerade aus der Liste der Apps, die Sie erwähnen. Vagrant ist ein Tool für Entwickler und ein Spielzeug für Administratoren. Mit Vagrant können Sie schnell eine Entwicklungsumgebung aufbauen. Ich möchte z. B. eine Android-App entwickeln, eine IDE von holen Vagabund, ich denke, es wird bald von Docker überholt.

Können Sie mir einen Rat geben, wie ich mit all dem anfangen soll (es ist ziemlich viel zur gleichen Zeit und ich weiß noch nicht, wo ich anfangen soll)?

Aus diesem Grund denke ich, dass Administratoren die Oberhand haben. Wir mussten das meiste manuell erledigen und wissen, was schief gehen kann. Puppenmanifeste, Cloud-Computing und Docker-Orchestrierung werden uns leichter fallen Rat an potenzielle Entwickler ist, zuerst Administrator zu sein.

Sum1sAdmin
quelle
0

Ich habe gerade ein OpenStack-Bereitstellungsprojekt abgeschlossen, das einen Chef-Server in einer Vagrant-Instanz verwendet: https://github.com/bluechiptek/bluechipstack/blob/master/README.md

Das Hauptproblem dabei ist, dass die Vagrant-Instanz jedes Mal dieselbe IP erhält, wenn Sie die Knoten verwalten möchten. Wenn Sie eine statische Adressierung durchführen, funktioniert dies gut. Dies über ein VPN zu tun, ist weniger als ideal.

schnurlos
quelle
0

Meinerseits verwende ich nur eine Kombination aus Vagrant und Docker.

Ich verwende Vagrant, um die Maschinen bereitzustellen (es gibt zusätzliche Cloud-Anbieter, aber ich verwende die eingebaute VirtualBox. Da ich diesen Ansatz verwende, erfolgt die externe Vernetzung und Speicherung ziemlich manuell, aber wenn Sie so etwas wie das Vagrant-AWS- Plugin verwenden, können Sie Weisen Sie AWS an, die erforderlichen Teile für Sie bereitzustellen.

Das von mir verwendete Bereitstellungsskript verweist auf einen sicheren Speicherort, der das CA-Zertifikat und die zum Signieren von CSRs verwendeten Schlüssel sowie die docker swarm joinToken enthält. Außerdem installiere ich die Docker-Engine und konfiguriere sie so, dass sie dem Schwarm beitritt (initialisiere, wenn es keine gibt).

Sobald dies erledigt ist, führe ich einfach eine docker stack deployvon meinem lokalen Computer oder meiner Build-Box aus durch, um den Stack mit allem, was ich brauche, bereitzustellen.

In meinem Fall ließ ich nur Koch für nur einfachen nach der Installation mithilfe von Skripts , die tun yumoder apt-getauf als meine Provisioning - Skripten.

Ich benutze auch das Vagrant-Trigger- Plugin, um vor dem Zerstören zusätzliche Skripte hinzuzufügen (in meinem Fall, um den Schwarm zu verlassen).

Das Schöne an der Zentralisierung mit Vagrant ist, dass Sie die Umgebung auf einem anderen System oder auf einem einzelnen Computer replizieren können, um sie zu entwickeln. Sie müssen lediglich den providerAbschnitt hinzufügen oder ändern . Allerdings habe ich OpenStack noch nicht auf einem einzigen Computer eingerichtet, um VirtualBox zu verwalten.

Archimedes Trajano
quelle