Master of puppets: Εγκατάσταση και διαμόρφωση του συστήματος διαχείρισης απομακρυσμένης διαμόρφωσης Puppet. Master of puppets: Εγκατάσταση και διαμόρφωση του συστήματος διαχείρισης απομακρυσμένης διαμόρφωσης Puppet Εγκατάσταση μαριονέτας

Για να χρησιμοποιήσετε το Puppet πιο αποτελεσματικά, πρέπει να κατανοήσετε πώς δημιουργούνται οι ενότητες και τα μανιφέστα. Αυτό το σεμινάριο θα σας καθοδηγήσει στον τρόπο λειτουργίας αυτών των στοιχείων Puppet, ρυθμίζοντας μια στοίβα LAMP σε έναν διακομιστή Ubuntu 14.04.

Απαιτήσεις

  • Εγκατάσταση Puppet (κύριος και πράκτορας). Περισσότερα για αυτό -.
  • Η δυνατότητα δημιουργίας τουλάχιστον ενός εικονικού διακομιστή Ubuntu 14.04 για την εξυπηρέτηση του κόμβου Puppet agent.

Βασικά στοιχεία κώδικα μαριονέτας

Πόροι

Ο κώδικας μαριονέτας αποτελείται κυρίως από πόρους. Ένας πόρος είναι ένα κομμάτι κώδικα που περιγράφει την κατάσταση του συστήματος και καθορίζει τις αλλαγές που χρειάζεται. Για παράδειγμα:

χρήστης("mitchell":
εξασφάλιση => παρόν,
uid => "1000",
gid => "1000",
shell => "/bin/bash",
home => "/home/mitchell"
}

Η δήλωση πόρων έχει την ακόλουθη μορφή:

resource_type("resource_name"
χαρακτηριστικό => τιμή
...
}

Για να δείτε όλους τους τύπους πόρων Puppet, εκδώστε την εντολή:

πόρος μαριονέτας -- τύποι

Θα μάθετε περισσότερα για τους τύπους πόρων σε αυτόν τον οδηγό.

Μανιφέστα

Ένα μανιφέστο είναι ένα σενάριο ενορχήστρωσης. Τα προγράμματα μαριονέτας με επέκταση .pp ονομάζονται μανιφέστα. Το προεπιλεγμένο μανιφέστο Puppet είναι /etc/puppet/manifests/site.pp.

Τάξεις

Όπως σε κάθε κανονική γλώσσα προγραμματισμού, οι τάξεις είναι υπεύθυνες για την οργάνωση και την επαναχρησιμοποίηση τμημάτων της ενορχήστρωσης.

Μέσα σε έναν ορισμό κλάσης υπάρχει ένα μπλοκ κώδικα που περιγράφει πώς λειτουργεί η κλάση. Μόλις ορίσετε μια κλάση, μπορείτε να τη χρησιμοποιήσετε σε δηλώσεις.

Ο ορισμός της κλάσης έχει την ακόλουθη μορφή:

class example_class(
...
κώδικας
...
}

Αυτός ο κώδικας ορίζει την κλάση example_class. Ο κωδικός Puppet θα είναι σε σγουρά τιράντες.

Μια δήλωση κλάσης είναι η θέση στον κώδικα όπου καλείται μια συγκεκριμένη κλάση. Με μια δήλωση κλάσης, το Puppet επεξεργάζεται τον κώδικά του.

Η δήλωση κλάσης μπορεί να είναι συνηθισμένη και ανά τύπο πόρου.

Μια κανονική δήλωση κλάσης προστίθεται στον κώδικα χρησιμοποιώντας τη λέξη-κλειδί συμπερίληψη.

περιλαμβάνει example_class

Όταν δηλώνεται ως τύπος πόρου, η κλάση δηλώνεται σε μορφή πόρου:

class ("example_class":)

Αυτή η δήλωση σάς επιτρέπει να προσθέσετε παραμέτρους κλάσης στον κώδικά σας που παρακάμπτουν τις προεπιλεγμένες τιμές των χαρακτηριστικών κλάσης. Για παράδειγμα:

κόμβος "host2" (
class ("apache": ) # use apache module
apache::vhost ( "example.com": # ορίστε τον πόρο vhost
port => "80",
docroot => "/var/www/html"
}
}

Ενότητες

Μια ενότητα είναι μια ομάδα εκδηλώσεων και άλλων αρχείων οργανωμένων με προκαθορισμένο τρόπο που καθιστά εύκολη την κοινή χρήση και την επαναχρησιμοποίηση μεμονωμένων τμημάτων της ενορχήστρωσης. Οι ενότητες βοηθούν στην οργάνωση του κώδικα Puppet επειδή μπορούν να χρησιμοποιηθούν για τον διαχωρισμό του κώδικα σε πολλαπλές δηλώσεις.

Οι μονάδες Puppet αποθηκεύονται στον κατάλογο /etc/puppet/modules.

Συγγραφή μανιφέστου

Μπορείτε να εξασκηθείτε στη σύνταξη μανιφέστων, λειτουργικών μονάδων και κλάσεων Puppet χρησιμοποιώντας το παράδειγμα εγκατάστασης μιας στοίβας LAMP σε έναν διακομιστή Ubuntu (το αποτέλεσμα θα είναι ).

Έτσι, για να ενορχηστρώσετε έναν διακομιστή Ubuntu 14.04 και να εγκαταστήσετε μια στοίβα LAMP σε αυτόν, χρειάζεστε πόρους για τις ακόλουθες ενέργειες:

  • εγκατάσταση του πακέτου apache2.
  • εκκίνηση της υπηρεσίας apache2.
  • εγκατάσταση πακέτου Διακομιστής MySQL, mysql-server.
  • εκκίνηση της υπηρεσίας mysql.
  • εγκατάσταση του πακέτου php5
  • δημιουργία ενός δοκιμαστικού σεναρίου PHP, info.php.
  • ενημέρωση του ευρετηρίου apt πριν από την εγκατάσταση κάθε πακέτου.

Παρακάτω θα βρείτε τρία παραδείγματα κώδικα Puppet που μπορούν να χρησιμοποιηθούν για να επιτευχθεί μια τέτοια ρύθμιση στοίβας LAMP.

Το πρώτο παράδειγμα θα σας διδάξει πώς να γράφετε βασικές δηλώσεις σε ένα αρχείο. Το δεύτερο παράδειγμα θα σας βοηθήσει να συναρμολογήσετε και να χρησιμοποιήσετε μια κλάση και μια λειτουργική μονάδα που βασίζεται σε προηγουμένως γραμμένες δηλώσεις. Το τρίτο παράδειγμα θα σας δείξει πώς να χρησιμοποιήσετε προ-χτισμένες δημόσιες μονάδες για να εγκαταστήσετε μια στοίβα LAMP.

Σημείωση: Για τη δοκιμή είναι καλύτερο να χρησιμοποιήσετε έναν νέο εικονικό διακομιστή.

Παράδειγμα 1: Εγκατάσταση LAMP με ένα μανιφέστο

Το μανιφέστο Puppet μπορεί να γραφτεί στον κόμβο πράκτορα και στη συνέχεια να εκτελεστεί χρησιμοποιώντας την εντολή εφαρμογής μαριονέτας (δεν χρειάζεται να έχετε ρύθμιση master και agent για να το κάνετε αυτό).

Σε αυτήν την ενότητα, θα μάθετε να γράφετε δηλώσεις που θα χρησιμοποιούν αυτούς τους τύπους δηλώσεων πόρων:

  • exec: Εκτέλεση εντολών.
  • πακέτο: εγκατάσταση πακέτων.
  • υπηρεσία: διαχείριση υπηρεσιών.
  • αρχείο: διαχείριση αρχείων.

Δημιουργία μανιφέστου

Δημιουργήστε μια νέα δήλωση:

sudo vi /etc/puppet/manifests/lamp.pp

Προσθέστε τον ακόλουθο κώδικα σε αυτό για να δηλώσετε τους απαιτούμενους πόρους.

# εκτελέστε την εντολή "apt-get update".
exec("apt-update": # resource exec "apt-update"
command => "/usr/bin/apt-get update" # εντολή που θα εκτελεστεί αυτός ο πόρος
}
# εγκαταστήστε το πακέτο apache2
πακέτο ("apache2":
απαιτείται => Exec["apt-update"], # request "apt-update" πριν από την εγκατάσταση του πακέτου
εξασφαλίστε => εγκατεστημένο,
}
# εκκινήστε την υπηρεσία apache2
υπηρεσία ("apache2":
εξασφάλιση => τρέξιμο,
}
# εγκατάσταση του διακομιστή mysql
πακέτο ("mysql-server":
Απαιτείται => Exec["apt-update"], # request "apt-update" με επανεγκατάσταση
εξασφαλίστε => εγκατεστημένο,
}
# εκκινήστε την υπηρεσία mysql
υπηρεσία ("mysql":
εξασφάλιση => τρέξιμο,
}
# εγκαταστήστε το πακέτο php5
πακέτο ("php5":
Απαιτείται => Exec["apt-update"], # request "apt-update" πριν από την εγκατάσταση
εξασφαλίστε => εγκατεστημένο,
}
# ξεκινήστε την υπηρεσία info.php
file("/var/www/html/info.php":
εξασφαλίστε => αρχείο,
περιεχόμενο => "", # κώδικας phpinfo
Απαιτείται => Πακέτο["apache2"], # αίτημα για πακέτο "apache2"
}

Εφαρμογή δήλωσης

Για να χρησιμοποιήσετε τη νέα δήλωση, πληκτρολογήστε την εντολή:

sudo μαριονέτα εφαρμογή --δοκιμή

Θα εμφανίσει ένα ογκώδες αποτέλεσμα που εμφανίζει όλες τις αλλαγές στην κατάσταση του περιβάλλοντος. Εάν δεν υπάρχουν σφάλματα στην έξοδο, θα πρέπει να μπορείτε να ανοίξετε την εξωτερική σας διεύθυνση IP ή το όνομα τομέα στο πρόγραμμα περιήγησής σας. Στην οθόνη θα εμφανιστεί μια δοκιμαστική δοκιμή. σελίδα PHPμε πληροφορίες για τη στοίβα. Αυτό σημαίνει ότι το Apache και η PHP λειτουργούν.

Τώρα η στοίβα LAMP είναι εγκατεστημένη στον διακομιστή χρησιμοποιώντας το Puppet.

Αυτό είναι ένα αρκετά απλό μανιφέστο αφού μπορεί να εκτελεστεί σε έναν πράκτορα. Εάν δεν έχετε ένα Puppet Master, άλλοι κόμβοι πρακτόρων δεν θα μπορούν να χρησιμοποιήσουν αυτό το μανιφέστο.

Ο κύριος διακομιστής Puppet ελέγχει για αλλαγές κατάστασης διακομιστή κάθε 30 λεπτά.

Παράδειγμα 2: Εγκατάσταση στοίβας LAMP χρησιμοποιώντας μια μονάδα

Τώρα δοκιμάστε να δημιουργήσετε μια απλή λειτουργική μονάδα που βασίζεται στο μανιφέστο LAMP που γράψατε στην προηγούμενη ενότητα.

Για να δημιουργήσετε μια λειτουργική μονάδα, δημιουργήστε έναν νέο κατάλογο στον κατάλογο λειτουργιών (το όνομά της πρέπει να ταιριάζει με το όνομα της λειτουργικής μονάδας). Αυτός ο κατάλογος πρέπει να περιέχει έναν κατάλογο manifests και ένα αρχείο init.pp. Το αρχείο init.pp καθορίζει την κλάση Puppet (το όνομά της πρέπει επίσης να ταιριάζει με το όνομα της ενότητας).

Δημιουργία Ενότητας

Μεταβείτε στον κύριο διακομιστή Puppet και δημιουργήστε μια δομή καταλόγου για τη λειτουργική μονάδα:

cd /etc/puppet/modules
sudo mkdir -p λυχνία/εκδηλώσεις

Δημιουργήστε και ανοίξτε το αρχείο init.pp στο πρόγραμμα επεξεργασίας:

sudo vi lamp/manifests/init.pp

Εισαγάγετε την κλάση λάμπας στο αρχείο:

λάμπα τάξης (
}

Αντιγράψτε τα περιεχόμενα της δήλωσης από την ενότητα 1 και επικολλήστε την στο μπλοκ κλάσης λυχνίας. Τώρα έχετε έναν ορισμό κατηγορίας λαμπτήρων. Άλλα μανιφέστα θα μπορούν να χρησιμοποιούν αυτήν την κλάση ως λειτουργική μονάδα.

Αποθηκεύστε και κλείστε το αρχείο.

Χρήση μιας ενότητας στο κύριο μανιφέστο

Τώρα μπορείτε να διαμορφώσετε το κύριο μανιφέστο και να χρησιμοποιήσετε τη μονάδα λυχνίας για να εγκαταστήσετε τη στοίβα LAMP στον διακομιστή.

Στον κύριο διακομιστή Puppet, επεξεργαστείτε το ακόλουθο αρχείο:

sudo vi /etc/puppet/manifests/site.pp

Πιθανότατα στις αυτή τη στιγμήτο αρχείο είναι κενό. Προσθέστε τις ακόλουθες γραμμές σε αυτό:

προεπιλογή κόμβου ( )
κόμβος "λάμπα-1" (
}

Σημείωση: Αντικαταστήστε το lamp-1 με το όνομα κεντρικού υπολογιστή του Puppet agent στο οποίο θα εγκαταστήσετε τη στοίβα.

Το μπλοκ κόμβου σάς επιτρέπει να καθορίσετε κώδικα Puppet που θα ισχύει μόνο σε ορισμένους κόμβους.

Το προεπιλεγμένο μπλοκ ισχύει για όλους τους κόμβους πράκτορα που δεν έχουν μεμονωμένο μπλοκ (αφήστε το κενό). Το μπλοκ λαμπτήρα-1 θα εφαρμοστεί στον κόμβο παράγοντα λαμπτήρα-1.

Προσθέστε την ακόλουθη γραμμή σε αυτό το μπλοκ, το οποίο χρησιμοποιεί τη μονάδα λυχνίας:

Αποθηκεύστε και κλείστε το αρχείο.

Τώρα ο κόμβος Puppet agent θα μπορεί να κατεβάσει ρυθμίσεις από τον κύριο διακομιστή και να εγκαταστήσει τη στοίβα LAMP. Εάν θέλετε να κάνετε αλλαγές αυτή τη στιγμή, εκτελέστε την εντολή στον πράκτορα:

sudo puppet agent --test

Οι ενότητες είναι ο πιο βολικός τρόπος για να επαναχρησιμοποιήσετε τον κώδικα Puppet. Επιπλέον, οι μονάδες σάς βοηθούν να οργανώσετε λογικά τον κώδικά σας.

Παράδειγμα 3: Εγκατάσταση LAMP χρησιμοποιώντας δημόσιες μονάδες

Η μονάδα MySQL χρησιμοποιείται με παρόμοιο τρόπο. Προσθέστε τις ακόλουθες γραμμές στο μπλοκ κόμβων:

class("mysql::server":
root_password => "password",
}

Μπορείτε επίσης να μεταβιβάσετε παραμέτρους μονάδας MySQL.

Προσθέστε έναν πόρο που θα αντιγράψει το info.php στην επιθυμητή τοποθεσία. Χρησιμοποιήστε την παράμετρο πηγής. Προσθέστε τις ακόλουθες γραμμές στο μπλοκ κόμβων:

file("info.php": # όνομα αρχείου πόρου
διαδρομή => "/var/www/html/info.php", # διαδρομή προορισμού
εξασφαλίστε => αρχείο,
Απαιτείται => Κλάση ["apache"], # κλάση apache για χρήση
πηγή => "puppet:///modules/apache/info.php", # τοποθεσία για να αντιγράψετε το αρχείο
}

Αυτή η δήλωση κλάσης χρησιμοποιεί την παράμετρο πηγή αντί για περιεχόμενο. Αυτή η επιλογή όχι μόνο χρησιμοποιεί τα περιεχόμενα του αρχείου, αλλά και το αντιγράφει.

Το Puppet θα αντιγράψει το αρχείο puppet:///modules/apache/info.php στο /etc/puppet/modules/apache/files/info.php.

Αποθηκεύστε και κλείστε το αρχείο.

Δημιουργήστε ένα αρχείο info.php.

sudo sh -c "ηχώ""> /etc/puppet/modules/apache/files/info.php"

Τώρα ο κόμβος Puppet agent θα μπορεί να κατεβάσει ρυθμίσεις από τον κύριο διακομιστή και να εγκαταστήσει τη στοίβα LAMP. Εάν θέλετε να κάνετε αλλαγές στο περιβάλλον του πράκτορα αυτήν τη στιγμή, εκτελέστε την εντολή σε αυτόν τον κόμβο:

sudo puppet agent --test

Αυτή η εντολή θα κατεβάσει όλες τις ενημερώσεις για τον τρέχοντα κόμβο και θα εγκαταστήσει τη στοίβα σε αυτόν. Για να βεβαιωθείτε ότι το Apache και η PHP λειτουργούν, ανοίξτε τη διεύθυνση IP ή τον τομέα του κόμβου σε ένα πρόγραμμα περιήγησης:

http://lamp_1_public_IP/info.php

συμπέρασμα

Τώρα έχετε βασικές γνώσεις για την εργασία με ενότητες και μανιφέστα Puppet. Δοκιμάστε να δημιουργήσετε ένα απλό μανιφέστο και μια ενότητα μόνοι σας.

Το Puppet είναι εξαιρετικό για τη διαχείριση αρχείων διαμόρφωσης εφαρμογών.

Ετικέτες: ,
Λίγο ποίηση.Φαίνεται ότι αυτό το άρθρο θα πρέπει να είναι το σημείο εκκίνησης για ολόκληρη τη σειρά, αλλά το κοινό-στόχος είναι ακόμα πιο έμπειροι χρήστες των προϊόντων Open Source Puppet Labs που δεν είναι ικανοποιημένοι με τις μεμονωμένες, κακώς ενσωματωμένες ενότητες με το Puppet Forge. Όπως σε κάθε περίπτωση «βιβλιοθήκη εναντίον πλαισίου», το τίμημα που πρέπει να πληρώσετε είναι να ακολουθήσετε την κοσμοθεωρία του συγγραφέα της ολοκληρωμένης λύσης.

Λίγα λόγια για το πώς λειτουργεί το Puppet

Το Puppet είναι κυρίως μια συγκεκριμένη γλώσσα για τον δηλωτικό προσδιορισμό της τελικής κατάστασης του συστήματος. Για σύγκριση, το GNU Makefile είναι εξαιρετικά κατάλληλο, όπου, εκτός από την άμεση περιγραφή των εξαρτήσεων, είναι δυνατό να γίνουμε παράξενοι στο έπακρο.

Η αφαίρεση της κούκλας είναι κάπως έτσι ( σπάζοντας μοτίβα - ξεχάστε όλα όσα ξέρατε για τους όρους προγραμματισμού!).

  • Κόμβοςείναι ένα σύνολο διαμορφώσεων για ένα συγκεκριμένο σύστημα στόχου. Στην πραγματικότητα, αυτή είναι μια ειδική περίπτωση μιας τάξης.
  • Τάξηείναι ένα σύνολο δηλωτικής λογικής που περιλαμβάνεται στη διαμόρφωση του κόμβου ή σε άλλες κλάσεις. Η κλάση δεν έχει ούτε στιγμιότυπα ούτε μεθόδους, αλλά έχει παραμέτρους και μεταβλητές που ορίζονται μέσα στη λογική. Στην πραγματικότητα, είναι μάλλον μια διαδικασία που μπορεί να κληρονομήσει μια άλλη διαδικασία προσθέτοντας απλώς κώδικα και έχοντας ένα όχι και τόσο κοινό εύρος μεταβλητών.
  • Τύπος- αλλά αυτό μοιάζει περισσότερο με μια κλασική τάξη - υποθέτει περιπτώσεις με όνομα και σίγουρα δεδομένων παραμέτρων, αλλά τίποτα περισσότερο. Μια συγκεκριμένη υλοποίηση ενός τύπου μπορεί να γραφτεί ως σενάριο Puppet μέσω του define , το οποίο δημιουργεί στιγμιότυπα άλλων τύπων ή ως επέκταση Ruby με φανταχτερά.
  • Πόρος- αυτές είναι στην πραγματικότητα ονομασμένες περιπτώσεις Τύπου. Κάθε όνομα πόρου είναι μοναδικό σε έναν συγκεκριμένο τύπο στη διαμόρφωση του κόμβου (καταλόγου).
  • Μεταβλητές- Λοιπόν, εν ολίγοις, αυτά είναι σταθερές... Πριν το Puppet 4, τα πράγματα ήταν ακόμα χειρότερα με το εύρος τους. Τώρα είναι επαρκές: για χρήση εκτός της τοποθεσίας ορισμού, πρέπει να καθοριστεί ένα πλήρως αναγνωρισμένο αναγνωριστικό, εκτός από την περίπτωση κληρονομικότητας κλάσης.
Το Puppet μπορεί να χρησιμοποιηθεί για τοπική ανάπτυξη χωρίς δίκτυο ή σχετική υποδομή. Αυτό μπορεί να χρησιμοποιηθεί για τη δημιουργία εικόνων κοντέινερ. Υπάρχει ακόμη και ένα ολόκληρο κίνημα που υποστηρίζει την εγκατάλειψη ενός κεντρικού διακομιστή.

Με έναν ιδεολογικά σωστό τρόπο, η υποδομή Puppet αποτελείται από έναν πράκτορα - μια προνομιακή υπηρεσία στο σύστημα προορισμού - και έναν διακομιστή που διανέμει πολύτιμες οδηγίες με τη μορφή καταλόγων δηλωτικών πόρων κατόπιν αιτήματος από πράκτορες. Η ασφάλεια υλοποιείται σε επίπεδο υποδομής ιδιωτικού δημόσιου κλειδιού (Χ.509). Με απλά λόγια, οι ίδιοι μηχανισμοί όπως στο HTTPS, αλλά με τη δική του CA και υποχρεωτική επαλήθευση πιστοποιητικό πελάτη.

Σε μια απλοποιημένη μορφή, η διαδικασία ανάπτυξης μοιάζει κάπως έτσι:

  1. Επεξεργασία μέσω TLS και X.509 (εγκατάσταση σύνδεσης, ενημέρωση CRL, έλεγχος περιορισμών πιστοποιητικού κ.λπ.)
  2. Ο πράκτορας λαμβάνει γεννήτριες γεγονότων από τον διακομιστή με προσωρινή αποθήκευση και όλα τα πράγματα (ακριβέστερα, τα πάντα αντλούνται από τους φακέλους lib/ στις μονάδες). Δεν είναι δύσκολο να προσθέσετε το δικό σας σενάριο Ruby για τη συλλογή των πληροφοριών που σας ενδιαφέρουν.
  3. Ο πράκτορας συλλέγει στοιχεία για το σύστημα προορισμού και τα στέλνει στον διακομιστή. Όλα τα γεγονότα μπορούν εύκολα να προβληθούν χειροκίνητα μέσω της κλήσης μαριονέτας. Αυτά τα γεγονότα είναι διαθέσιμα ως καθολικές μεταβλητές.
  4. Ο διακομιστής συντάσσει έναν κατάλογο πόρων και τον στέλνει στον πράκτορα. Κάτω από αυτό κρύβεται ένα ολόκληρο στρώμα διαφορετικών εννοιών.
  5. Ο πράκτορας τραβά όλα τα απαραίτητα από τον διακομιστή και φέρνει το σύστημα στην καθορισμένη φόρμα. Ο ίδιος ο πράκτορας δεν ξέρει τι να κάνει με τους πόρους· βασίζεται στην υλοποίηση παρόχων (η σημασιολογική μετάφραση θα είναι «εφαρμογής», όχι προμηθευτής) συγκεκριμένων τύπων πόρων. Ορισμένοι πάροχοι είναι τυπικοί και περιλαμβάνονται στα πακέτα Puppet, ενώ τα υπόλοιπα αφαιρούνται από τις ενότητες.
Για να απολαύσετε όλες τις απολαύσεις, υπάρχουν επιπλέον ψωμάκια με τη μορφή:
  • Μονάδα μέτρησης- μια συλλογή από δηλωτικά σενάρια Puppet, επεκτάσεις Ruby για Puppet, αρχεία, πρότυπα αρχείων, δεδομένα Hiera και πολλά άλλα. Ένας πιο σωστός όρος θα ήταν «πακέτο».
  • περιβάλλον- ένα σύνολο σεναρίων, λειτουργικών μονάδων και δεδομένων Hiera. Καθώς η υποδομή έγινε πιο περίπλοκη, κατέστη αναπόφευκτα απαραίτητο να διαιρεθεί η διαμόρφωση περισσότερο από την τυπική διαίρεση ανά κόμβους. Βασικά, αυτό απαιτείται για πιλοτικές καινοτομίες και κοινόχρηστο έλεγχο πρόσβασης (όταν δεν έχουν όλοι οι διαχειριστές πρόσβαση σε όλους τους κόμβους της υποδομής πληροφορικής).
  • Ιερά- ιεραρχική βάση δεδομένων. Αυτή η σύνθεση μπορεί να είναι πολύ εκφοβιστική. Αυτός είναι πιθανώς ο λόγος που άλλαξε στην τεκμηρίωση των μεταγενέστερων εκδόσεων. Στην πραγματικότητα, αυτός είναι ένας εξαιρετικά απλός και βολικός μηχανισμός εξαγωγής ρυθμίσεων από αρχεία YAML ή JSON. Η ιεραρχία είναι η δυνατότητα καθορισμού της σειράς ανάγνωσης πολλαπλών αρχείων διαμόρφωσης - π.χ. ιεραρχία/προτεραιότητα αυτών των αρχείων.
    • Εκτός από την ανάκτηση δεδομένων με κλήση συνάρτησης, το Puppet τραβάει τις προεπιλεγμένες παραμέτρους κλάσης, που είναι το κύριο χαρακτηριστικό.
    • Φυσικά, το Hiera υποστηρίζει παρεμβολή γεγονότων και ακόμη και κλήση ειδικών συναρτήσεων.
    • Στο Puppet 4.3, εφαρμόσαμε ξανά την ίδια λειτουργικότητα για να υποστηρίξουμε όχι μόνο την καθολική βάση δεδομένων, αλλά και την τοπική για το Environment and Module, αν και ο συγγραφέας έχει ήδη βρει αρκετά προβλήματα στην υλοποίησή τους (PUP-5983, PUP-5952 και PUP -5899), τα οποία επιδιορθώθηκαν άμεσα από τα Puppet Labs.
    • Υποστηρίζονται πολλές στρατηγικές για την εξαγωγή τιμών από όλα τα αρχεία στην ιεραρχία:
      • πρώτο - επιστρέφεται η πρώτη τιμή που βρέθηκε κατά προτεραιότητα
      • μοναδικό - συλλέγει όλες τις τιμές σε έναν μονοδιάστατο πίνακα και αφαιρεί τα διπλότυπα
      • hash - συνδυάζει όλα τα YAML Hash που βρέθηκαν. Τα διπλά κλειδιά επιλέγονται κατά προτεραιότητα.
      • Το deep είναι ουσιαστικά μια αναδρομική έκδοση του hash
    • Η ομορφιά είναι ότι η στρατηγική δειγματοληψίας μπορεί να καθοριστεί τόσο κατά την κλήση της συνάρτησης lookup(), επειδή και σε οποιοδήποτε αρχείο ιεραρχίας μέσω του ειδικού κλειδιού lookup_options, το οποίο χρησιμοποιείται ενεργά στη μονάδα cfnetwork.
  • PuppetDB- ουσιαστικά ένα επίπεδο επιχειρηματικής λογικής γύρω από μια σχεσιακή βάση δεδομένων (PostgreSQL), η οποία σας επιτρέπει να αποθηκεύετε αναφορές για γεγονότα και αναπτύξεις που έχουν γίνει και να εξάγετε πόρους για μετέπειτα εισαγωγή σε καταλόγους σε άλλους κόμβους ή επιλογές μέσω ειδικές λειτουργίες. Υπάρχει επίσης μια διεπαφή ιστού με τη μορφή Puppet Dashboard.
  • Χ.509 ΠΚΙ- την ήδη αναφερθείσα υποδομή πιστοποιητικών, η οποία είναι εξαιρετικά βολική στη χρήση για άλλες υπηρεσίες χωρίς την ανάγκη διαχείρισης ξεχωριστής υποδομής.
  • MCcollective- φαίνεται να είναι χρήσιμο για την εκκίνηση εργασιών βάσει συμβάντων σε μια φάρμα διακομιστών, αλλά ο συγγραφέας έχει κάποια δυσπιστία στην ασφάλεια μιας συγκεκριμένης λύσης.
  • Puppet Forge- μια ανοιχτή πλατφόρμα για δημοσίευση και λήψη Ενοτήτων.
  • κάποια άλλα χαρακτηριστικά με τη μορφή χειριστηρίων εξωτερικές συσκευέςτύπος εξοπλισμού Cisco και ανάπτυξη σε γυμνό μέταλλο, αλλά αυτό είναι μια διαφορετική ιστορία

Σημειώσεις για την ασφάλεια και την προσβασιμότητα

Πρέπει να καταλάβετε ότι ο Puppet Server γίνεται ένα ευάλωτο σημείο ολόκληρης της υποδομής πληροφορικής, επειδή... καθορίζει την τελική διαμόρφωση όλων των συστημάτων. Σε ειδικές περιπτώσεις, είναι λογικό να γίνει διαχωρισμός - ξεχωριστός διακομιστής για κρίσιμα στοιχεία υποδομής με εξαιρετικά περιορισμένη πρόσβασηκαι χειροκίνητη ενημέρωση και το δεύτερο για όλα τα άλλα.

Η διαθεσιμότητα του Puppet Server καθορίζει τη δυνατότητα διαχείρισης ολόκληρης της υποδομής. Είναι λογικό να φιλοξενείτε τον Puppet Server σε μια εικονική μηχανή σε ένα πιο αξιόπιστο και γρήγορα ανακτήσιμο cloud τρίτων από τις δικές σας δυνατότητες. Ή θα πρέπει να εγκαταστήσετε πολλούς διακομιστές.

Σε κάθε περίπτωση, δεν θα πρέπει να εγκαταστήσετε άλλες υπηρεσίες στο σύστημα όπου θα αναπτυχθεί ο Puppet Server με κουδούνια και σφυρίχτρες. Η εικονικοποίηση και το κοντέινερ μπορούν να σας βοηθήσουν.

Multi-master (πολλοί ξεχωριστοί διακομιστές Puppet)

  • Σε αυτήν την περίπτωση, μόνο ένας διακομιστής λειτουργεί ως CA (Certificate Authority) - η μη διαθεσιμότητα του σημαίνει ότι είναι αδύνατη η προσθήκη νέων κόμβων.
    • Το Puppet σάς επιτρέπει να χρησιμοποιήσετε μια υποδομή X.509 τρίτου κατασκευαστή, εάν η ενσωματωμένη δεν είναι ικανοποιητική.
  • Ολόκληρη η διαμόρφωση (Περιβάλλον) πρέπει να αποθηκευτεί σε ένα σύστημα ελέγχου έκδοσης και να αναπτυχθεί σε κάθε διακομιστή ταυτόχρονα.
  • Το μόνο κοινό στοιχείο είναι η βάση δεδομένων PostgreSQL, η οργάνωση της υψηλής διαθεσιμότητας της οποίας ξεφεύγει από το πεδίο εφαρμογής αυτού του άρθρου.
  • Η λειτουργική μονάδα cfpuppetserver υποστηρίζει εγκαταστάσεις ως πρωτεύον (με CA) και ως δευτερεύον διακομιστή.

Τι σημαντικό έχει αλλάξει από τις παλαιότερες εκδόσεις

Ο κατασκευαστής έχει μια πλήρη περιγραφή.
  • Όλες οι υπηρεσίες έχουν μεταφερθεί σε JVM, JRuby και Jetty. Παρά τα προφανή πλεονεκτήματα της ενσωμάτωσης, υπάρχουν και μειονεκτήματα όσον αφορά την κατανάλωση μνήμης.
  • Οι συναρτήσεις λάμδα έχουν προστεθεί για την επεξεργασία συλλογών - τώρα δεν χρειάζεται να κόψετε πατερίτσες σε Ruby ή να διαστρεβλώσετε μέσω του create_resources()
  • Εμφανίστηκε ένα εργαλείο για την επεξεργασία προτύπων EPP - ουσιαστικά το ίδιο ERB, αλλά με Puppet DSL αντί για Ruby,
  • Η προεπιλεγμένη δομή καταλόγου των αρχείων διαμόρφωσης έχει αλλάξει σημαντικά
  • Προστέθηκε υποστήριξη για Παρόχους Δεδομένων για Περιβάλλοντα και Ενότητες (δεν απαιτούνται πλέον οι εισβολές).
  • Υποβιβάζοντας τον ρόλο της παγκόσμιας Ιεράς. Νέα και σχετική εντολή είναι το puppet lookup.

Εγκατάσταση

Αυτή η διαδικασία είναι αρκετά πρωτόγονη, αλλά απαιτεί να ακολουθήσετε μια συγκεκριμένη σειρά βημάτων. Δεδομένου ότι το να το κάνετε αυτό με το χέρι είναι μια άχαρη εργασία, ο συγγραφέας θα σας διδάξει κάτι κακό, δηλαδή τη λήψη ακατανόητων σεναρίων από το Διαδίκτυο και την εκτέλεση τους ως root στο σύστημά σας.

Τα τρία κύρια στοιχεία διακομιστή είναι ο ίδιος ο Puppet Server, το PuppetDB και το PostgreSQL. Μπορούν όλα να συσσωρευτούν σε έναν κόμβο ή να χωριστούν σε δύο ή τρία συστήματα. Το Puppet Server και το Puppet DB μπορούν να εκτελεστούν πολλές φορές, αλλά το PostgeSQL είναι ένα μόνο σημείο αποτυχίας. Υπάρχουν διάφορες προσεγγίσεις για την αναπαραγωγή και τη ομαδοποίηση PostgeSQL. Μια βολική προσέγγιση στην περίπτωση των κύριων και δευτερευόντων διακομιστών θα ήταν το Master + Read-Only Slave, το οποίο υποστηρίζεται στο ίδιο το PuppetDB ως κύριος και μόνο για ανάγνωση κόμβος βάσης δεδομένων, αλλά αυτοματοποιεί τέτοιους μια εγκατάσταση απαιτεί χρόνο και επομένως δεν είναι ακόμη διαθέσιμη στη μονάδα cfpuppetserver.

Η ίδια η διαμόρφωση μπορεί απλά να αποθηκευτεί τουλάχιστον στο σύστημα αρχείωνμαζί με τον Puppet Server, αλλά είναι σαν να γράφετε σενάρια σε έναν web server παραγωγής. Η καταλληλότερη λύση είναι το git repository. Το βοηθητικό πρόγραμμα r10k μπορεί να τραβήξει όλους τους κλάδους του αποθετηρίου και να τους αναπτύξει στον Puppet Server ως ξεχωριστά περιβάλλοντα. Το r10k είναι πολύ κακό στο να τραβάει εξαρτήσεις, επομένως χρησιμοποιείται από πάνω το βιβλιοθηκονόμο-μαριονέτα. Αξίζει να σημειωθεί αμέσως ότι το κύριο κανονικό Περιβάλλον Μαριονέτας είναι η «παραγωγή». Επομένως, το αποθετήριο ρυθμίσεων θα πρέπει να χρησιμοποιεί έναν κλάδο που ονομάζεται "παραγωγή" και όχι "κύριος".

Απαιτήσεις συστήματος

Το υλικό περιγράφεται από τον ίδιο τον κατασκευαστή. Η λειτουργική μονάδα cfpuppetserver υποστηρίζει προς το παρόν μόνο το Debian Jessie+ και το Ubuntu Trusty+.

Διαμόρφωση στο Git

Για το ίδιο το r10k, η τοποθεσία του αποθετηρίου δεν έχει μεγάλη σημασία - το κύριο πράγμα είναι η διαθεσιμότητά του. Για παράδειγμα, για λόγους δοκιμής, το αποθετήριο θα μπορούσε να φιλοξενηθεί στο ίδιο σύστημα και να προσπελαστεί μέσω file:// . Ένα καλό μέρος για να ξεκινήσετε είναι το παράδειγμα διαμόρφωσης codingfuture/puppet-exampleenv.
  1. Κλωνοποίηση του αποθετηρίου: git clone https://github.com/codingfuture/puppet-exampleenv my-puppet-conf && cd my-puppet-conf
  2. Εγκαθιστώ Γενικές Ρυθμίσειςπρόσβαση διαχειριστή χρησιμοποιώντας συμβουλές στα σχόλια:
    • $EDITOR data/common.yaml
  3. Ας δημιουργήσουμε μια διαμόρφωση κόμβου:
    • $MY_DOMAIN - όνομα τομέα ρίζας (για παράδειγμα, example.org)
    • $HOST_NAME - όνομα κεντρικού υπολογιστή πελάτη χωρίς τομέα
    • δεδομένα mkdir/$MY_DOMAIN
    • cp data/example.com/puppet.yaml data/$(MY_DOMAIN)/puppet.yaml
    • $EDITOR nano -w data/$(MY_DOMAIN)/puppet.yaml - ρύθμιση κόμβου με Puppet Server σύμφωνα με προτάσεις στα σχόλια
    • cp data/example.com/host.yaml data/$(MY_DOMAIN)/$(HOST_NAME).yaml
    • $EDITOR nano -w data/$(MY_DOMAIN)/$(HOST_NAME).yaml - ρύθμιση ενός αυθαίρετου κόμβου με βάση τις προτάσεις στα σχόλια
  4. Πιέζουμε στον δικό μας διακομιστή Git ή τον κάνουμε διαθέσιμο τοπικά σε έναν κόμβο με Puppet Server μέσω rsync ή scp. Ένα τοπικό αποθετήριο είναι βολικό ως ενδιάμεσο βήμα μέχρι να αναπτυχθεί ο διακομιστής Git από το ίδιο το Puppet. Κατά μία έννοια, αυτό θυμίζει τη συναρμολόγηση ενός μεταγλωττιστή σε διάφορα στάδια.

Εγκατάσταση από την αρχή σε καθαρό σύστημα

Η λειτουργική μονάδα cfpuppetserver σάς επιτρέπει να εγκαταστήσετε τα πάντα χρησιμοποιώντας το ίδιο το Puppet, αλλά για την αρχική εγκατάσταση, οι βασικές λειτουργίες αντιγράφονται από ένα σενάριο Bash.

Στο σύστημα στόχου:

  1. Κατεβάστε το σενάριο εγκατάστασης: wget https://raw.githubusercontent.com/codingfuture/puppet-cfpuppetserver/master/setup_puppetserver.sh
  2. Κοιτάμε το σενάριο και συνοφρυώνουμε: λιγότερο setup_puppetserver.sh
  3. Εκτέλεση: bash setup_puppetserver.sh μαριονέτα.$(MY_DOMAIN) .
    • Παράδειγμα με ένα απομακρυσμένο αποθετήριο: bash setup_puppetserver.sh ssh:// [email προστατευμένο]/κούκλα-συνδ
    • Παράδειγμα με τοπικό: bash setup_puppetserver.sh file:///root/puppetconf/
  4. Βλέπουμε πώς το σύστημα φουσκώνει και δεν εγκαθιστά τα πάντα πολύ γρήγορα.
  5. Εάν το αποθετήριο είναι απομακρυσμένο:
    • Δημιουργήστε ένα κλειδί SSH για root: ssh-keygen -t rsa -b 2048
    • Καταχωρούμε το δημόσιο κλειδί /root/.ssh/id_rsa.pub στον απομακρυσμένο διακομιστή Git...
    • ... και εκεί δημιουργήσαμε ένα άγκιστρο Git καλώντας την ακόλουθη εντολή: /usr/bin/ssh -T deploypuppet@puppet.$(MY_DOMAIN) ./puppetdeploy.sh
  6. Ξεκινάμε την ανάπτυξη της διαμόρφωσης με μη αυτόματο τρόπο: /etc/puppetlabs/deploy.sh
  7. Ας δοκιμάσουμε πώς λειτουργεί στον ίδιο τον διακομιστή: /opt/puppetlabs/bin/puppet agent --test
  8. Ελέγξτε τις ρυθμίσεις του δικτύου σας, προστατευτικό υπέρτασηςκαι πρόσβαση SSH

Προσθήκη διαχειριζόμενων κόμβων

  1. Το πλήρως αναγνωρισμένο όνομα του διακομιστή Puppet πρέπει να είναι διαθέσιμο μέσω DNS στον διαχειριζόμενο κεντρικό υπολογιστή ή να είναι κωδικοποιημένο σε /etc/host.
    • Παράδειγμα: echo "128.1.1.1 puppet.example.com" >> /etc/hosts
  2. Στον κόμβο με τον Puppet Server, εκτελέστε το ακόλουθο σενάριο /root/genclientinit.sh $(HOST_NAME).$(MY_DOMAIN) .
  3. Αντιγράψτε ολόκληρο το αποτέλεσμα και επικολλήστε το γραμμή εντολώνστο σύστημα στόχου.
  4. Περιμένουμε το τέλος της εκτέλεσης και εκτελούμε το /opt/puppetlabs/bin/puppet agent --test . Κατά την πρώτη εκκίνηση, θα δημιουργηθεί ένα αίτημα υπογραφής πιστοποιητικού.
  5. Πηγαίνουμε στον κόμβο Puppet Server για να υπογράψουμε το πιστοποιητικό.
    • Λίστα πιστοποιητικών μαριονέτας - ελέγχουμε την υπογραφή του πιστοποιητικού για επιπλέον παράνοια.
    • Σύμβολο πιστοποιητικού μαριονέτας $(HOST_NAME).$(MY_DOMAIN) - στην πραγματικότητα, υπογράφουμε το πιστοποιητικό.
  6. Επιστρέφουμε στον διαχειριζόμενο κόμβο και εκτελούμε ξανά: /opt/puppetlabs/bin/puppet agent --test`. Αυτό θα αναγκάσει την έναρξη της διαδικασίας ανάπτυξης.
  7. Περιμένουμε να ολοκληρωθεί η ανάπτυξη μέσω Puppet Agent.
  8. Αυτό είναι όλο, έχετε έτοιμη μια ελάχιστη υποδομή Puppet!

Παράδειγμα εξόδου από το /root/genclientinit.sh

βίαιο χτύπημα</etc/cflocation fi εάν δοκιμή ! -z ""; τότε echo -n >/etc/cflocationpool fi αν δοκιμή ! -z "\$http_proxy"; στη συνέχεια εξαγωγή http_proxy εξαγωγή https_proxy="\$http_proxy" εξαγωγή HTTP_PROXY="\$http_proxy" εξαγωγή HTTPS_PROXY="\$http_proxy" fi echo host.example.com > /etc/hostname hostname host.example.com if ! που lsb-release | ανάγνωση; τότε apt-get install lsb-release fi codename=\$(lsb_release -cs) if test -z "\$codename"; μετά ηχώ "Αποτυχία εντοπισμού του σωστού κωδικού ονόματος" έξοδος 1 fi wget https://apt.puppetlabs.com/puppetlabs-release-pc1-\$(codename).deb dpkg -i puppetlabs-release-pc1-\$(κωδικό όνομα) .deb mkdir -p /etc/puppetlabs/puppet cat > /etc/puppetlabs/puppet/puppet.conf<Puppet Cert sign host.example.com" echo "Χρησιμοποιήστε CTRL+C για να σταματήσετε τον κύκλο, εάν αποτύχει για διαφορετικούς λόγους" ύπνος 5 έγινε EOT

Περιγραφή ενότητας

Πλήρης λίστα παραμέτρων Bash για το σενάριο αρχικής εγκατάστασης

~# ./setup_puppetserver.sh Χρήση: ./setup_puppetserver.sh [ [ [ [] ] ] ]
  • r10k_repo_url - URI του αποθετηρίου Git
  • certname - πλήρως αναγνωρισμένο όνομα τομέα του κεντρικού υπολογιστή
  • cflocation - αρχικοποίηση του γεγονότος cf_location
  • cflocationpool - προετοιμασία του γεγονότος cf_location_pool
  • http_proxy - διακομιστής μεσολάβησης για αιτήματα HTTP και HTTPS

Πλήρης λίστα παραμέτρων Bash για το σενάριο προετοιμασίας του πελάτη Puppet

~# /root/genclientinit.sh Χρήση: ./genclientinit.sh [ [ []]]
Η σημασία των παραμέτρων είναι η ίδια όπως στο προηγούμενο σενάριο.

κλάση cfpuppetserver

  • deployuser = "deploypuppet" - όνομα χρήστη για αυτόματη ανάπτυξη ενημερώσεων διαμόρφωσης
  • deployuser_auth_keys = undef - λίστα κλειδιών για $deployuser
  • repo_url = undef - URI αποθετηρίου (παράδειγμα: ssh://user@host/repo ή file:///some/path)
  • puppetserver = true - εάν θα εγκατασταθεί το στοιχείο Puppet Server σε αυτόν τον κόμβο
  • puppetdb = true - εάν θα εγκατασταθεί το στοιχείο PuppetDB σε αυτόν τον κόμβο
  • puppetdb_port = 8081 - θύρα για PuppetDB
  • setup_postgresql = true - εάν θα εγκατασταθεί το στοιχείο PostgreSQL σε αυτόν τον κόμβο (μόνο εάν η εγκατάσταση PuppetDB είναι ενεργοποιημένη)
  • service_face = "οποιοδήποτε" - όνομα του cfnetwork::iface πόρος για την αποδοχή εισερχόμενων συνδέσεων
  • puppetserver_mem = αυτόματη - RAM για Puppet Server σε megabyte (τουλάχιστον 192 MB)
  • puppetdb_mem = αυτόματη - RAM για PuppetDB σε megabyte (τουλάχιστον 192 MB)
  • postgresql_mem = αυτόματη - RAM για PostgreSQL σε megabyte (τουλάχιστον 128 MB)

κλάση cfpuppetserver::puppetdb

  • postgresql_host = "localhost" - διεύθυνση βάσης δεδομένων
  • postgresql_listen = $postgresql_host - η τιμή πηγαίνει απευθείας στην οδηγία listen_addresses PostgreSQL
  • postgresql_port = 5432 - θύρα βάσης δεδομένων
  • postgresql_user = "puppetdb" - χρήστης PuppetDB στη βάση δεδομένων
  • postgresql_pass = "puppetdb" - κωδικός πρόσβασης του χρήστη PuppetDB στη βάση δεδομένων
  • postgresql_ssl = false - ενεργοποίηση κρυπτογράφησης σύνδεσης με βάση πιστοποιητικά Puppet PKI

κλάση cfpuppetserver::puppetserver

  • autosign = false - ΔΕΝ ΠΡΕΠΕΙ να χρησιμοποιείται σε περιβάλλον μάχης, εκτός ίσως από το DMZ. Υπάρχει αποκλειστικά για αυτοματισμούς δοκιμών.
  • global_hiera_config = "cfpuppetserver/hiera.yaml" - διαδρομή προς το προεπιλεγμένο αρχείο διαμόρφωσης Hiera σύμφωνα με τους κανόνες Puppet (το πρώτο στοιχείο είναι το όνομα της ενότητας, το υπόλοιπο είναι η διαδρομή κάτω από τα αρχεία/φάκελο στη μονάδα)

Μπορείτε να βοηθήσετε και να μεταφέρετε κάποια χρήματα για την ανάπτυξη του ιστότοπου



Η διαχείριση μεγάλου αριθμού συστημάτων Unix δεν μπορεί να χαρακτηριστεί βολική. Για να αλλάξετε μια παράμετρο, ο διαχειριστής πρέπει να επικοινωνήσει με κάθε μηχάνημα· τα σενάρια μπορούν να βοηθήσουν μόνο εν μέρει και όχι σε όλες τις περιπτώσεις.

Θα πρέπει να αναγνωριστεί ότι οι διαχειριστές δικτύου των Windows εξακολουθούν να βρίσκονται σε πιο πλεονεκτική θέση. Αρκεί να αλλάξετε τις ρυθμίσεις της πολιτικής ομάδας και μετά από λίγο όλοι οι υπολογιστές στο δίκτυο, συμπεριλαμβανομένων αυτών με πρόσφατα εγκατεστημένο λειτουργικό σύστημα, θα «μάθουν» για την καινοτομία, αν φυσικά τους αφορά. Κοιτάζοντας πίσω στη μακρά περίοδο ανάπτυξης του Unix, θα παρατηρήσετε ότι τίποτα τέτοιο δεν έπιασε ποτέ. Υπάρχουν λύσεις όπως το kickstart που βοηθούν στην αρχική εγκατάσταση λειτουργικό σύστημα, αλλά περαιτέρω βελτίωση θα απαιτήσει σημαντική προσπάθεια. Εμπορικές λύσεις όπως το BladeLogic και το OpsWare λύνουν μόνο εν μέρει το πρόβλημα της αυτοματοποίησης των ρυθμίσεων· το κύριο πλεονέκτημά τους είναι η διαθεσιμότητα GUI, και μπορούν να αγοραστούν μόνο από μεγάλους οργανισμούς. Υπάρχουν, φυσικά, έργα που προσφέρουν δωρεάν λύσεις, αλλά σε όλη τη διάρκεια της ύπαρξής τους δεν μπόρεσαν ποτέ να δημιουργήσουν μια μεγάλη κοινότητα. Για παράδειγμα, το Cfengine δεν είναι πολύ δημοφιλές μεταξύ των διαχειριστών, αν και εκτός από το Linux, μπορεί να χρησιμοποιηθεί σε *BSD, Windows και Mac OS X. Αυτό μπορεί να οφείλεται στη σχετική πολυπλοκότητα της δημιουργίας διαμορφώσεων. Όταν περιγράφετε εργασίες, πρέπει να λαμβάνετε υπόψη τις δυνατότητες κάθε συγκεκριμένου συστήματος και να ελέγχετε χειροκίνητα την ακολουθία ενεργειών κατά την εκτέλεση εντολών. Δηλαδή, ο διαχειριστής πρέπει να θυμάται ότι για ορισμένα συστήματα πρέπει να γράψετε adduser για άλλα, useradd, να λάβετε υπόψη τη θέση των αρχείων σε διαφορετικά συστήματα κ.λπ. Αυτό περιπλέκει τη διαδικασία εγγραφής εντολών κατά μια τάξη μεγέθους· είναι πολύ δύσκολο να δημιουργήσετε τη σωστή διαμόρφωση εν κινήσει και είναι σχεδόν αδύνατο να διαβάσετε τις δημιουργημένες διαμορφώσεις μετά από λίγο. Παρά την άδεια GPL, το Cfengine είναι στην πραγματικότητα ένα έργο ενός ανθρώπου που ελέγχει όλες τις αλλαγές και δεν ενδιαφέρεται πολύ για την οικοδόμηση μιας ανοιχτής κοινωνίας. Ως αποτέλεσμα, οι δυνατότητες του cfengine είναι αρκετά ικανοποιητικές για τον προγραμματιστή, αλλά για άλλους διαχειριστές είναι μάλλον ένας επιπλέον πονοκέφαλος. Για τη βελτίωση του cfengine, δημιουργήθηκαν διάφορα πρόσθετα από τρίτους προγραμματιστές, τα οποία συχνά επιδεινώνουν την κατάσταση. Ο συγγραφέας πολλών τέτοιων ενοτήτων για το cfengine, Luke Kanies, αποφάσισε τελικά να αναπτύξει ένα παρόμοιο εργαλείο, αλλά χωρίς πολλά από τα μειονεκτήματα του cfengine.

Χαρακτηριστικά Μαριονέτας

Το Puppet, όπως και το cfengine, είναι ένα σύστημα πελάτη-διακομιστή που χρησιμοποιεί μια δηλωτική, δηλαδή, υποχρεωτική γλώσσα για την περιγραφή εργασιών και βιβλιοθηκών για την υλοποίησή τους. Οι πελάτες περιοδικά (30 λεπτά από προεπιλογή) συνδέονται στον κεντρικό διακομιστή και λαμβάνουν την πιο πρόσφατη διαμόρφωση. Εάν οι ρυθμίσεις που ελήφθησαν δεν ταιριάζουν με την κατάσταση του συστήματος, θα εκτελεστούν και, εάν είναι απαραίτητο, θα αποσταλεί στον διακομιστή μια αναφορά για τις λειτουργίες που εκτελέστηκαν. Ο διακομιστής μπορεί να αποθηκεύσει μηνύματα στο syslog ή σε ένα αρχείο, να δημιουργήσει ένα γράφημα RRD και να τα στείλει σε ένα καθορισμένο e-mail. Τα πρόσθετα επίπεδα συναλλαγών και αφαίρεσης πόρων παρέχουν μέγιστη συμβατότητα με υπάρχουσες ρυθμίσεις και εφαρμογές, επιτρέποντάς σας να εστιάσετε σε αντικείμενα συστήματος χωρίς να ανησυχείτε για διαφορές στην υλοποίηση και περιγραφή λεπτομερών εντολών και μορφών αρχείων. Ο διαχειριστής λειτουργεί μόνο με τον τύπο αντικειμένου, η Puppet φροντίζει για τα υπόλοιπα. Έτσι, ο τύπος πακέτων γνωρίζει περίπου 17 συστήματα πακέτων· το απαιτούμενο θα αναγνωριστεί αυτόματα με βάση πληροφορίες σχετικά με την έκδοση της διανομής ή του συστήματος, αν και, εάν είναι απαραίτητο, ο διαχειριστής πακέτων μπορεί να αναγκαστεί.

Σε αντίθεση με τα σενάρια, τα οποία συχνά δεν είναι δυνατό να χρησιμοποιηθούν σε άλλα συστήματα, οι διαμορφώσεις Puppet που έχουν γραφτεί από τρίτους διαχειριστές θα λειτουργούν, ως επί το πλείστον, χωρίς προβλήματα σε οποιοδήποτε άλλο δίκτυο. Στο βιβλίο μαγειρικής μαριονέτας [ http://www.reductivelabs.com/trac/puppet/tags/puppet%2Crecipe] υπάρχουν ήδη τρεις δεκάδες έτοιμες συνταγές. Το Puppet επί του παρόντος υποστηρίζει επίσημα τα ακόλουθα λειτουργικά συστήματα και υπηρεσίες: Debian, RedHat/Fedora, Solaris, SUSE, CentOS, Mac OS X, OpenBSD, Gentoo και MySQL, LDAP.

Γλώσσα μαριονέτας

Για να προχωρήσετε, πρέπει πρώτα να κατανοήσετε τα βασικά στοιχεία και τις δυνατότητες της γλώσσας. Η γλώσσα είναι ένα από δυνάμειςΜαριονέτα. Με τη βοήθειά του περιγράφονται οι πόροι που σχεδιάζει να διαχειριστεί ο διαχειριστής και οι ενέργειες. Σε αντίθεση με τις περισσότερες παρόμοιες λύσεις, το Puppet επιτρέπει στη γλώσσα να απλοποιεί την πρόσβαση σε όλους τους παρόμοιους πόρους σε οποιοδήποτε σύστημα σε ένα ετερογενές περιβάλλον. Μια περιγραφή πόρων συνήθως αποτελείται από ένα όνομα, έναν τύπο και χαρακτηριστικά. Για παράδειγμα, ας δείξουμε το αρχείο /etc/passwd και ας ορίσουμε τα χαρακτηριστικά του:

αρχείο("/etc/passwd":

ιδιοκτήτης => ρίζα,

ομάδα => ρίζα,

Τώρα οι πελάτες, αφού συνδεθούν στον διακομιστή, θα αντιγράψουν το αρχείο /etc/passwd και θα εγκαταστήσουν τα καθορισμένα χαρακτηριστικά. Μπορείτε να ορίσετε πολλούς πόρους σε έναν κανόνα, διαχωρίζοντάς τους χρησιμοποιώντας ένα ερωτηματικό. Τι πρέπει να κάνετε εάν το αρχείο διαμόρφωσης που χρησιμοποιείται στον διακομιστή διαφέρει από το αρχείο-πελάτη ή δεν χρησιμοποιείται καθόλου; Για παράδειγμα, αυτή η κατάσταση μπορεί να προκύψει όταν Ρυθμίσεις VPNσυνδέσεις. Σε αυτήν την περίπτωση, το αρχείο μπορεί να υποδειχθεί χρησιμοποιώντας την οδηγία πηγής. Υπάρχουν δύο επιλογές εδώ, ως συνήθως, για να καθορίσετε τη διαδρομή προς ένα άλλο αρχείο· υποστηρίζονται επίσης δύο πρωτόκολλα URI: αρχείο και μαριονέτα. Στην πρώτη περίπτωση, ένας σύνδεσμος προς ένα εξωτερικό Διακομιστής NFS, στη δεύτερη επιλογή, εκκινείται μια υπηρεσία παρόμοια με το NFS στον διακομιστή Puppet, ο οποίος εξάγει πόρους. Στην τελευταία περίπτωση, η προεπιλεγμένη διαδρομή είναι σχετική με τον ριζικό κατάλογο μαριονέτας - /etc/puppet. Δηλαδή, ο σύνδεσμος puppet://server.domain.com/config/sshd_config θα αντιστοιχεί στο αρχείο /etc/puppet/config/sshd_config. Μπορείτε να παρακάμψετε αυτόν τον κατάλογο χρησιμοποιώντας την οδηγία filebucket, αν και είναι πιο σωστό να χρησιμοποιήσετε την ενότητα με το ίδιο όνομα στο αρχείο /etc/puppet/fileserver.conf. Σε αυτήν την περίπτωση, μπορείτε να περιορίσετε την πρόσβαση στην υπηρεσία μόνο από συγκεκριμένες διευθύνσεις. Για παράδειγμα, ας περιγράψουμε την ενότητα διαμόρφωσης.

διαδρομή /var/puppet/config

επιτρέπεται *.domain.com

επιτρέψτε 192.168.0.*

επιτρέψτε 192.168.1.0/24

άρνηση *.wireless.domain.com

Και στη συνέχεια στραφούμε σε αυτήν την ενότητα όταν περιγράφουμε τον πόρο.

πηγή => "puppet://server.domain.com/config/sshd_config"

Πριν από την άνω τελεία είναι το όνομα του πόρου. Στις απλούστερες περιπτώσεις, μπορείτε απλώς να καθορίσετε ένα ψευδώνυμο ή μεταβλητές ως όνομα. Το ψευδώνυμο ορίζεται χρησιμοποιώντας την οδηγία για το ψευδώνυμο. πλήρη διαδρομή προς το αρχείο. Σε πιο σύνθετες διαμορφώσεις

αρχείο("/etc/passwd":

ψευδώνυμο => passwd

Μια άλλη επιλογή για τη δημιουργία ενός ψευδωνύμου είναι καλή όταν έχετε να αντιμετωπίσετε διαφορετικά λειτουργικά συστήματα. Για παράδειγμα, ας δημιουργήσουμε έναν πόρο που περιγράφει το αρχείο sshd_config:

αρχείο(sshdconfig:

όνομα => $λειτουργικό σύστημα ? (

solaris => "/usr/local/etc/ssh/sshd_config",

προεπιλογή => "/etc/ssh/sshd_config"

Σε αυτό το παράδειγμα, βρισκόμαστε αντιμέτωποι με μια επιλογή. Το αρχείο για το Solaris καθορίζεται ξεχωριστά, για όλα τα άλλα θα επιλεγεί το αρχείο /etc/ssh/sshd_config. Τώρα μπορείτε να έχετε πρόσβαση σε αυτόν τον πόρο ως sshdconfig, ανάλογα με το λειτουργικό σύστημα θα επιλεγεί η επιθυμητή διαδρομή. Για παράδειγμα, υποδεικνύουμε ότι εάν ο δαίμονας sshd εκτελείται και λαμβάνεται νέο αρχείο, θα πρέπει να επανεκκινήσετε την υπηρεσία.

διασφάλιση => αληθές,

εγγραφή => Αρχείο

Οι μεταβλητές χρησιμοποιούνται συχνά κατά την εργασία με δεδομένα χρήστη. Για παράδειγμα, περιγράφουμε τη θέση των αρχικών καταλόγων χρήστη:

$homeroot = "/home"

Τώρα είναι δυνατή η πρόσβαση στα αρχεία ενός συγκεκριμένου χρήστη ως

$(homeroot)/$name

Η παράμετρος $name θα συμπληρωθεί με το όνομα λογαριασμού του χρήστη. Σε ορισμένες περιπτώσεις είναι βολικό να ορίσετε μια προεπιλεγμένη τιμή για κάποιο τύπο. Για παράδειγμα, για τον τύπο exec, συχνά υποδεικνύουν τους καταλόγους στους οποίους πρέπει να αναζητήσει το εκτελέσιμο αρχείο:

Exec (διαδρομή => "/usr/bin:/bin:/usr/sbin:/sbin")

Εάν πρέπει να δείξετε πολλά ένθετα αρχεία και καταλόγους, μπορείτε να χρησιμοποιήσετε την παράμετρο recurse.

αρχείο("/etc/apache2/conf.d":

πηγή => "puppet:// puppet://server.domain.com/config/apache/conf.d",

recurse => "αληθινό"

Πολλοί πόροι μπορούν να συνδυαστούν σε κλάσεις ή ορισμούς. Οι κλάσεις είναι μια πλήρης περιγραφή ενός συστήματος ή μιας υπηρεσίας και χρησιμοποιούνται χωριστά.

"/etc/passwd": ιδιοκτήτης => ρίζα, ομάδα => ρίζα, λειτουργία => 644;

"/etc/shadow": ιδιοκτήτης => ρίζα, ομάδα => ρίζα, λειτουργία => 440

Όπως και στις αντικειμενοστρεφείς γλώσσες, οι κλάσεις μπορούν να παρακαμφθούν. Για παράδειγμα, στο FreeBSD ο κάτοχος της ομάδας αυτών των αρχείων είναι ο τροχός. Επομένως, για να μην ξαναγράψουμε εντελώς τον πόρο, ας δημιουργήσουμε μια νέα κλάση freebsd, η οποία θα κληρονομήσει την κλάση linux:

Η κλάση freebsd κληρονομεί το Linux (

Αρχείο[“/etc/passwd”] ( ομάδα => τροχός );

Αρχείο["/etc/shadow"] (ομάδα => τροχός)

Για ευκολία, όλες οι κλάσεις μπορούν να τοποθετηθούν σε ξεχωριστό αρχείο, το οποίο μπορεί να συνδεθεί χρησιμοποιώντας την οδηγία συμπερίληψης. Οι ορισμοί μπορούν να λάβουν πολλές παραμέτρους ως ορίσματα, αλλά δεν υποστηρίζουν κληρονομικότητα και χρησιμοποιούνται όταν χρειάζεται να περιγράψετε επαναχρησιμοποιήσιμα αντικείμενα. Για παράδειγμα, ας ορίσουμε τον αρχικό κατάλογο των χρηστών και τις εντολές που είναι απαραίτητες για τη δημιουργία ενός νέου λογαριασμού.

ορίστε user_homedir ($group, $fullname, $inggroups) (

χρήστης("$name":

εξασφάλιση => παρόν,

σχόλιο => "$fullname",

gid => "$group",

ομάδες => $inggroups,

συνδρομή => ελάχιστη,

shell => "/bin/bash",

home => "/home/$name",

Απαιτείται => Ομάδα[$group],

exec("$name homedir":

εντολή => “/bin/cp -R /etc/skel /home/$name; /bin/chown -R $name:$group /home/$name",

δημιουργεί => "/home/$name",

απαιτείται => Χρήστης[$name],

Τώρα για να δημιουργήσετε ένα νέο λογαριασμόςαπλά επικοινωνήστε με το user_homedir.

user_homedir("sergej":

ομάδα => "sergej",

πλήρες όνομα => “Sergej Jaremchuk”,

ingroups => ["μέσα", "διαχειριστής]

Υπάρχουν ξεχωριστές περιγραφές κόμβων που υποστηρίζουν κληρονομικότητα σαν κλάσεις. Όταν ένας πελάτης συνδέεται στον διακομιστή Puppet, θα γίνει αναζήτηση στην αντίστοιχη ενότητα κόμβου και θα παρέχονται ρυθμίσεις που αφορούν μόνο αυτόν τον υπολογιστή. Για να περιγράψετε όλα τα άλλα συστήματα, μπορείτε να χρησιμοποιήσετε την προεπιλογή κόμβου. Μια περιγραφή όλων των τύπων δίνεται στο έγγραφο «Type Reference», το οποίο πρέπει να διαβαστεί σε κάθε περίπτωση, τουλάχιστον για να κατανοηθούν όλες οι δυνατότητες της γλώσσας Puppet. Διάφοροι τύποισας επιτρέπει να εκτελείτε καθορισμένες εντολές, όπως όταν πληρούνται ορισμένες προϋποθέσεις (για παράδειγμα, αλλαγή αρχείου διαμόρφωσης), εργασία με cron, διαπιστευτήρια χρήστη και ομάδες, υπολογιστές, τοποθέτηση πόρων, εκκίνηση και διακοπή υπηρεσιών, εγκατάσταση, ενημέρωση και αφαίρεση πακέτων, εργασία με Κλειδιά SSH, ζώνες Solaris και ούτω καθεξής. Αυτό είναι το πόσο εύκολο είναι να αναγκάσετε τη λίστα των πακέτων σε διανομές χρησιμοποιώντας το apt να ενημερώνεται κάθε μέρα μεταξύ 2 και 4 ωρών.

πρόγραμμα (καθημερινά:

περίοδος => καθημερινά,

εύρος =>

exec("/usr/bin/apt-get ενημέρωση":

πρόγραμμα => καθημερινά

Η ενημέρωση για αυτήν την περίοδο θα εκτελεστεί από κάθε σύστημα μόνο μία φορά, μετά την οποία η εργασία θεωρείται ολοκληρωμένη και θα διαγραφεί από τον υπολογιστή-πελάτη. Η γλώσσα Puppet υποστηρίζει άλλες γνωστές δομές: συνθήκες, συναρτήσεις, πίνακες, σχόλια και παρόμοια.

Εγκατάσταση Puppet

Το Puppet απαιτεί Ruby (>= 1.8.1) με υποστήριξη OpenSSL και βιβλιοθήκες XMLRPC, καθώς και τη βιβλιοθήκη Faster [ http://reductivelabs.com/projects/facter]. Το αποθετήριο Ubuntu 7.04 που χρησιμοποιήθηκε για τη δοκιμαστική εγκατάσταση περιλάμβανε ήδη το πακέτο κουταβιών.

$ sudo apt-cache μαριονέτα αναζήτησης

μαριονέτα — κεντρική διαχείριση διαμόρφωσης για δίκτυα

puppetmaster - κεντρικός δαίμονας ελέγχου διαχείρισης διαμόρφωσης

Κατά την εγκατάσταση, θα εγκατασταθούν όλα τα απαραίτητα πακέτα εξάρτησης: facter libopenssl-ruby libxmlrpc-ruby.

$ sudo apt-get install puppet puppetmaster

Μπορείτε να ελέγξετε τη διαθεσιμότητα των βιβλιοθηκών Ruby με την εντολή.

$ ruby ​​​​-ropenssl -e "puts:yep"

~$ ruby‎ -rxmlrpc/client -e "puts:yep"

Εάν δεν ληφθούν σφάλματα, τότε όλα όσα χρειάζεστε περιλαμβάνονται ήδη. Τα αρχεία που περιγράφουν την επιθυμητή διαμόρφωση συστημάτων ονομάζονται manifests στην ορολογία Puppet. Κατά την εκκίνηση, ο δαίμονας προσπαθεί να διαβάσει το αρχείο /etc/puppet/manifests/site.pp· εάν λείπει, εμφανίζει ένα προειδοποιητικό μήνυμα. Κατά τη δοκιμή, μπορείτε να πείτε στον δαίμονα να λειτουργεί σε λειτουργία εκτός σύνδεσης, οπότε η δήλωση δεν απαιτείται

$ sudo /usr/bin/puppetmasterd --nonodes

Εάν είναι απαραίτητο, μπορείτε να συνδέσετε άλλα αρχεία στο site.pp, για παράδειγμα με περιγραφές κλάσεων. Για μια δοκιμαστική εκτέλεση, μπορείτε να εισαγάγετε τις απλούστερες οδηγίες σε αυτό το αρχείο.

file("/etc/sudoers":

ιδιοκτήτης => ρίζα,

ομάδα => ρίζα,

Όλα τα αρχεία διαμόρφωσης τόσο για τον διακομιστή όσο και για τους πελάτες βρίσκονται στο /etc/puppet. Το αρχείο fileserver.conf για το οποίο μιλήσαμε παραπάνω είναι προαιρετικό και χρησιμοποιείται μόνο εάν το Puppet λειτουργεί και ως διακομιστής αρχείων. Στο Ubuntu, αυτό το αρχείο εξάγει τον υποκατάλογο /etc/puppet/files. Ο υποκατάλογος ssl περιέχει πιστοποιητικά και κλειδιά που θα χρησιμοποιηθούν για κρυπτογράφηση κατά τη σύνδεση πελατών. Τα πλήκτρα δημιουργούνται αυτόματα την πρώτη φορά που ξεκινάτε το puppetmasterd· μπορείτε να τα δημιουργήσετε χειροκίνητα με την εντολή.

$ sudo /usr/bin/ puppetmasterd --mcusers.

Τα αρχεία puppetd.conf και puppetmasterd.conf είναι παρόμοια. Υποδεικνύουν ορισμένες παραμέτρους για τη λειτουργία των δαιμόνων στο σύστημα πελάτη και στο διακομιστή. Το αρχείο πελάτη διαφέρει μόνο με την παρουσία της παραμέτρου διακομιστή, η οποία οδηγεί στον υπολογιστή στον οποίο εκτελείται το puppetmasterd.

διακομιστής = grinder.com

logdir = /var/log/μαριονέτα

vardir = /var/lib/μαριονέτα

rundir = /var/run

# αποστολή αναφοράς στον διακομιστή

Για να αποφύγετε να πληκτρολογείτε τα πάντα με μη αυτόματο τρόπο, μπορείτε να δημιουργήσετε ένα πρότυπο χρησιμοποιώντας το ίδιο το puppetd.

$ puppetd --genconfig > /etc/puppet/puppetd.conf

Ομοίως, μπορείτε να δημιουργήσετε site.pp στον διακομιστή.

$ puppetd --genmanifest > /etc/puppet/manifests/site.pp

Ένα άλλο αρχείο, το tagmail.conf, σας επιτρέπει να καθορίσετε τις διευθύνσεις email στις οποίες θα αποστέλλονται οι αναφορές. Στην απλούστερη περίπτωση, μπορείτε να χρησιμοποιήσετε μία γραμμή.

όλα: [email προστατευμένο]

Τα αρχεία διαμόρφωσης δεν επαρκούν για να συνδεθεί ο πελάτης στον διακομιστή. Για να το κάνετε αυτό, πρέπει επίσης να υπογράψετε τα πιστοποιητικά. Αρχικά, για να ενημερώσετε τον διακομιστή σχετικά με τον νέο υπολογιστή στο σύστημα πελάτη, εισαγάγετε την εντολή:

$ sudo puppetd --server grinder.com --waitforcert 60 --test

info: Αίτημα πιστοποιητικού

προειδοποίηση: το ομότιμο πιστοποιητικό δεν θα επαληθευτεί σε αυτήν την περίοδο λειτουργίας SSL

ειδοποίηση: Δεν έλαβε πιστοποιητικό

Εάν επιστραφεί διαφορετική γραμμή, θα πρέπει να ελέγξετε τη λειτουργία του διακομιστή.

$ ps aux | γκρεπ μαριονέτα

μαριονέτα 5779 0,0 1,4 27764 15404 ? Ssl 21:49 0:00 ρουμπίνι /usr/sbin/puppetmasterd

Το τείχος προστασίας πρέπει να επιτρέπει συνδέσεις στη θύρα 8140.

Στον διακομιστή λαμβάνουμε μια λίστα πιστοποιητικών που πρέπει να υπογραφούν.

$ sudo puppetca --list

nomad.grinder.com

Και υπογράφουμε το πιστοποιητικό πελάτη.

$ sudo puppetca –sign nomad.grinder.com

Τώρα ο πελάτης μπορεί ελεύθερα να συνδεθεί στον διακομιστή και να λάβει ρυθμίσεις.

Δυστυχώς, απλά δεν είναι δυνατό να εμφανιστούν όλες οι δυνατότητες του Puppet μέσα στο άρθρο. Αλλά όπως μπορείτε να δείτε, αυτό είναι ένα λειτουργικό και ευέλικτο εργαλείο που σας επιτρέπει να λύσετε τα περισσότερα από τα προβλήματα της ταυτόχρονης διαχείρισης μεγάλου αριθμού συστημάτων. Εάν η γραμμή εργασίας σας απαιτεί να εγκαταστήσετε πολλά συστήματα. Και το πιο σημαντικό, το έργο κατάφερε να συγκεντρώσει μια μικρή αλλά συνεχώς αυξανόμενη κοινότητα. Επομένως, ας ελπίσουμε ότι μια καλή ιδέα δεν θα αφεθεί να πεθάνει ή να παραμεριστεί.

Μαριονέταείναι μια δομή cross-platform που επιτρέπει διαχειριστές συστήματοςΕκτελέστε κοινές εργασίες χρησιμοποιώντας κώδικα. Ο κώδικας σάς επιτρέπει να εκτελείτε διάφορες εργασίες, από την εγκατάσταση νέων προγραμμάτων μέχρι τον έλεγχο των δικαιωμάτων αρχείων ή την ενημέρωση λογαριασμών χρηστών. Μαριονέταανώτερη όχι μόνο κατά την αρχική εγκατάσταση του συστήματος, αλλά σε ολόκληρο τον κύκλο ζωής του συστήματος. Στις περισσότερες περιπτώσεις μαριονέταχρησιμοποιείται στη διαμόρφωση πελάτη/διακομιστή.

Αυτή η ενότητα δείχνει την εγκατάσταση και τη διαμόρφωση Μαριονέτασε διαμόρφωση πελάτη/διακομιστή. Αυτό το απλό παράδειγμα δείχνει πώς να εγκαταστήσετε Απάχηςχρησιμοποιώντας Μαριονέτα.

Εγκατάσταση

Για εγκατάσταση Μαριονέταεισάγετε στο τερματικό:

Sudo apt-get install puppetmaster

Στο μηχάνημα-πελάτη, εισαγάγετε:

Sudo apt-get μαριονέτα εγκατάστασης

Ρυθμίσεις

Πριν ρυθμίσετε την κούκλα, ίσως θέλετε να προσθέσετε μια καταχώριση DNS CNAMEΓια puppet.example.com, Οπου example.com- αυτός είναι ο τομέας σας. Προεπιλεγμένοι πελάτες Μαριονέταελέγξτε το DNS για το puppet.example.com ως όνομα διακομιστή μαριονέτας ( Μαριονέτας). Ανατρέξτε στην Υπηρεσία ονομάτων τομέα για πρόσθετες λεπτομέρειες σχετικά με τη χρήση DNS.

Εάν δεν σκοπεύετε να χρησιμοποιήσετε DNS, μπορείτε να προσθέσετε καταχωρήσεις στο αρχείο /etc/hosts στον διακομιστή και στον πελάτη. Για παράδειγμα, στο αρχείο /etc/hosts Μαριονέταπροσθήκη διακομιστή:

127.0.0.1 localhost.localdomain localhost puppet 192.168.1.17 meercat02.example.com meercat02

Σε κάθε ΜαριονέταΣτον πελάτη, προσθέστε μια καταχώρηση για τον διακομιστή:

192.168.1.16 meercat.example.com meercat μαριονέτα

Αντικαταστήστε τις διευθύνσεις IP και ονόματα τομέααπό το παράδειγμα έως τις τρέχουσες διευθύνσεις και τα ονόματα του διακομιστή και των πελατών σας.

Τώρα ας δημιουργήσουμε μερικούς πόρους για apache2. Δημιουργήστε ένα αρχείο /etc/puppet/manifests/site.ppπου περιέχει τα ακόλουθα:

Υπηρεσία πακέτου ( "apache2": εξασφάλιση => εγκατεστημένο ) ( "apache2": εξασφάλιση => αληθές, ενεργοποίηση => αληθές, απαίτηση => πακέτο["apache2"] )

Κόμβος "meercat02.example.com" (συμπεριλαμβάνεται το apache2)

Αντικαθιστώ meercat02.example.comστο τωρινό σας όνομα Μαριονέταπελάτης.

Το τελευταίο βήμα για αυτό το απλό Μαριονέταο διακομιστής είναι να επανεκκινήσει την υπηρεσία:

Sudo /etc/init.d/puppetmaster επανεκκίνηση

Τώρα και στο εξής Μαριονέταόλα έχουν ρυθμιστεί στον διακομιστή και ήρθε η ώρα να ρυθμίσετε τις παραμέτρους του πελάτη.

Αρχικά, ας διαμορφώσουμε την υπηρεσία Μαριονέταπράκτορας να ξεκινήσει. Επεξεργαστείτε το /etc/default/puppet, αντικαθιστώντας την τιμή ΑΡΧΗεπί Ναί:

Sudo /etc/init.d/puppet start

Ας επιστρέψουμε στο Μαριονέταδιακομιστή για να υπογράψει το πιστοποιητικό πελάτη χρησιμοποιώντας την εντολή:

Sudo puppetca --sign meercat02.example.com

Ελεγχος /var/log/syslogγια τυχόν σφάλματα διαμόρφωσης. Αν όλα πήγαν καλά, το πακέτο apache2και οι εξαρτήσεις του θα εγκατασταθούν σε Μαριονέταπελάτης.

Αυτό το παράδειγμα είναι πολύ απλό και δεν δείχνει πολλά από τα χαρακτηριστικά και τα οφέλη. Μαριονέτα. Για Επιπλέον πληροφορίεςΚοίτα

Σεργκέι Γιαρεμτσούκ

Κεντρική διαμόρφωση συστημάτων UNIX χρησιμοποιώντας Puppet

Η διαχείριση μεγάλου αριθμού συστημάτων UNIX δεν μπορεί να χαρακτηριστεί βολική. Για να αλλάξετε μια παράμετρο, ο διαχειριστής πρέπει να επικοινωνήσει με κάθε μηχάνημα· τα σενάρια μπορούν να βοηθήσουν μόνο εν μέρει και όχι σε όλες τις περιπτώσεις.

Θα πρέπει να αναγνωριστεί ότι οι διαχειριστές δικτύου των Windows εξακολουθούν να βρίσκονται σε πιο πλεονεκτική θέση. Αρκεί να αλλάξετε τις ρυθμίσεις της πολιτικής ομάδας και μετά από λίγο όλοι οι υπολογιστές στο δίκτυο, συμπεριλαμβανομένων εκείνων με πρόσφατα εγκατεστημένο λειτουργικό σύστημα, θα «μάθουν» για την καινοτομία, αν φυσικά τους αφορά. Κοιτάζοντας πίσω στη μακρά περίοδο ανάπτυξης του UNIX, μπορείτε να δείτε ότι τίποτα τέτοιο δεν έπιασε ποτέ. Υπάρχουν λύσεις όπως το kickstart που βοηθούν στην αρχική εγκατάσταση του λειτουργικού συστήματος, αλλά η περαιτέρω ανάπτυξη θα απαιτήσει σημαντική προσπάθεια. Οι εμπορικές λύσεις, όπως το BladeLogic και το OpsWare, λύνουν το πρόβλημα της αυτοματοποίησης των ρυθμίσεων μόνο εν μέρει· το κύριο πλεονέκτημά τους είναι η παρουσία μιας γραφικής διεπαφής και μόνο οι μεγάλοι οργανισμοί έχουν την οικονομική δυνατότητα να τις αγοράσουν. Υπάρχουν, βέβαια, έργα που προσφέρουν δωρεάν λύσεις, αλλά σε όλη τη διάρκεια της ύπαρξής τους δεν κατάφεραν να δημιουργήσουν μια μεγάλη κοινότητα. Για παράδειγμα, το Cfengine δεν είναι πολύ δημοφιλές μεταξύ των διαχειριστών, αν και, εκτός από το Linux, μπορεί να χρησιμοποιηθεί σε *BSD, Windows και Mac OS X. Αυτό μπορεί να οφείλεται στη σχετική πολυπλοκότητα της δημιουργίας διαμορφώσεων. Κατά την περιγραφή των εργασιών, είναι απαραίτητο να ληφθούν υπόψη τα χαρακτηριστικά κάθε συγκεκριμένου συστήματος και να ελέγχετε χειροκίνητα την ακολουθία ενεργειών κατά την εκτέλεση εντολών. Δηλαδή, ο διαχειριστής πρέπει να θυμάται ότι για ορισμένα συστήματα πρέπει να γράψετε adduser, για άλλα - useradd, να λάβετε υπόψη τη θέση των αρχείων σε διαφορετικά συστήματα και ούτω καθεξής. Αυτό περιπλέκει τη διαδικασία εγγραφής εντολών κατά μια τάξη μεγέθους· είναι πολύ δύσκολο να δημιουργήσετε τη σωστή διαμόρφωση εν κινήσει και είναι σχεδόν αδύνατο να διαβάσετε τις δημιουργημένες διαμορφώσεις μετά από λίγο. Παρά την άδεια GPL, το Cfengine είναι ουσιαστικά ένα έργο ενός ανθρώπου που ελέγχει όλες τις αλλαγές και δεν ενδιαφέρεται πολύ για την οικοδόμηση μιας ανοιχτής κοινωνίας. Ως αποτέλεσμα, οι δυνατότητες του Cfengine είναι αρκετά ικανοποιητικές για τον προγραμματιστή, αλλά για άλλους διαχειριστές είναι μάλλον ένας επιπλέον πονοκέφαλος. Για τη βελτίωση του Cfengine, δημιουργήθηκαν διάφορα πρόσθετα από τρίτους προγραμματιστές, τα οποία συχνά επιδεινώνουν την κατάσταση. Ο συγγραφέας πολλών τέτοιων ενοτήτων για το Cfengine, Luke Kanies, αποφάσισε τελικά να αναπτύξει ένα παρόμοιο εργαλείο, αλλά χωρίς πολλά από τα μειονεκτήματα του Cfengine.

Χαρακτηριστικά Μαριονέτας

Το Puppet, όπως το Cfengine, είναι ένα σύστημα πελάτη-διακομιστή που χρησιμοποιεί μια δηλωτική γλώσσα για να περιγράψει εργασίες και βιβλιοθήκες για την υλοποίησή τους. Οι πελάτες περιοδικά (κάθε 30 λεπτά από προεπιλογή) συνδέονται στον κεντρικό διακομιστή και λαμβάνουν την πιο πρόσφατη διαμόρφωση. Εάν οι ρυθμίσεις που ελήφθησαν δεν ταιριάζουν με την κατάσταση του συστήματος, θα εκτελεστούν και, εάν είναι απαραίτητο, θα αποσταλεί στον διακομιστή μια αναφορά για τις λειτουργίες που εκτελέστηκαν. Ο διακομιστής μηνυμάτων μπορεί να το αποθηκεύσει στο syslog ή σε ένα αρχείο, να δημιουργήσει ένα γράφημα RRD και να το στείλει στο καθορισμένο e-mail. Τα πρόσθετα επίπεδα συναλλαγών και αφαίρεσης πόρων παρέχουν μέγιστη συμβατότητα με υπάρχουσες ρυθμίσεις και εφαρμογές, επιτρέποντάς σας να εστιάσετε σε αντικείμενα συστήματος χωρίς να ανησυχείτε για διαφορές στην υλοποίηση και περιγραφή λεπτομερών εντολών και μορφών αρχείων. Ο διαχειριστής λειτουργεί μόνο με τον τύπο αντικειμένου, η Puppet φροντίζει για τα υπόλοιπα. Έτσι, ο τύπος πακέτων γνωρίζει περίπου 17 συστήματα πακέτων· το απαιτούμενο θα αναγνωρίζεται αυτόματα με βάση πληροφορίες σχετικά με την έκδοση της διανομής ή του συστήματος, αν και, εάν είναι απαραίτητο, ο διαχειριστής πακέτων μπορεί να οριστεί αναγκαστικά.

Σε αντίθεση με τα σενάρια, τα οποία είναι συχνά αδύνατο να χρησιμοποιηθούν σε άλλα συστήματα, οι διαμορφώσεις Puppet που έχουν γραφτεί από τρίτους διαχειριστές θα λειτουργούν ως επί το πλείστον χωρίς προβλήματα σε οποιοδήποτε άλλο δίκτυο. Το Puppet CookBook έχει ήδη τρεις δωδεκάδες έτοιμες συνταγές. Το Puppet επί του παρόντος υποστηρίζει επίσημα τα ακόλουθα λειτουργικά συστήματα και υπηρεσίες: Debian, RedHat/Fedora, Solaris, SUSE, CentOS, Mac OS X, OpenBSD, Gentoo και MySQL, LDAP.

Γλώσσα μαριονέτας

Για να προχωρήσετε, πρέπει πρώτα να κατανοήσετε τα βασικά στοιχεία και τις δυνατότητες της γλώσσας. Η γλώσσα είναι ένα από τα δυνατά σημεία του Puppet. Περιγράφει τους πόρους που σχεδιάζει να διαχειριστεί ο διαχειριστής και τις ενέργειες που κάνει. Σε αντίθεση με τις περισσότερες παρόμοιες λύσεις, το Puppet επιτρέπει στη γλώσσα να απλοποιεί την πρόσβαση σε όλους τους παρόμοιους πόρους σε οποιοδήποτε σύστημα σε ένα ετερογενές περιβάλλον. Μια περιγραφή πόρων συνήθως αποτελείται από ένα όνομα, έναν τύπο και χαρακτηριστικά. Για παράδειγμα, ας δείξουμε το αρχείο /etc/passwd και ας ορίσουμε τα χαρακτηριστικά του:

αρχείο("/etc/passwd":

Ιδιοκτήτης => ρίζα,

Ομάδα => ρίζα,

Λειτουργία => 644,

Τώρα οι πελάτες που συνδέονται με τον διακομιστή θα αντιγράψουν το αρχείο /etc/passwd και θα ορίσουν τα καθορισμένα χαρακτηριστικά. Μπορείτε να ορίσετε πολλούς πόρους σε έναν κανόνα, διαχωρίζοντάς τους χρησιμοποιώντας ένα ερωτηματικό. Τι γίνεται όμως αν το αρχείο διαμόρφωσης που χρησιμοποιείται στον διακομιστή διαφέρει από το πρόγραμμα-πελάτη ή δεν χρησιμοποιείται καθόλου; Για παράδειγμα, αυτή η κατάσταση μπορεί να προκύψει κατά τη ρύθμιση των συνδέσεων VPN. Σε αυτήν την περίπτωση, θα πρέπει να υποδείξετε το αρχείο χρησιμοποιώντας την οδηγία προέλευσης. Υπάρχουν δύο επιλογές εδώ: μπορείτε, ως συνήθως, να καθορίσετε τη διαδρομή προς ένα άλλο αρχείο και επίσης να χρησιμοποιήσετε τα δύο υποστηριζόμενα πρωτόκολλα URI: αρχείο και μαριονέτα. Στην πρώτη περίπτωση, χρησιμοποιείται ένας σύνδεσμος προς έναν εξωτερικό διακομιστή NFS· στη δεύτερη επιλογή, εκκινείται μια υπηρεσία παρόμοια με το NFS στον διακομιστή Puppet, ο οποίος εξάγει πόρους. Στην τελευταία περίπτωση, η προεπιλεγμένη διαδρομή είναι σχετική με τον ριζικό κατάλογο μαριονέτας – /etc/puppet. Δηλαδή, ο σύνδεσμος puppet://server.domain.com/config/sshd_config θα αντιστοιχεί στο αρχείο /etc/puppet/config/sshd_config. Μπορείτε να παρακάμψετε αυτόν τον κατάλογο χρησιμοποιώντας την οδηγία filebucket, αν και είναι πιο σωστό να χρησιμοποιήσετε την ενότητα με το ίδιο όνομα στο αρχείο /etc/puppet/fileserver.conf. Σε αυτήν την περίπτωση, μπορείτε να περιορίσετε την πρόσβαση στην υπηρεσία μόνο σε συγκεκριμένες διευθύνσεις. Για παράδειγμα, ας περιγράψουμε την ενότητα διαμόρφωσης:

Διαδρομή /var/puppet/config

Να επιτρέπεται *.domain.com

Να επιτρέπεται η 127.0.0.1

Να επιτρέπεται το 192.168.0.*

Να επιτρέπεται το 192.168.1.0/24

Άρνηση *.wireless.domain.com

Και στη συνέχεια αναφερόμαστε σε αυτήν την ενότητα όταν περιγράφουμε τον πόρο:

πηγή => "puppet://server.domain.com/config/sshd_config"

Πριν από την άνω τελεία είναι το όνομα του πόρου. Στις απλούστερες περιπτώσεις, μπορείτε απλώς να καθορίσετε την πλήρη διαδρομή προς το αρχείο ως όνομα. Σε πιο σύνθετες διαμορφώσεις είναι καλύτερο να χρησιμοποιείτε ψευδώνυμο ή μεταβλητές. Το ψευδώνυμο ορίζεται χρησιμοποιώντας την οδηγία για το ψευδώνυμο:

αρχείο("/etc/passwd":

Ψευδώνυμο => passwd

Μια άλλη επιλογή για τη δημιουργία ενός ψευδωνύμου είναι καλή όταν έχετε να αντιμετωπίσετε διαφορετικά λειτουργικά συστήματα. Για παράδειγμα, ας δημιουργήσουμε έναν πόρο που περιγράφει το αρχείο sshd_config:

αρχείο(sshdconfig:

Όνομα => $operatingsystem ? (

Solaris => "/usr/local/etc/ssh/sshd_config",

Προεπιλογή => "/etc/ssh/sshd_config"

Σε αυτό το παράδειγμα, βρισκόμαστε αντιμέτωποι με μια επιλογή. Το αρχείο για το Solaris καθορίζεται ξεχωριστά, για όλα τα άλλα θα επιλεγεί το αρχείο /etc/ssh/sshd_config. Τώρα μπορείτε να έχετε πρόσβαση σε αυτόν τον πόρο ως sshdconfig, ανάλογα με το λειτουργικό σύστημα θα επιλεγεί η επιθυμητή διαδρομή. Για παράδειγμα, υποδεικνύουμε ότι εάν ο δαίμονας sshd εκτελείται και ληφθεί ένα νέο αρχείο, η υπηρεσία θα πρέπει να επανεκκινηθεί:

υπηρεσία(sshd:

Βεβαιωθείτε ότι => αλήθεια,

Εγγραφή => Αρχείο

Οι μεταβλητές χρησιμοποιούνται συχνά κατά την εργασία με δεδομένα χρήστη. Για παράδειγμα, περιγράφουμε τη θέση των αρχικών καταλόγων χρήστη:

$homeroot = "/home"

Τώρα μπορείτε να έχετε πρόσβαση στα αρχεία ενός συγκεκριμένου χρήστη ως:

$(homeroot)/$name

Η παράμετρος $name θα συμπληρωθεί με το όνομα λογαριασμού του χρήστη. Σε ορισμένες περιπτώσεις είναι βολικό να ορίσετε μια προεπιλεγμένη τιμή για κάποιο τύπο. Για παράδειγμα, για τον τύπο exec είναι πολύ συνηθισμένο να καθορίζονται οι κατάλογοι στους οποίους πρέπει να αναζητά το εκτελέσιμο αρχείο:

Exec ( διαδρομή => "/usr/bin:/bin:/usr/sbin:/sbin" )

Εάν πρέπει να δείξετε πολλά ένθετα αρχεία και καταλόγους, μπορείτε να χρησιμοποιήσετε την παράμετρο recurse:

αρχείο("/etc/apache2/conf.d":

Πηγή => "puppet:// puppet://server.domain.com/config/apache/conf.d",

Recurse => "αληθινό"

Πολλοί πόροι μπορούν να συνδυαστούν σε κλάσεις ή ορισμούς. Οι κλάσεις είναι μια πλήρης περιγραφή ενός συστήματος ή μιας υπηρεσίας και χρησιμοποιούνται ξεχωριστά:

κλάση linux (

Αρχείο (

"/etc/passwd": ιδιοκτήτης => ρίζα, ομάδα => ρίζα, λειτουργία => 644;

"/etc/shadow": ιδιοκτήτης => ρίζα, ομάδα => ρίζα, λειτουργία => 440

Όπως και στις αντικειμενοστρεφείς γλώσσες, οι κλάσεις μπορούν να παρακαμφθούν. Για παράδειγμα, στο FreeBSD ο κάτοχος της ομάδας αυτών των αρχείων είναι ο τροχός. Επομένως, για να μην ξαναγράψουμε εντελώς τον πόρο, ας δημιουργήσουμε μια νέα κλάση freebsd, η οποία θα κληρονομήσει την κλάση linux:

Η κλάση freebsd κληρονομεί το Linux (

Αρχείο["/etc/passwd"] ( group => wheel );

Αρχείο["/etc/shadow"] (ομάδα => τροχός)

Για ευκολία, όλες οι κλάσεις μπορούν να τοποθετηθούν σε ξεχωριστό αρχείο, το οποίο πρέπει να συμπεριληφθεί χρησιμοποιώντας την οδηγία συμπερίληψης. Οι ορισμοί μπορούν να λάβουν πολλές παραμέτρους ως ορίσματα, αλλά δεν υποστηρίζουν κληρονομικότητα και χρησιμοποιούνται όταν χρειάζεται να περιγράψετε επαναχρησιμοποιήσιμα αντικείμενα. Για παράδειγμα, ας ορίσουμε τον αρχικό κατάλογο του χρήστη και τις εντολές που απαιτούνται για τη δημιουργία ενός νέου λογαριασμού:

ορίστε user_homedir ($group, $fullname, $inggroups) (

Χρήστης("$name":

Εξασφαλίστε => παρόν,

Σχόλιο => "$fullname",

Gid => "$group",

Ομάδες => $inggroups,

Συνδρομή => ελάχιστη,

Shell => "/bin/bash",

Αρχική σελίδα => "/home/$name",

Απαιτείται => Ομάδα[$group],

Exec("$name homedir":

Εντολή => "/bin/cp -R /etc/skel /home/$name; /bin/chown -R $name:$group /home/$name",

Δημιουργεί => "/home/$name",

Απαιτείται => Χρήστης[$name],

Τώρα, για να δημιουργήσετε έναν νέο λογαριασμό, απλώς επικοινωνήστε με το user_homedir:

user_homedir("sergej":

Ομάδα => "sergej",

Πλήρες όνομα => "Sergej Jaremchuk",

Ingroups => ["μέσα", "διαχειριστής]

Υπάρχουν ξεχωριστές περιγραφές κόμβων που υποστηρίζουν κληρονομικότητα, καθώς και κλάσεων. Όταν ένας πελάτης συνδέεται στον διακομιστή Puppet, θα γίνει αναζήτηση στην αντίστοιχη ενότητα κόμβου και θα παρέχονται ρυθμίσεις που αφορούν μόνο αυτόν τον υπολογιστή. Για να περιγράψετε όλα τα άλλα συστήματα, μπορείτε να χρησιμοποιήσετε την προεπιλογή κόμβου. Μια περιγραφή όλων των τύπων δίνεται στο έγγραφο «Type Reference», το οποίο πρέπει να διαβαστεί σε κάθε περίπτωση, τουλάχιστον για να κατανοηθούν όλες οι δυνατότητες της γλώσσας Puppet. Διάφοροι τύποι σάς επιτρέπουν να εκτελείτε καθορισμένες εντολές, όπως όταν πληρούνται ορισμένες προϋποθέσεις (για παράδειγμα, αλλαγή αρχείου διαμόρφωσης), εργασία με cron, διαπιστευτήρια χρήστη και ομάδες, υπολογιστές, τοποθέτηση πόρων, εκκίνηση και διακοπή υπηρεσιών, εγκατάσταση, ενημέρωση και κατάργηση πακέτων , εργασία με κλειδιά SSH, ζώνες Solaris και ούτω καθεξής. Έτσι μπορείτε εύκολα να αναγκάσετε τη λίστα των πακέτων σε διανομές χρησιμοποιώντας το apt να ενημερώνεται καθημερινά μεταξύ 2 και 4 ωρών:

πρόγραμμα (καθημερινά:

Περίοδος => καθημερινά,

Εύρος =>

exec("/usr/bin/apt-get ενημέρωση":

Πρόγραμμα => καθημερινά

Η ενημέρωση για αυτήν την περίοδο θα εκτελεστεί από κάθε σύστημα μόνο μία φορά, μετά την οποία η εργασία θεωρείται ολοκληρωμένη και θα διαγραφεί από τον υπολογιστή-πελάτη. Η γλώσσα Puppet υποστηρίζει άλλες γνωστές δομές: συνθήκες, συναρτήσεις, πίνακες, σχόλια και παρόμοια.

Εγκατάσταση Puppet

Το Puppet απαιτεί Ruby (έκδοση 1.8.1 και νεότερη) με υποστήριξη OpenSSL και βιβλιοθήκες XMLRPC, καθώς και τη βιβλιοθήκη Faster. Το αποθετήριο Ubuntu 7.04 που χρησιμοποιήθηκε για τη δοκιμαστική εγκατάσταση περιλαμβάνει ήδη το πακέτο κουταβιού:

$ sudo apt-cache μαριονέτα αναζήτησης

~$ ruby‎ -rxmlrpc/client -e "puts:yep"

ναι

Εάν δεν ληφθούν σφάλματα, τότε όλα όσα χρειάζεστε περιλαμβάνονται ήδη. Τα αρχεία που περιγράφουν την επιθυμητή διαμόρφωση συστημάτων ονομάζονται manifests στην ορολογία Puppet. Κατά την εκκίνηση, ο δαίμονας προσπαθεί να διαβάσει το αρχείο /etc/puppet/manifests/site.pp· εάν λείπει, εμφανίζει ένα προειδοποιητικό μήνυμα. Κατά τη δοκιμή, μπορείτε να πείτε στον δαίμονα να εκτελείται σε αυτόνομη λειτουργία, η οποία δεν απαιτεί δήλωση:

$ sudo /usr/bin/puppetmasterd --nonodes

Εάν είναι απαραίτητο, μπορείτε να συνδέσετε άλλα αρχεία στο site.pp, για παράδειγμα, με περιγραφές κλάσεων. Για μια δοκιμαστική εκτέλεση, μπορείτε να εισαγάγετε τις απλούστερες οδηγίες σε αυτό το αρχείο.

τάξη sudo (

Αρχείο("/etc/sudoers":

Ιδιοκτήτης => ρίζα,

Ομάδα => ρίζα,

Λειτουργία => 440,

προεπιλογή κόμβου(

Συμπεριλάβετε το sudo

Όλα τα αρχεία ρυθμίσεων, τόσο ο διακομιστής όσο και ο πελάτης, βρίσκονται στο /etc/puppet. Το αρχείο fileserver.conf, για το οποίο έχουμε ήδη μιλήσει, είναι προαιρετικό και χρησιμοποιείται μόνο εάν το Puppet θα λειτουργήσει και ως διακομιστής αρχείων. Στο Ubuntu, αυτό το αρχείο εξάγει τον υποκατάλογο /etc/puppet/files. Ο υποκατάλογος ssl περιέχει πιστοποιητικά και κλειδιά που θα χρησιμοποιηθούν για κρυπτογράφηση κατά τη σύνδεση πελατών. Τα κλειδιά δημιουργούνται αυτόματα την πρώτη φορά που ξεκινάτε το puppetmasterd. Μπορείτε να τα δημιουργήσετε χειροκίνητα με την εντολή:

$ sudo /usr/bin/puppetmasterd --mcusers

Τα αρχεία puppetd.conf και puppetmasterd.conf είναι παρόμοια. Υποδεικνύουν ορισμένες παραμέτρους για τη λειτουργία των δαιμόνων στο σύστημα πελάτη και στο διακομιστή. Το αρχείο πελάτη διαφέρει μόνο με την παρουσία της παραμέτρου διακομιστή, η οποία δείχνει τον υπολογιστή στον οποίο εκτελείται το puppetmasterd:

διακομιστής = grinder.com

logdir = /var/log/μαριονέτα

vardir = /var/lib/μαριονέτα

rundir = /var/run

# αποστολή αναφοράς στον διακομιστή

αναφορά = αληθής

Για να αποφύγετε να πληκτρολογείτε τα πάντα με μη αυτόματο τρόπο, μπορείτε να δημιουργήσετε ένα πρότυπο χρησιμοποιώντας το ίδιο το puppetd:

$ puppetd --genconfig > /etc/puppet/puppetd.conf

Ομοίως, μπορείτε να δημιουργήσετε site.pp στον διακομιστή:

$ puppetd --genmanifest > /etc/puppet/manifests/site.pp

Ένα άλλο αρχείο, το tagmail.conf, σας επιτρέπει να καθορίσετε τις διευθύνσεις email στις οποίες θα αποστέλλονται αναφορές. Στην απλούστερη περίπτωση, μπορείτε να χρησιμοποιήσετε μία γραμμή:

όλα: [email προστατευμένο]

Τα αρχεία διαμόρφωσης δεν επαρκούν για να συνδεθεί ο πελάτης στον διακομιστή. Για να το κάνετε αυτό, πρέπει επίσης να υπογράψετε τα πιστοποιητικά.

Αρχικά, για να ενημερώσετε τον διακομιστή σχετικά με τον νέο υπολογιστή, εισαγάγετε την εντολή στο σύστημα πελάτη:

$ sudo puppetd --server grinder.com --waitforcert 60 –test

Το τείχος προστασίας πρέπει να επιτρέπει συνδέσεις στη θύρα 8140.

Στον διακομιστή λαμβάνουμε μια λίστα με πιστοποιητικά που πρέπει να υπογραφούν:

$ sudo puppetca –list

nomad.grinder.com

Και υπογράψτε το πιστοποιητικό πελάτη:

$ sudo puppetca –sign nomad.grinder.com

Τώρα ο πελάτης μπορεί ελεύθερα να συνδεθεί στον διακομιστή και να λάβει ρυθμίσεις.

Δυστυχώς, είναι αδύνατο να εμφανιστούν όλες οι δυνατότητες του Puppet μέσα στο άρθρο. Αλλά, όπως μπορείτε να δείτε, αυτό είναι ένα λειτουργικό και ευέλικτο εργαλείο που σας επιτρέπει να λύσετε τα περισσότερα από τα προβλήματα της ταυτόχρονης διαχείρισης μεγάλου αριθμού συστημάτων. Και το πιο σημαντικό, το έργο κατάφερε να συγκεντρώσει μια μικρή αλλά συνεχώς αυξανόμενη κοινότητα. Επομένως, ας ελπίσουμε ότι μια καλή ιδέα δεν θα αφεθεί να πεθάνει ή να παραμεριστεί.

Καλή τύχη!

  1. Ιστότοπος του έργου BladeLogic – http://www.bladelogic.com.
  2. Ο ιστότοπος του έργου OpsWare είναι http://www.opsware.com.
  3. Ο ιστότοπος του έργου Cfengine είναι http://www.cfengine.org.
  4. Ο ιστότοπος του έργου Puppet είναι http://reductivelabs.com/projects/puppet.
  5. Puppet CookBook - http://www.reductivelabs.com/trac/puppet/tagspuppet%2Crecipe.
  6. Ταχύτερη Βιβλιοθήκη –



Μπλουζα