Serverkonfiguration mit Chef-Automatisierung

Eine Schritt-für-Schritt-Anleitung zur Verwendung der Chef-Automatisierung zur Aktualisierung selbstkompilierter Skripte auf mehreren Servern

CloudUPDATED ON April 1, 2022

John Adam K&C head of marketing

Author

Hero image for blog on the topic of Chef for automated infrastructure management

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.

Eine kurze Einführung in Chef – ein DevOps-Automatisierungstool für die Infrastrukturverwaltung

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!

Der Aufstieg von Infrastructure as Code (IaC)

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.

Einführung von Chef für automatisiertes Infrastrukturmanagement

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.

Eine Schritt-für-Schritt-Anleitung zur Verwendung der Chef-Automatisierung zur Aktualisierung selbstkompilierter Skripte auf mehreren Servern

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

Anforderungen

  1. Wir haben bereits das Betriebssystem mit aktualisierten Packages.
  2. Wir haben einen FQDN-Namen.
  3. Curl und GNU Wget sollten bereits installiert sein.

Server-Installation

  1. Gehen Sie auf https://www.opscode.com/chef/install.
  2. Klicken Sie auf die Registerkarte „Chef Server“.
  3. Wählen Sie das Betriebssystem und die Architektur
  4. Wählen Sie die Chef-Version
  5. Installieren Sie das Paket

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/p@ssw0rd1

Einrichten der WorkStation

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 root@chef-server:/etc/chef-server/admin.pem ~/.chef$ scp root@chef-server:/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

Your “Knife config” (knife.rb) will look like this

$ 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

Installieren des node

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 root@chef-server:/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.

K&C – unterstützt Sie mit DevOps und agiler Entwicklung und Beratung

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.