x

Menü

Chef Workflow: Part 1 - Konfiguration

veröffentlicht in: Configuration Management Datum: 01.12.2017
Miriam Grainer, Junior IT-Consultant

Über die Autorin

Miriam Grainer ist eine Junior IT-Beraterin für Infralovers und Commandemy. Miriam liebt es neue Technologien und Programmiersprachen zu lernen und damit zu experimentieren. Derzeit studiert sie Informationsmanagement an der FH Joanneum Graz. Twitter LinkedIn

Alle Artikel von diesem Autor sehen

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 grundelegenden 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:

---
driver:
  name: vagrant

provisioner:
  name: chef_zero

platforms:
  - name: ubuntu-14.04

suites:
  - name: default
    run_list:
      - recipe[my_cookbook::default]
    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:

  describe package('ntp') do
  it { should be_installed }
end
describe service('ntp') do
  it { should be_running }
end
describe file('/etc/ntp.conf') do
  it { should contain '0.pool.ntp.org' }
  it { should contain '1.pool.ntp.org' }
end

ChefSpec

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

require 'chefspec'

describe 'example::default' do
  let(:chef_run) { ChefSpec::SoloRunner.converge(described_recipe) }

  it 'installs foo' do
    expect(chef_run).to install_package('foo')
  end
end

Vorbereitungen für Chef

ChefDK installieren

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

https://downloads.chef.io/chef-dk/

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

$ chef verify

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

Running verification for component 'berkshelf'
Running verification for component 'test-kitchen'
Running verification for component 'chef-client'
Running verification for component 'chef-dk'
Running verification for component 'chef-provisioning'
Running verification for component 'chefspec'
Running verification for component 'rubocop'
Running verification for component 'fauxhai'
Running verification for component 'knife-spork'
Running verification for component 'kitchen-vagrant'
Running verification for component 'package installation'
Running verification for component 'openssl'
....................
---------------------------------------------
Verification of component 'chef-provisioning' succeeded.
Verification of component 'rubocop' succeeded.
Verification of component 'kitchen-vagrant' succeeded.
Verification of component 'openssl' succeeded.
Verification of component 'berkshelf' succeeded.
Verification of component 'chef-dk' succeeded.
Verification of component 'fauxhai' succeeded.
Verification of component 'test-kitchen' succeeded.
Verification of component 'knife-spork' succeeded.
Verification of component 'chef-client' succeeded.
Verification of component 'package installation' succeeded.
Verification 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:

eval "$(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:

which ruby

Der Output sollte folgender sein:

/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:

vboxmanage --version

Der erwartete Output sollte so aussehen:

5.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:

vagrant -v

Der erwartete Output sollte so aussehen:

Vagrant 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.