In diesem Beitrag unserer Serie über Cloud-Consulting und DevOps erläutern wir genau, warum Sie Chef für das Infrastrukturmanagement verwenden sollten! Insbesondere bieten wir eine Schritt-für-Schritt-Anleitung zur Einrichtung der Chef-Automatisierung für die Serverkonfiguration durch automatisierte Skript-Updates auf mehreren Servern.
Chef ist ein Konfigurationsmanagement-Tool aus der gleichen Kategorie wie Puppet und Ansible, das bei der DevOps-Automatisierung eingesetzt wird. Einst als innovatives DevOps-Tool angesehen, gehören Chef und ähnliche Tools heute zum Mainstream und werden von den meisten Unternehmen und DevOps-Teams verwendet, die an Cloud-Anwendungen arbeiten.
Da Software, insbesondere Cloud-native Software, immer anspruchsvoller wird, ist die Automatisierung der Infrastruktur zu einem unverzichtbaren Standard geworden. Sie bieten eine zentrale DevOps-Umgebung für die Verwaltung aller Systeme, Netzwerke und Geräte, sowohl in der Cloud als auch vor Ort, und ermöglichen es DevOps-Entwicklern, Infrastruktur und Anwendungen zuverlässig und effizient zu konfigurieren, zu aktualisieren und bereitzustellen.
Agile und DevOps-Entwickler, Teamverstärkung und Berater
Nach Ihren individuellen Bedürfnissen!
Die Verwendung manueller Prozesse bei der Infrastrukturverwaltung ist sowohl fehleranfällig als auch, was für die heutige Software entscheidend ist, nicht gut skalierbar. Bei der Verwendung benutzerdefinierter Skripte ist es schwierig, die Konsistenz aufrechtzuerhalten, und regelmäßige Wartungsanforderungen wie die Aktualisierung von Betriebssystemen auf verschiedenen Geräten können Tage oder Wochen dauern.
Manuelle Prozesse eignen sich auch nicht für CI/CD-Pipelines, die Konsistenz zwischen Entwicklungs-, Test- und Produktionsumgebungen über alle Systeme hinweg erfordern.
Die Umstellung auf Infrastructure as Code ermöglicht CI/CD, Versionskontrolle und automatisierte Tests für die gesamte Infrastruktur sowie für alle Anwendungen. Infrastructure as Code bedeutet nicht, dass keine physischen Server involviert sind, sondern vielmehr, dass Skripte die Infrastruktur in allen Umgebungen konsistent bereitstellen und verwalten.
Ein weiterer Vorteil der Definition und Dokumentation innerhalb des Codes ist, dass durch die Kontinuität alle Beteiligten auf dem gleichen Stand sind, was die Zusammenarbeit erheblich verbessert. Außerdem wird die Transparenz und Stabilität erhöht, was für die Aufrechterhaltung von Qualität und Leistung in großen, agilen Softwaresystemen entscheidend ist.
Konfigurationsmanagement-Plattformen wie Chef ermöglichen es, die Infrastruktur wie Code zu behandeln. Chef verwendet vorgefertigten Code, die „Rezepte“, um Infrastruktur, Systemabhängigkeiten und Sicherheitsrichtlinien zu definieren.
Die Plattform automatisiert auch die Erkennung und Behebung von Inkonsistenzen in der Konfiguration in verschiedenen Umgebungen und Geräten. Sie können Chef auch verwenden, um VMs, Cloud-Instanzen und Container zu starten oder Sicherheitsupdates zu automatisieren.
Kurz gesagt: Chef vermeidet manuelle Infrastrukturverwaltungsprozesse, die Zeit kosten und das Risiko von Fehlern erhöhen, aber dem Endbenutzer nichts bringen, außer eine Anwendung am Laufen zu halten. Durch die Automatisierung dieser Aufgaben können sich die Softwareentwicklungsteams auf die Dinge konzentrieren, die einen echten Mehrwert für den Benutzer darstellen.
Betrachten wir, wie wir die Chef-Automatisierung zur Konfiguration von Servern einsetzen.
Wir nutzen selbstkompilierte Skripte für Inhaltsaktualisierungen (für Echtzeit-Debugging). Unter Anwendung des Server-Client-Prinzips sind das Initialisierungsskript und das ausführbare Skript auf den Servern. Da es aber sehr viele Server gibt, dauert die Änderung eines Skripts auf jedem einzelnen Server sehr lange.
Let’s get started
rpm -ivh https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.1.3-1.el6.x86_64.rpm
Configure Chef server 11.*. Run command
# chef-server-ctl reconfigure
Es installiert und richtet die erforderlichen Pakete selbst ein
Dann stoppen wir den Webserver, falls vorhanden, und führen das Verifikationsskript aus:
# chef-server-ctl test
Nach dem Test gehen Sie auf:
# https://FQDN-OR-IP-OF-CHEF-SERVER
Note: Default UserName/Password: admin/[email protected]
Befehl ausführen (wie unter Linux)
# curl -L https://www.opscode.com/chef/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
101 6790 101 6790 0 0 3826 0 0:00:01 0:00:01 —:—:— 12190
Downloading Chef for el…
Installing Chef
warning: /tmp/tmp.KnyQTnqz/chef-.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing… ########################################### [100%] 1:chef ########################################### [100%] Thank you for installing Chef!
Überprüfen Sie nach Abschluss der Installation, ob der Client installiert ist
# chef-client -v
Chef: 11.6.0
Erstellen Sie ein Chef directory
Kopieren der Cert Keys von Chef Server in den User Folder der Workstation
$ mkdir ~/.chef$ scp [email protected]:/etc/chef-server/admin.pem ~/.chef$ scp [email protected]:/etc/chef-server/chef-validator.pem ~/.chef
Konfigurieren Sie nun den Client mit dem Befehl “knife”
$ knife configure -i
Überschreiben Sie /root/.chef/knife.rb? (Y/N) y
Bitte geben Sie die URL des chef server ein: [https://test.example.com:443] https://chef-server.example.com:443/
Bitte geben Sie einen Namen für den neuen Benutzer ein: [root] knife-user1
Bitte geben Sie den bestehenden Admin-Namen ein: [admin] Enter
Bitte geben Sie den Ort ein, an dem sich der private Schlüssel des Administrators befindet: [/etc/chef-server/admin.pem] ~/.chef/admin.pem
Bitte geben Sie den clientname zur Validierung ein: [chef-validator] Bitte geben Sie den Ort des validation key ein: [/etc/chef-server/chef-validator.pem] ~/.chef/chef-validator.pem
Bitte geben Sie den Pfad zu einem chef-Repository ein (oder leer lassen):
Erstellen der ersten API-Benutzer…
Bitte geben Sie ein Passwort für den neuen Benutzer ein: Created user[knife-user1] Configuration file written to /root/.chef/knife.rb
$ cat ~/.chef/knife.rb
log_level :info
log_location STDOUT
node_name ‘knife-user1’
client_key ‘/root/.chef/knife-user1.pem’
validation_client_name ‘chef-validator’
validation_key ‘/root/.chef/admin.pem’
chef_server_url ‘https://chef-server.example.com:443/’
syntax_check_cache_path ‘/root/.chef/syntax_check_cache’
Überprüfen Sie Ihre Installation, indem Sie die entsprechenden Befehle ausführen:
$ knife client list
chef-validator
chef-webui
$ knife user list
admin
knife-user1
Befehl ausführen (wie unter Linux)
# curl -L https://www.opscode.com/chef/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
101 6790 101 6790 0 0 3826 0 0:00:01 0:00:01 —:—:— 12190
Downloading Chef for el…
Installing Chef
warning: /tmp/tmp.KnyQTnqz/chef-.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing… ########################################### [100%] 1:chef ########################################### [100%] Thank you for installing Chef!
Erstelle Chef directory
# mkdir /etc/chef
Kopieren Sie Chef Server Validation Cert Keys von Chef Server auf unseren node in “/etc/chef”:
# scp [email protected]:/etc/chef-server/chef-validator.pem /etc/chef
Führen Sie den Befehl aus und registrieren Sie sich in Chef Server:
# chef-client -S https://FQDN-OR-IP-OF-CHEF-SERVER -K /etc/chef/chef-validator.pem
Sobald der Client verifiziert ist, erstellen wir eine Datei in “client.rb” in directory “/etc/chef”.
# vi /etc/chef/client.rb
log_level :info
log_location STDOUT
chef_server_url ‘https://FQDN-OR-IP-OF-CHEF-SERVER’
Erfolgreiche Registrierung des node prüfen
Führen Sie auf der WorkStation den Befehl aus:
# knife node list
Und auf dem Server im Webinterface:
# https://FQDN-OR-IP-OF-CHEF-SERVER
Starten Sie den Client:
# chef-client# chef-client -l debug (In case if you want to debug)
Erstellen Sie ein einfaches Cookbook und schreiben Sie dort ein Recipe
Bei WorkStation anmelden:
# vi /root/.chef/knife.rb
cookbook_path [ ‘/usr/local/src/chef/cookbooks’ ]
Erstellen Sie ein directory für Cookbook:
# mkdir -p /usr/local/src/chef/cookbooks
Nun, erstellen Sie ein einfaches Cookbook:
# knife cookbook create cookbook-test
Gehen Sie zum directory:
# cd /usr/local/src/chef/cookbooks# tree cookbook-test
cookbook-test/
├── attributes
├── CHANGELOG.md
├── definitions
├── files
│ └── default
├── libraries
├── metadata.rb
├── providers
├── README.md
├── recipes
│ └── default.rb
├── resources
└── templates
└── default
Lassen Sie uns nun ein recipe für die neue Gruppe (system-admins) und den Bentuzer “sanjay” erstellen.
# cat /usr/local/src/chef/cookbooks/cookbook-test/recipes/default.rb
#
# Cookbook Name:: cookbook-test
# Recipe:: default
#
# Copyright 2016, YOUR_COMPANY_NAME
#
# All rights reserved — Do Not Redistribute
#
group «system-admins» do
gid 1001
end
user «sanjay» do
comment «Sanjay User»
shell «/bin/bash»
home «/home/sanjay»
gid «system-admins»
uid 1002
supports :manage_home => true
password «$1$QwuUa80Z$KZkYq8CqICVyIsK1tHZ7s0»
end
Um cookbooks auf den Server hochzuladen, gehen Sie wie folgt vor:
# knife upload cookbooks
Hinweis: Dadurch werden alle cookbooks auf den Server hochgeladen
Um ein bestimmtes Buch „book“ auf den Server hochzuladen:
# knife upload cookbooks cookbook-test
Fügen Sie nun das recipe zur run_list hinzu:
# knife node list
node1.example.com
node2.example.com
node3.example.com
# knife node run_list add node1.example.com cookbook-test
node1.example.com:
run_list: recipe[cookbook-test
Nun, melden Sie sich auf der machine node1.example.com an und führen Sie den Befehl aus
# chef-client
[2016-10-25T04:47:36-07:00] INFO: Forking chef instance to converge…
Starting Chef Client, version 11.6.2
[2016-10-25T04:47:36-07:00] INFO: *** Chef 11.6.2 ***
[2016-10-25T04:47:37-07:00] INFO: Run List is
] [2016-10-25T04:47:37-07:00] INFO: Run List expands to [cookbook-test] [2016-10-25T04:47:37-07:00] INFO: Starting Chef Run for node1.example.com
[2016-10-25T04:47:37-07:00] INFO: Running start handlers
[2016-10-25T04:47:37-07:00] INFO: Start handlers complete.
resolving cookbooks for run list: [«cookbook-test»] [2016-10-25T04:47:37-07:00] INFO: Loading cookbooks [cookbook-test] Synchronizing Cookbooks:
[2016-10-25T04:47:37-07:00] INFO: Storing updated cookbooks/cookbook-test/recipes/default.rb in the cache.
[2016-10-25T04:47:37-07:00] INFO: Storing updated cookbooks/cookbook-test/metadata.rb in the cache.
[2016-10-25T04:47:37-07:00] INFO: Storing updated cookbooks/cookbook-test/README.md in the cache.
[2016-10-25T04:47:37-07:00] INFO: Storing updated cookbooks/cookbook-test/CHANGELOG.md in the cache.
— cookbook-test
Compiling Cookbooks…
Converging 1 resources
Recipe: cookbook-test::default
* group[system-admins] action create[2016-10-25T22:23:38-07:00] INFO: Processing group[system-admins] action create (cookbook-test::default line 9)
(up to date)
* user[sanjay] action create[2016-10-25T04:47:37-07:00] INFO: Processing user[sanjay] action create (cookbook-test::default line 9)
(up to date)
[2016-10-25T04:47:37-07:00] INFO: Chef Run complete in 0.48225768 seconds
[2016-10-25T04:47:37-07:00] INFO: Running report handlers
[2016-10-25T04:47:37-07:00] INFO: Report handlers complete
Chef Client finished, 0 resources updated
Um eine weitere sendmail Installation zu erstellen und das recipe auszuführen, tippen Sie auf WorkStation:
# vim /usr/local/src/chef/cookbooks/cookbook-test/recipes/sendmail.rbpackage ’sendmail‘ do action :install end service ’sendmail‘ do action [ :enable,:start ] end
Hochladen des cookbook:
# knife upload cookbooks cookbook-test
Auf dem node ausführen:
# chef-client
Recipe: cookbook-test::sendmail
* package[sendmail] action install[2016-10-25T22:05:22-07:00] INFO: Processing package[sendmail] action install (cookbook-test::sendmail line 1)
[2016-10-25T22:06:14-07:00] INFO: package[sendmail] installing sendmail-8.14.4-8.el6 from base repository
— install version 8.14.4-8.el6 of package sendmail
* service[sendmail] action enable[2016-10-28T04:12:10-07:00] INFO: Processing service[sendmail] action enable (system-users::sendmail line 5)
(up to date)
* service[sendmail] action start[2016-10-28T04:12:11-07:00] INFO: Processing service[sendmail] action start (system-users::sendmail line 5)
[2016-10-28T04:12:11-07:00] INFO: service[sendmail] started
— start service service[sendmail]
Und so funktioniert die Serverkonfiguration mit Chef Automation. Die offizielle Website enthält eine große Menge an Informationen über das Schreiben von recipes und die Einrichtung des Programms.
Wenn wir Sie bei Ihren digitalen Projekten unterstützen können, von DevOps-Beratung über Teamverstärkung bis hin zu einem engagierten Team und Delivery Management für ein End-to-End-Projekt, würden wir uns freuen, von Ihnen zu hören. Fragen Sie uns alles, was Sie darüber wissen möchten, wer wir sind und wie wir arbeiten, oder fordern Sie ein Angebot an.
K&C - Wir schaffen innovative Tech-Lösungen seit über 20 Jahren.
Kontaktieren Sie uns, um Ihre individuellen Bedürfnisse oder Ihr nächstes Projekt zu diskutieren.