Chef Workflow: Part 1 - Konfiguration


Bicycle

Mit Chef kann man Infrastruktur-Komponenten programmgesteuert bereitstellen und konfigurieren. Auf diese Weise kann man die Form der Infrastruktur konsistent erfassen und dokumentieren. Die Chef-Terminologie kann jedoch verwirrend sein, wenn man sie zum ersten Mal sieht.

Einen Überblick über die grundlegenden Begriffe gibt es in diesem Blogpost Einführung in Chef.

Konfiguration

Um Test-Kitchen zu konfigurieren, wird eine .kitchen.yml Datei im Rootverzeichnis unseres Cookbooks verwendet. Hier ist ein einfaches Beispiel für eine Konfiguration, die einen Test Node mit Vagrant / VirtualBox bereitstellt:

 1---
 2driver:
 3  name: vagrant
 4
 5provisioner:
 6  name: chef_zero
 7
 8platforms:
 9  - name: ubuntu-14.04
10
11suites:
12  - name: default
13    run_list:
14      - recipe[my_cookbook::default]
15    attributes:

driver konfiguriert das Verhalten des Kitchen Drivers. Der Treiber ist dafür verantwortlich, eine Maschine zu erstellen, mit dem man das Cookbook testen kann.

driver.name sagt Test-Kitchen, dass man den Kitchen-Vagrant-Treiber verwenden möchte. Wenn man auf einer anderen Plattform convergen möchte, ändert man einfach den Treiber in z.B. "ec2" oder "openstack".

provisioner teilt Test-Kitchen mit, wie man Chef ausführt, um den Code in unserem Cookbook auf die Maschine anzuwenden, die wir convergen. Der Standard und einfachste Ansatz ist die Verwendung von chef_zero (ein simpler, einfach zu installierender In-Memory-Chef-Server, der zum Testen nützlich ist).

platforms ist eine Liste von Betriebssystemen, auf denen man den Code ausführen möchten. Zu beachten ist, dass die Version, die Architektur, die Cloud-Umgebung des Betriebssystems relevant dafür sein können, was Test-Kitchen als Plattform betrachtet. Wenn man hier mehrere Plattformen angibt, werden sie von Test-Kitchen nacheinander zusammengeführt und Tests für alle durchgeführt. Unser Beispiel verwendet Ubuntu 14.04.

suites definiert, was man auf dem Node convergen möchten. Es enthält die Chef-Run-Liste und alle Node Attribut-Setups, die auf jeder der oben genannten Plattformen ausgeführt werden sollen. Beispielsweise möchte man möglicherweise einen MySQL-Client-Cookbook-Code getrennt vom Server-Cookbook-Code auf maximale Isolierung testen.

InSpec

Mit InSpec kann man überprüfen, ob die Server korrekt konfiguriert sind.

Hier ein Beispiel:

 1  describe package('ntp') do
 2  it { should be_installed }
 3end
 4describe service('ntp') do
 5  it { should be_running }
 6end
 7describe file('/etc/ntp.conf') do
 8  it { should contain '0.pool.ntp.org' }
 9  it { should contain '1.pool.ntp.org' }
10end

ChefSpec

Dieses Beispiel zeigt, wie ChefSpec testen kann, ob das Cookbook ein bestimmtes Paket installiert:

1require 'chefspec'
2
3describe 'example::default' do
4  let(:chef_run) { ChefSpec::SoloRunner.converge(described_recipe) }
5
6  it 'installs foo' do
7    expect(chef_run).to install_package('foo')
8  end
9end

Vorbereitungen für Chef

ChefDK installieren

Auf dieser Seite kann man das neueste Paket herunterladen und installieren:

https://cinc.sh/start/workstation/

Ob die Installation erfolgreich war, überprüft man indem man diesen Befehl im Terminal ausführt (dies kann einige Minuten dauern):

1$ chef verify

Der erwartete Output sieht ungefähr so ​​aus:

 1Running verification for component 'berkshelf'
 2Running verification for component 'test-kitchen'
 3Running verification for component 'chef-client'
 4Running verification for component 'chef-dk'
 5Running verification for component 'chef-provisioning'
 6Running verification for component 'chefspec'
 7Running verification for component 'rubocop'
 8Running verification for component 'fauxhai'
 9Running verification for component 'knife-spork'
10Running verification for component 'kitchen-vagrant'
11Running verification for component 'package installation'
12Running verification for component 'openssl'
13....................
14---------------------------------------------
15Verification of component 'chef-provisioning' succeeded.
16Verification of component 'rubocop' succeeded.
17Verification of component 'kitchen-vagrant' succeeded.
18Verification of component 'openssl' succeeded.
19Verification of component 'berkshelf' succeeded.
20Verification of component 'chef-dk' succeeded.
21Verification of component 'fauxhai' succeeded.
22Verification of component 'test-kitchen' succeeded.
23Verification of component 'knife-spork' succeeded.
24Verification of component 'chef-client' succeeded.
25Verification of component 'package installation' succeeded.
26Verification of component 'chefspec' succeeded.

ChefDK bringt seine eigene Version von Ruby. Nachdem man es installiert hat, kann man das Terminal so einstellen, dass es die in ChefDK enthaltenen Ruby Version verwendet:

1eval "$(chef shell-init bash)"

Dabei ist zu beachten, dass dies für jedes neue Terminalfenster durchgeführt werden muss. Wenn man das Terminal schließt, sind diese Einstellungen weg.

Wenn man keine bash Shell verwendet: man kann den "bash" Teil des Befehls durch die Shell ersetzen, die man verwenden möchte.

Um zu überprüfen, ob Ruby korrekt konfiguriert ist, führt man Folgendes aus:

1which ruby

Der Output sollte folgender sein:

1/opt/chefdk/embedded/bin/ruby

Insallieren Sie VirtualBox und Vagrant für lokales Testen

Um Virtual Box zu installieren, geht man auf diese Website und ladet das Paket herunter und installiert es: https://www.virtualbox.org/

Um zu überprüfen, ob alles korrekt installiert wurde, führt man diesen Befehl im Terminal aus:

1vboxmanage --version

Der erwartete Output sollte so aussehen:

15.1.14r112924

Die genaue Version von VirtualBox spielt keine Rolle. Alles ab 4.x.x funktioniert.

Um Vagrant zu installieren, ladet man das neueste Paket auf dieser Website herunter:

https://www.vagrantup.com/downloads.html

Um zu überprüfen, ob alles korrekt installiert wurde, führt man diesen Befehl im Terminal aus:

1vagrant -v

Der erwartete Output sollte so aussehen:

1Vagrant 2.0.1

Die genaue Version von Vagrant ist nicht wirklich wichtig. Alles ab 1.6.x wird funktionieren.

Automatische Einrichtung Ihrer lokalen Umgebung

Wenn man Chef verwendet, ist es auch eine gute Idee, es zu verwenden, um die lokale Workstation einzurichten. Es empfiehlt sich, ein Cookbook zu entwickeln, in dem alle erforderlichen Bibliotheken und Tools aufgelistet sind, die auf einer Workstation installiert werden müssen, damit sie mit Ihrer Infrastruktur kommunizieren können.

Man klont das Repository im Grunde einfach auf die Workstation und führt Chef darauf aus. Alles wird installiert und konfiguriert, ohne dass man etwas manuell machen müssen. Dieses Cookbook enthält auch automatisierte Tests, die prüfen, ob alles wie geplant funktioniert und die Workstation bereit ist.

Dies spart nicht nur Zeit, wenn neue Mitarbeiter dem Team beitreten, es hält auch die Workstation aller Mitarbeiter auf dem neuesten Stand und auf dem selben Niveau.

Wollen Sie mehr über Cookbooks erfahren? Dann lesen Sie hier weiter.

Zurück Unsere Trainings entdecken

Wir sind für Sie da

Sie interessieren sich für unsere Trainings oder haben einfach eine Frage, die beantwortet werden muss? Sie können uns jederzeit kontaktieren! Wir werden unser Bestes tun, um alle Ihre Fragen zu beantworten.

Hier kontaktieren