So richten Sie ein Chef 12 Configuration Management-System auf Ubuntu 14.04-Servern ein

Einführung

Mit zunehmenden Anforderungen an Ihre Infrastruktur wird die manuelle Verwaltung der einzelnen Server immer schwieriger. Diese Schwierigkeit wird durch das Erfordernis der Reproduzierbarkeit verschärft, das erforderlich wird, wenn ein Knoten ausfällt oder eine horizontale Skalierung erforderlich ist.

Konfigurationsmanagement-Lösungen wurden entwickelt, um diese Probleme zu lösen, indem Ihre Infrastrukturverwaltung in eine Codebasis umgewandelt wird. Anstatt einzelne Aufgaben auf mehreren Computern auszuführen, können Sie mit diesen Tools Ihre Anforderungen an einen zentralen Ort übertragen, an dem jede Komponente eine Verbindung herstellen, ihre Konfiguration abrufen und anwenden kann.

Inprevious guide sprachen wir auf konzeptioneller Ebene über die allgemeine Struktur der Chef-Komponenten und die Art und Weise, wie sie interagieren, um die Ziele des Administrators zu erreichen. Wir sprachen über die relevante Terminologie und diskutierten die Verantwortung für jedes Stück.

In diesem Handbuch installieren wir die eigentliche Software. Wir werden einen zentralen Chef-Server einrichten, auf dem Konfigurationsanweisungen und Informationen zur Knotenprofilerstellung gespeichert und bereitgestellt werden. Wir werden auch eine Workstation einrichten, auf der der Administrator mit der Codebasis arbeiten und die Eigenschaften der Infrastruktur ändern kann. Wir werden dem nachgehen, indem wir einen neuen Knoten booten, um ihn unter die Verwaltung des Chef-Ökosystems zu bringen.

Voraussetzungen und Ziele

In diesem Handbuch richten wir Version 12 von Chef ein. Die Konfiguration kann zwischen den Versionen erheblich variieren. Stellen Sie daher sicher, dass Sie mit derselben Hauptversionsnummer wie in diesem Handbuch arbeiten, um optimale Ergebnisse zu erzielen.

DasChef documentation gibt an, dass Ihr Chef-Server mindestens 4 Kerne und 4 GB RAM haben sollte. Es sollte auch ein64-bit operating system haben. Für unser Handbuch verwenden wir ein 4-Core / 8-GB-DigitalOcean-Droplet mit 64-Bit-Ubuntu 14.04.

Die Workstation und die Knoten stellen nur sehr geringe Anforderungen. Wir werden Ubuntu 14.04 auch für diese verwenden, um die Konsistenz zu gewährleisten.

Wenn wir fertig sind, haben wir einen zentralen Chef-Server, auf dem wir unsere Konfigurationsdaten speichern und bereitstellen können. Auf unserer Workstation werden Änderungen vorgenommen, auf den Server hochgeladen sowie neue Knoten gebootet und verwaltet. Der Knoten repräsentiert einen einzelnen Server in unserer Infrastruktur.

Konfigurieren Sie den Chef Server

Zunächst richten wir den Chef-Server ein. Denken Sie daran, Chef empfiehlt mindestens 4 Kerne und 4 GB RAM für diesen Server, also planen Sie entsprechend.

Stellen Sie sicher, dass der Server über den Hostnamen erreichbar ist

Sobald Sie bei dem Server angemeldet sind, auf dem Sie den Chef-Server installieren möchten, müssen Sie zunächst sicherstellen, dass der Hostname des Servers ein auflösbarer vollqualifizierter Domänenname (FQDN) oder eine IP-Adresse ist. Sie können dies überprüfen, indem Sie Folgendes eingeben:

hostname -f

Das Ergebnis sollte eine Adresse sein, unter der der Server erreichbar ist. Ist dies nicht der Fall, können Sie einen Domänennamen oder eine IP-Adresse festlegen, über die der Server durch Bearbeiten dieser Datei erreichbar ist:

sudo nano /etc/hosts

Die Datei sieht ungefähr so ​​aus:

127.0.1.1 current_hostname current_hostname_alias
127.0.0.1 localhost

. . .

Ändern Sie die oberste Zeile, um den vollqualifizierten Domänennamen oder die IP-Adresse wiederzugeben, gefolgt von einem Leerzeichen und einem Alias, den Sie für Ihren Host verwenden möchten. Fügen Sie eine Zeilebeneath hinzu, die zwei Zeilen mit der öffentlichen IP-Adresse Ihres Servers in der ersten Spalte und die Informationen, die Sie am Ende der Zeile127.0.1.1bis zum Ende geändert haben. Es sollte ungefähr so ​​aussehen:

127.0.1.1 fqdn_or_IP_address host_alias
127.0.0.1 localhost
IP_address fqdn_or_IP_address host_alias

Wenn ich alsodo not einen Domainnamen habe, ist meine öffentliche IP-Adresse123.123.123.123, und wenn ich möchte, dass mein Host auch über den Hostnamen „chef“ erreichbar ist, könnte ich eine Datei haben, die so aussieht:

127.0.1.1 123.123.123.123 chef
127.0.0.1 localhost
123.123.123.123 123.123.123.123 chef

Wenn dieser Server andererseits den vollständig qualifizierten Domänennamenchef.example.com und eine IP-Adresse von234.234.234.234 hat, sieht meine Datei möglicherweise folgendermaßen aus:

127.0.1.1 chef.example.com chef
127.0.0.1 localhost
234.234.234.234 chef.example.com chef

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Sie können überprüfen, ob der Wert korrekt eingestellt wurde, indem Sie Folgendes eingeben:

hostname -f

Das Ergebnis sollte ein Wert sein, mit dem Sie Ihren Chef-Server von überall in Ihrer Infrastruktur aus erreichen können.

Laden Sie die Chef 12 Server-Software herunter und installieren Sie sie

Als Nächstes können wir die Chef 12-Serversoftware herunterladen. Das Paket, das installiert werden muss, finden Sie auf der Chef-Website. Insbesondere für eine Ubuntu-Installation können Siethis link folgen.

Klicken Sie unter der Überschrift „Ubuntu Linux 14.04“ mit der rechten Maustaste auf den Download-Link und kopieren Sie den Link-Speicherort:

Chef server download

Wechseln Sie zurück auf Ihrem Server in Ihr Ausgangsverzeichnis. Fügen Sie den kopierten Link ein und laden Sie das Paket mit dem Befehlwget herunter. Der Link, den Sie kopiert haben, kann sich von dem folgenden unterscheiden, wenn seit diesem Schreiben ein geringfügiges Versionsupdate stattgefunden hat:

cd ~
wget https://web-dl.packagecloud.io/chef/stable/packages/ubuntu/trusty/chef-server-core_12.0.5-1_amd64.deb

Wenn der Download abgeschlossen ist, installieren Sie das Paket, indem Sie Folgendes eingeben:

sudo dpkg -i chef-server-core_*.deb

Dadurch wird das Basis-Chef 12-System auf dem Server installiert. Wenn Sie einen Server mit weniger leistungsfähiger Hardware als empfohlen ausgewählt haben, schlägt dieser Schritt möglicherweise fehl.

Nach Abschluss der Installation müssen Sie den Befehlreconfigure aufrufen, mit dem die Komponenten des Servers für die Zusammenarbeit in Ihrer spezifischen Umgebung konfiguriert werden:

sudo chef-server-ctl reconfigure

Erstellen Sie einen Administratorbenutzer und eine Organisation

Als nächstes müssen wir einen Admin-Benutzer erstellen. Dies ist der Benutzername, über den Änderungen an den Infrastrukturkomponenten in der zu erstellenden Organisation vorgenommen werden können.

Wir können dies mit dem Unterbefehluser-create des Befehlschef-server-ctl tun. Für den Befehl müssen während des Erstellungsvorgangs eine Reihe von Feldern übergeben werden. Die allgemeine Syntax lautet:

chef-server-ctl user-create USERNAME FIRST_NAME LAST_NAME EMAIL PASSWORD

Wir werden diese Informationen einfügen und am Ende-f, ein zusätzliches Flag, hinzufügen, um einen Dateinamen anzugeben, in dem der private RSA-Schlüssel unseres neuen Benutzers ausgegeben werden soll. Wir benötigen dies, um uns später mit dem Verwaltungsbefehlknifezu authentifizieren.

In unserem Beispiel erstellen wir einen Benutzer mit den folgenden Informationen:

  • Username: admin

  • First Name: admin

  • Last Name: admin

  • Email:[email protected]

  • Password: Beispielpass

  • Filename: admin.pem

Der Befehl zum Erstellen eines Benutzers mit diesen Informationen lautet (Sie sollten dies ändern, um Ihre Informationen, insbesondere das Kennwort, wiederzugeben):

sudo chef-server-ctl user-create admin admin admin [email protected] examplepass -f admin.pem

Sie sollten jetzt einen privaten Schlüssel namensadmin.pem in Ihrem aktuellen Verzeichnis haben.

Nachdem Sie einen Benutzer haben, können Sie eine Organisation mit dem Unterbefehlorg-createerstellen. Eine Organisation ist einfach eine Gruppierung von Infrastruktur und Konfiguration innerhalb von Chef. Der Befehl hat die folgende allgemeine Syntax:

chef-server-ctl org-create SHORTNAME LONGNAME --association_user USERNAME

Der Kurzname ist der Name, mit dem Sie sich innerhalb von Chef auf die Organisation beziehen. Der lange Name ist der tatsächliche Name der Organisation. --association_user gibt den Benutzernamen an, der Zugriff auf die Verwaltung der Organisation hat. Wieder werden wir das-f-Flag hinzufügen, damit wir den Namen der Datei angeben können, in der der private Schlüssel platziert werden soll. Der zu erstellende Schlüssel wird verwendet, um neue Kunden als Teil der Organisation zu validieren, bis sie ihren eigenen eindeutigen Kundenschlüssel erhalten können.

Wir werden eine Organisation mit den folgenden Eigenschaften erstellen:

  • Short Name: Digitalocean

  • Long Name: DigitalOcean, Inc.

  • Association User: admin

  • Filename: digitalocean-validator.pem

Um eine Organisation mit den oben genannten Eigenschaften zu erstellen, verwenden wir den folgenden Befehl:

sudo chef-server-ctl org-create digitalocean "DigitalOcean, Inc." --association_user admin -f digitalocean-validator.pem

Anschließend sollten Sie zwei.pem-Schlüsseldateien in Ihrem Home-Verzeichnis haben. In unserem Fall werden sieadmin.pem unddigitalocean-validator.pem genannt. Wir müssen uns mit diesem Server verbinden und diese Schlüssel für einen Moment auf unsere Workstation herunterladen. Die Installation des Chef-Servers ist jedoch vorerst abgeschlossen.

Konfigurieren Sie eine Chef Workstation

Nachdem unser Chef-Server nun betriebsbereit ist, besteht unsere nächste Vorgehensweise darin, eine Workstation zu konfigurieren. Die eigentliche Infrastrukturkoordination und -konfiguration findet nicht auf dem Chef-Server statt. Diese Arbeit wird auf einer Workstation ausgeführt, die dann die Daten auf den Server hochlädt, um die Chef-Umgebung zu beeinflussen.

Klonen Sie den Chef Repo

Die Chef-Konfiguration für Ihre Infrastruktur wird in einer hierarchischen Dateistruktur verwaltet, die als Chef-Repo bezeichnet wird. Die allgemeine Struktur hierfür finden Sie in einem GitHub-Repository, das vom Chef-Team bereitgestellt wird. Wir werdengit verwenden, um dieses Repo auf unsere Workstation zu klonen und als Grundlage für das Chef-Repository unserer Infrastruktur zu dienen.

Zuerst müssen wirgit über dieapt-Verpackungswerkzeuge installieren. Aktualisieren Sie Ihren Verpackungsindex und installieren Sie das Tool, indem Sie Folgendes eingeben:

sudo apt-get update
sudo apt-get install git

Sobald Siegit installiert haben, können Sie das Chef-Repository auf Ihren Computer klonen. Für diesen Leitfaden werden wir ihn einfach in unser Home-Verzeichnis klonen:

cd ~
git clone https://github.com/chef/chef-repo.git

Dadurch wird die grundlegende Chef-Repo-Struktur in ein Verzeichnis mit dem Namenchef-repo in Ihrem Home-Verzeichnis verschoben.

Versionskontrolle für Ihren Chef Repo

Die im Chef Repo selbst erstellten Konfigurationen werden am besten in einem Versionskontrollsystem so verwaltet, wie Sie Code verwalten würden. Seit wir das Repo oben geklont haben, wurde bereits eingit Repo initialisiert.

Um Ihre Workstation für neue Commits einzurichten, sollten Sie einige Dinge tun.

Legen Sie zunächst den Namen und die E-Mail-Adresse fest, mit dergit alle von Ihnen vorgenommenen Commits markiert. Dies ist eine Voraussetzung dafür, dassgit Commits akzeptiert. Wir setzen dies global, damit jedes von uns erstelltegit-Repo diese Werte verwendet:

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

Als nächstes werden wirgit anweisen, alle im Verzeichnis~/chef-repo/.chefenthaltenen Informationen zu ignorieren. Wir werden dieses Verzeichnis in wenigen Minuten erstellen, um einige vertrauliche Informationen zu speichern. Im Moment können wir diesen Speicherort zu unserer.gitignore-Datei hinzufügen, damitgit keine Daten speichert, die nicht anderen Personen zugänglich gemacht werden sollten:

echo ".chef" >> ~/chef-repo/.gitignore

Da wir die Datei.gitignoregeändert haben, können wir unser erstes neues Commit für das Versionskontrollsystem vornehmen. Fügen Sie zunächst alle geänderten Dateien zum aktuellen Staging-Bereich hinzu:

cd ~/chef-repo
git add .

Übernehmen Sie nun die Änderungen. Wir werden das Flag-m verwenden, um eine Inline-Commit-Nachricht anzugeben, die die Änderungen beschreibt, die wir vornehmen:

git commit -m "Excluding the ./.chef directory from version control"

Unser Chef Repo ist jetzt unter Versionskontrolle. Während wir Konfigurationen für unsere Infrastruktur erstellen, können wir die beiden oben genannten Befehle verwenden, um das Repo vongitauf dem neuesten Stand zu halten.

Laden Sie das Chef Development Kit herunter und installieren Sie es

Als nächstes müssen wir das Chef Development Kit installieren, eine Software-Suite, die für Chef-Workstations entwickelt wurde. Dies umfasst viele Dienstprogramme, die beim Entwerfen von Konfigurationen für Ihre Infrastruktur hilfreich sind. Das Tool, an dem wir an dieser Stelle interessiert sind, ist der gebündelte Befehlknife, der sowohl mit dem Chef-Server als auch mit allen Chef-Clients kommunizieren und diese steuern kann.

Das Chef 12 Development Kit finden Sie auf der Chef-Website. Da wir Ubuntu 14.04 als Workstation verwenden, enthält die Seitehere den neuesten Download-Link. Beachten Sie, dass der Download-Link zum Zeitpunkt des Schreibens nur auf Ubuntu 12.04 und Ubuntu 13.10 verweist, aber dennoch ohne Probleme unter Ubuntu 14.04 installiert werden sollte.

Klicken Sie mit der rechten Maustaste auf den Download-Button unter "Ubuntu Linux" und kopieren Sie den Link-Speicherort:

Ubuntu Chef dev kit

Wechseln Sie zurück auf Ihrer Workstation in Ihr Ausgangsverzeichnis. Fügen Sie den kopierten Link ein und laden Sie das Paket mit dem Befehlwget herunter. Der von Ihnen kopierte Link unterscheidet sich möglicherweise von dem folgenden, wenn eine neuere Development Kit-Version veröffentlicht wurde:

cd ~
wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.4.0-1_amd64.deb

Nachdem das Paket.debheruntergeladen wurde, können Sie es installieren, indem Sie Folgendes eingeben:

sudo dpkg -i chefdk_*.deb

Nach der Installation können Sie mit dem neuen Befehlchefüberprüfen, ob alle Komponenten an ihrem erwarteten Speicherort verfügbar sind:

chef verify

Wenn Ihre Workstation in erster Linie zur Verwaltung von Chef für Ihre Infrastruktur verwendet wird, möchten Sie wahrscheinlich die mit Chef installierte Version von Ruby verwenden. Sie können dies tun, indem Sie Ihre.bash_profileo ändern, dass Chef's Ruby Vorrang hat:

echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile

Anschließend können Sie Ihre.bash_profile-Datei als Quelle verwenden, um die richtigen Umgebungsvariablen für die aktuelle Sitzung festzulegen:

source ~/.bash_profile

Wenn Sie Ihre Ruby-Versionen unabhängig verwalten möchten, können Sie die obigen Schritte überspringen.

Laden Sie die Authentifizierungsschlüssel auf die Workstation herunter

Zu diesem Zeitpunkt verfügt Ihre Workstation über die gesamte Software, die für die Interaktion mit einem Chef-Server und die Erstellung von Infrastrukturkonfigurationen erforderlich ist. Es ist jedoch noch nicht für die Interaktion mit Ihrem Chef-Server und Ihrer Umgebung konfiguriert. In diesem Abschnitt laden wir die Anmeldeinformationen herunter, die wir auf dem Chef-Server erstellt haben.

Wir werden das Dienstprogrammscpverwenden, um den Benutzerschlüssel und den Organisationsvalidierungsschlüssel herunterzuladen, die wir auf dem Chef-Server erstellt haben. Zuvor erstellen wir das versteckte Verzeichnis, in dem wir die folgenden Dateien speichern:

mkdir ~/chef-repo/.chef

Die Methode, mit der Sie eine Verbindung zum Chef-Server herstellen, bestimmt, wie genau wir die Schlüssel herunterladen. Befolgen Sie die nachstehende Methode, die Ihrem Setup entspricht:

Herunterladen von Schlüsseln beim Herstellen einer Verbindung zu einem Chef Server mit Kennwörtern

Wenn Sie über SSH mithilfe der kennwortbasierten Authentifizierung eine Verbindung zu Ihrem Chef-Server herstellen, funktioniert der Befehlscpohne wesentliche Änderungen.

Geben Sie auf Ihrer Workstation den Benutzernamen und den Domänennamen oder die IP-Adresse an, die für die Verbindung zum Chef-Server verwendet werden. Folgen Sie diesem sofort mit einem Doppelpunkt (:) und dem Pfad zu der Datei, die Sie herunterladen möchten. Geben Sie nach dem Hinzufügen eines Leerzeichens das Verzeichnis auf dem Computer vonlocalan, in dem die Dateien heruntergeladen werden sollen (in unserem Fall~/chef-repo/.chef).

Wenn Sie sich mit dem Benutzerkonto vonrootbeim Chef-Server anmelden, sehen Ihre Befehle ungefähr so ​​aus. Denken Sie daran, sowohl den Domänennamen oder die IP-Adresse als auch den Namen der Schlüsseldateien, die Sie herunterladen möchten, entsprechend Ihrer Umgebung zu ändern:

scp root@server_domain_or_IP:/root/admin.pem ~/chef-repo/.chef
scp root@server_domain_or_IP:/root/digitalocean-validator.pem ~/chef-repo/.chef

Wenn Sie mit einem Benutzer ohne Rootberechtigung eine Verbindung zu Ihrem Chef-Server herstellen, sehen die Befehle ungefähr so ​​aus:

scp username@server_domain_or_IP:/home/username/admin.pem ~/chef-repo/.chef
scp username@server_domain_or_IP:/home/username/digitalocean-validator.pem ~/chef-repo/.chef

Herunterladen von Schlüsseln beim Herstellen einer Verbindung mit einem Chef Server mithilfe von SSH-Schlüsseln

Wenn Sie sich stattdessen mit SSH-Schlüsseln (empfohlen) mit Ihrem Chef-Server verbinden, müssen Sie einige zusätzliche Schritte ausführen.

Verlassen Sie zunächst Ihre SSH-Sitzung mit der Workstation. Wir müssen uns vorübergehend mit einem neuen Parameter verbinden:

exit

Sobald Sie wieder auf Ihrem lokalen Computer sind, müssen Sie die SSH-Schlüssel hinzufügen, die Sie zum Herstellen einer Verbindung zum Chef-Server mit einem SSH-Agenten verwenden. OpenSSH, die Standard-SSH-Suite, enthält einen SSH-Agenten, der durch folgende Eingaben gestartet werden kann:

eval $(ssh-agent)

Sie sollten eine Ausgabe sehen, die so aussieht (die Zahl wird wahrscheinlich anders sein):

Agent pid 13881

Sobald der Agent gestartet ist, können Sie Ihren SSH-Schlüssel hinzufügen:

ssh-add
Identity added: /home/demo/.ssh/id_rsa (rsa w/o comment)

Dadurch bleibt Ihr SSH-Schlüssel gespeichert. Jetzt können Sieforward den gespeicherten Schlüssel zu Ihrer Workstation während der Verbindung verwenden, indem Sie die Option-A mitssh verwenden. Auf diese Weise können Sie von Ihrer Workstation aus eine Verbindung zu einem beliebigen Computer herstellen, als ob Sie eine Verbindung von Ihrem lokalen Computer aus herstellen würden:

ssh -A username@workstation_domain_or_IP

Jetzt können Sie mit den weitergeleiteten SSH-Anmeldeinformationen eine Verbindung zu Ihrem Chef-Server herstellen, ohne ein Kennwort zu benötigen. Wenn die Schlüssel auf Ihrem Chef-Server über den Root-Benutzer verfügbar waren, sehen die von Ihnen benötigten Befehle ähnlich aus. Denken Sie daran, den Domänennamen oder die IP-Adresse des Chef-Servers und die Schlüsselnamen nach Bedarf zu ändern:

scp root@server_domain_or_IP:/root/admin.pem ~/chef-repo/.chef
scp root@server_domain_or_IP:/root/digitalocean-validator.pem ~/chef-repo/.chef

Wenn der für den Chef-Server konfigurierte SSH-Schlüssel stattdessen zur Authentifizierung bei einem normalen Benutzerkonto verwendet wird, sehen Ihre Befehle stattdessen folgendermaßen aus:

scp username@server_domain_or_IP:/home/username/admin.pem ~/chef-repo/.chef
scp username@server_domain_or_IP:/home/username/digitalocean-validator.pem ~/chef-repo/.chef

Konfigurieren von Knife zur Verwaltung Ihrer Chef-Umgebung

Nachdem Sie Ihre Chef-Anmeldeinformationen auf Ihrer Workstation verfügbar haben, können wir den Befehlknifemit den Informationen konfigurieren, die für die Verbindung und Steuerung Ihrer Chef-Infrastruktur erforderlich sind. Dies erfolgt über eineknife.rb-Datei, die wir zusammen mit unseren Schlüsseln im Verzeichnis~/chef-repo/.chef ablegen.

Öffnen Sie eine Datei mit dem Namenknife.rb in diesem Verzeichnis in Ihrem Texteditor:

nano ~/chef-repo/.chef/knife.rb

Fügen Sie in diese Datei die folgenden Informationen ein:

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "name_for_workstation"
client_key               "#{current_dir}/name_of_user_key"
validation_client_name   "organization_validator_name"
validation_key           "#{current_dir}/organization_validator_key"
chef_server_url          "https://server_domain_or_IP/organizations/organization_name"
syntax_check_cache_path  "#{ENV['HOME']}/.chef/syntaxcache"
cookbook_path            ["#{current_dir}/../cookbooks"]

Die folgenden Elemente sollten an Ihre Infrastruktur angepasst werden:

  • node_name: Dies gibt den Namen an, denknife verwendet, um eine Verbindung zu Ihrem Chef-Server herzustellen. Dies sollte mit Ihrem Benutzernamen übereinstimmen.

  • client_key: Dies sollte der Name und der Pfad zum Benutzerschlüssel sein, den Sie vom Chef-Server kopiert haben. Wir können das#{current_dir}-Snippet verwenden, um den Pfad auszufüllen, wenn sich der Schlüssel im selben Verzeichnis wie dieknife.rb-Datei befindet.

  • validation_client_name: Dies ist der Name des Validierungsclients, denknife zum Booten neuer Knoten verwendet. Dies erfolgt in Form des Kurznamens Ihrer Organisation, gefolgt von-validator.

  • validation_key: Wie beiclient_key enthält dies den Namen und den Pfad zu dem Validierungsschlüssel, den Sie vom Chef-Server kopiert haben. Auch hier können Sie das Ruby-Snippet#{current_dir}verwenden, um das aktuelle Verzeichnis anzugeben, wenn sich der Validierungsschlüssel im selben Verzeichnis wie die Dateiknife.rbbefindet.

  • chef_server_url: Dies ist die URL, unter der der Chef-Server erreichbar ist. Es sollte mithttps:// beginnen, gefolgt vom Domainnamen oder der IP-Adresse Ihres Chef-Servers. Anschließend sollte der Pfad zu Ihrer Organisation durch Anhängen von/organizations/your_organization_name angegeben werden.

In unserem Handbuch sieht die Dateiknife.rbähnlich aus. Sie müssen den Domain-Namen oder die IP-Adresse des Servers noch anpassen, wenn Sie mitmachen:

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "admin"
client_key               "#{current_dir}/admin.pem"
validation_client_name   "digitalocean-validator"
validation_key           "#{current_dir}/digitalocean-validator.pem"
chef_server_url          "https://server_domain_or_IP/organizations/digitalocean"
syntax_check_cache_path  "#{ENV['HOME']}/.chef/syntaxcache"
cookbook_path            ["#{current_dir}/../cookbooks"]

Wenn Sie fertig sind, speichern und schließen Sie die Dateiknife.rb.

Jetzt testen wir die Konfigurationsdatei, indem wir einen einfachen Befehlknife ausprobieren. Wir müssen uns in unserem Verzeichnis~/chef-repobefinden, damit unsere Konfigurationsdatei korrekt gelesen werden kann:

cd ~/chef-repo
knife client list

Dieser erste Versuch sollte mit einem Fehler fehlschlagen, der so aussieht:

ERROR: SSL Validation failure connecting to host: server_domain_or_IP - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
ERROR: Could not establish a secure connection to the server.
Use `knife ssl check` to troubleshoot your SSL configuration.
If your Chef Server uses a self-signed certificate, you can use
`knife ssl fetch` to make knife trust the server's certificates.

Original Exception: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

Dies liegt daran, dass auf unserer Workstation kein SSL-Zertifikat für unseren Chef-Server vorhanden ist. Wir können dies durch Eingabe erhalten:

knife ssl fetch

Dies sollte die Zertifikatdatei des Chef-Servers zu einer Liste in unserem Verzeichnis~/chef-repo/.chefhinzufügen:

WARNING: Certificates from server_domain_or_IP will be fetched and placed in your trusted_cert
directory (/home/demo/chef-repo/.chef/trusted_certs).

Knife has no means to verify these are the correct certificates. You should
verify the authenticity of these certificates after downloading.

Adding certificate for server_domain_or_IP in /home/demo/chef-repo/.chef/trusted_certs/server_domain_or_IP.crt

Nachdem das SSL-Zertifikat abgerufen wurde, sollte der vorherige Befehl jetzt funktionieren:

knife client list
digitalocean-validator

Wenn der obige Befehl korrekt zurückgegeben wird, ist Ihre Workstation jetzt für die Steuerung Ihrer Chef-Umgebung eingerichtet.

Bootstrapping eines neuen Knotens mit Knife

Wenn unser Chef-Server und unsere Workstation konfiguriert sind, können wir beginnen, mit Chef neue Server in unserer Infrastruktur zu konfigurieren.

Dies geschieht durch einen Prozess namens "Bootstrapping", bei dem die ausführbare Datei des Chef-Clients auf dem neuen Computer installiert wird und der Organisationsvalidierungsschlüssel ebenfalls weitergegeben wird. Der neue Knoten kontaktiert dann den Chef-Server mit dem Validierungsschlüssel und erhält im Gegenzug seinen eigenen eindeutigen Client-Schlüssel und jede ihm zugewiesene Konfiguration. Dieser Prozess versetzt den neuen Server in den Ausgangszustand und richtet ihn für eine zukünftige Verwaltung ein.

Um eine Verbindung zum neuen Server herzustellen, benötigen wir einige Informationen zum neuen Knoten:

  • Der Domainname oder die IP-Adresse, unter der er erreichbar ist

  • Der Benutzername, mit dem administrative Aktionen ausgeführt werden. Dies kann entwederroot oder ein Benutzer sein, der mitsudo Berechtigungen konfiguriert ist.

  • Eine Methode zum Anmelden als der oben genannte Benutzer. Dies kann entweder das Passwort oder die Möglichkeit sein, einen SSH-Schlüssel zu verwenden.

  • Eine Methode zum Ausführen von Verwaltungsaufgaben. Für Benutzer vonrootist dies nicht erforderlich. Für Benutzer, die sich auf die Berechtigungen vonsudoverlassen, ist im Allgemeinen ein Kennwort erforderlich.

Die allgemeine Syntax des Befehls lautet:

knife bootstrap node_domain_or_IP [options]

Einige häufig verwendete Optionen sind:

  • -x: Wird verwendet, um den Benutzernamen anzugeben, bei dem die Authentifizierung über SSH erfolgen soll. Dies ist normalerweise erforderlich.

  • -N: Der neue Name für den Knoten, wie er in Chef angezeigt wird. Wenn Sie dies weglassen, wird normalerweise der Hostname für den Chef-Knotennamen verwendet.

  • -P: Wird verwendet, um das Kennwort für den Benutzernamen auf dem Remote-Server anzugeben. Dies ist erforderlich, wenneither für die SSH-Sitzung eine Kennwortauthentifizierung erfordertor, wenn für den Benutzernamen ein Kennwort fürsudo Befehle erforderlich ist.

  • --sudo: Wenn der Benutzername auf dem Remote-Serversudo verwenden muss, um administrative Aktionen auszuführen, wird dieses Flag benötigt. Standardmäßig werden Sie aufgefordert, das Kennwort fürsudoeinzugeben.

  • --use-sudo-password: Wenn Sie dem Benutzer bereits das Kennwort mit dem Flag-P bereitstellen, wird bei Verwendung dieses Flagsin addition für das Flag--sudo das Kennwort-Pverwendet ohne Aufforderung.

  • -A: Diese Option leitet SSH-Schlüssel zur Anmeldung an den Remote-Host weiter, anstatt die Kennwortauthentifizierung zu verwenden.

Wenn Sie die Option-A verwenden, müssen Sie einen SSH-Agenten auf Ihrem lokalen Computer starten, den SSH-Schlüssel hinzufügen, mit dem eine Verbindung zum neuen Knoten hergestellt werden kann, und diese Informationen an Ihre Workstation weiterleiten, indem Sie eine Verbindung mit-Aherstellen ) s Flag zunächst. Weitere Informationen dazu finden Sie im Abschnitt zur Konfiguration der Arbeitsstation zum Herunterladen der Schlüssel vom Chef-Server.

Unter Verwendung der obigen Informationen ist es möglich, die richtigen Bootstrapping-Befehle für eine Vielzahl von Situationen zu erstellen.

Um beispielsweise einen Knoten mit dem Namen "testing" unter Verwendung des Benutzernamensdemo zu booten, der mit den Berechtigungensudokonfiguriert ist und ein Kennwort für SSH und die Validierung vonsudobenötigt, wir können tippen:

knife bootstrap node_domain_or_IP -N testing -x demo -P password --sudo --use-sudo-password

Wenn Sie mit dem Benutzerrootmit SSH-Schlüsselauthentifizierung unter Verwendung der auf der Workstation verfügbaren Schlüssel booten möchten und weiterhin den Hostnamen des Knotens als Chefknotennamen verwenden möchten, können Sie Folgendes eingeben:

knife bootstrap node_domain_or_IP -x root -A

Wenn wir SSH-Schlüssel zur Authentifizierung bei einem Benutzer vonsudoverwenden möchten, müssen wir weiterhin ein Kennwort mit dem Flag-P, dem Flag--sudo und dem Flag--use-sudo-password angeben Flag, um Eingabeaufforderungen zu vermeiden:

knife bootstrap node_domain_or_IP -x demo -A -P password --sudo --use-sudo-password -N name

Wenn Sie sich im obigen Szenario befinden, aber nichts dagegen haben, für dassudo-Kennwort aufgefordert zu werden, können Sie stattdessen einfach Folgendes eingeben:

knife bootstrap node_domain_or_IP -x demo -A --sudo -N name

Sobald Ihr neuer Knoten gebootet ist, sollten Sie einen neuen Client haben:

knife client list
digitalocean-validator
name

Sie sollten auch einen neuen Knoten mit demselben Namen haben:

knife node list
name

Mit dem oben beschriebenen Verfahren können Sie problemlos neue Chef-Clients auf einer beliebigen Anzahl neuer Server einrichten.

Wenn Sie erfahren möchten, wie Sie Ihre neuen DigitalOcean Droplets automatisch zu Ihrer vorhandenen Chef-Infrastruktur hinzufügen können, ohne jedes einzelne Bootstrap durchführen zu müssen,check out this tutorial.

Fazit

Nachdem Sie diese Anleitung befolgt haben, sollten Sie einen voll funktionsfähigen Chef-Server für Ihre Infrastruktur konfiguriert haben. Wir haben auch eine Workstation eingerichtet, mit der Sie die Konfigurationen verwalten und pflegen können, die Chef auf Ihre Infrastruktur anwendet. Wir haben gezeigt, wie Sie den Befehlknife verwenden, um die von Chef konfigurierten Server zu booten.

Innext guide zeigen wir Ihnen, wie Sie mithilfe einiger Chef-Konstrukte Konfigurationen für Ihre Knoten entwerfen. Wir werden die Grundlagen der Kochrezepte und Kochbücher durchgehen, um Ihre Infrastruktur mit deklarativen Konfigurationen zu steuern.