Ένας πλήρης οδηγός για αρχάριους σεφ και υποδομή ως κωδικός

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

Τι είναι ο σεφ και γιατί;

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

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

Αλλά τι συμβαίνει όταν ένα μηχάνημα δεν μπορεί να χειριστεί το φορτίο και πρέπει να αναπτύξετε την εφαρμογή σας σε 10 ή 50 ή 100 περισσότερα μηχανήματα; Εδώ μπαίνει ο Chef. Αντί να αναπτύξετε χειροκίνητα την εφαρμογή σας σε κάθε μηχάνημα, μπορείτε να γράψετε κώδικα που να το κάνει για εσάς.

Ορολογία

  1. Σταθμός εργασίας - το τοπικό μηχάνημά σας γνωστό και ως φορητός υπολογιστής Εδώ γράφετε τον κωδικό σας, ο οποίος στη συνέχεια μεταφέρεται στον διακομιστή του σεφ σας.
  2. Chef Server - Εδώ βρίσκεται όλος ο κώδικάς σας. Περιέχει επίσης όλες τις πληροφορίες σχετικά με τους κόμβους.
  3. Κόμβοι aka Chef Client - Οι μηχανές όπου πρέπει να εκτελείται ο κωδικός σας. Μπορείτε να χρησιμοποιήσετε κάτι σαν αδρανές για μαθησιακούς σκοπούς και aws / gcp στην παραγωγή. Κόμβους σας τραβήξει τις τελευταίες κώδικα από το διακομιστή σας σεφ.

Ξεκινώντας με τον σεφ

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

Μόλις εγκαταστήσετε το ChefDK, εκτελέστε την ακόλουθη εντολή:

chef generate cookbook testingCheftree testingChef

Αυτή είναι η δομή που δημιουργείται από την εντολή cookbook create chef . Ας δούμε κάθε αρχείο για να δούμε τι κάνουν.

Βιβλία μαγειρικής

Ένα βιβλίο μαγειρικής είναι η θεμελιώδης μονάδα διαμόρφωσης που στοχεύει να επιτύχει κάποια επιθυμητή κατάσταση με τη βοήθεια άλλων στοιχείων όπως συνταγές, πρότυπα, αρχεία κ.λπ. Από προεπιλογή, όταν δημιουργείτε ένα βιβλίο μαγειρικής, λαμβάνετε μόνο ένα φάκελο συνταγών. Ωστόσο, μπορείτε να δημιουργήσετε φακέλους για πρότυπα και άλλα στοιχεία επίσης εάν σκοπεύετε να τα χρησιμοποιήσετε (θα μιλήσουμε για αυτά αργότερα).

Ας υποθέσουμε ότι θέλετε να εκτελέσετε μια εφαρμογή java σε έναν υπολογιστή. Υπάρχουν δύο πράγματα που απαιτούνται για αυτό:

  1. Το μηχάνημά σας πρέπει να έχει εγκατασταθεί java.
  2. Πρέπει να έχει την εφαρμογή για εκτέλεση.

Στη συνέχεια, μπορείτε να εκτελέσετε την εφαρμογή.

Έτσι δημιουργείτε ένα βιβλίο μαγειρικής που, όταν εκτελείται σε έναν κόμβο, εγκαθιστά το java σε αυτόν τον κόμβο, παίρνει την εφαρμογή που πρέπει να εκτελέσετε και εκτελεί αυτήν την εφαρμογή.

Πόροι σεφ

Ένας πόρος είναι ένα μπλοκ Ruby με τέσσερα στοιχεία: έναν τύπο, ένα όνομα, μία (ή περισσότερες) ιδιότητες (με τιμές) και μία (ή περισσότερες) ενέργειες. Η σύνταξη για έναν πόρο έχει ως εξής:

type 'name' do attribute 'value' action :type_of_actionend

Ας υποθέσουμε ότι θέλετε να εγκαταστήσετε το OpenJDK 7 στον κόμβο σας. Για να το κάνετε, μπορείτε να χρησιμοποιήσετε τον πόρο του πακέτου που διατίθεται στον σεφ.

package 'java-1.7.0-openjdk' do action :installend

Η ενέργεια: install είναι η προεπιλεγμένη ενέργεια για πόρο πακέτου, οπότε μπορείτε να το παραλείψετε αν θέλετε.

package 'java-1.7.0-openjdk'

Για να εκτελέσετε ένα cronJob στον κόμβο σας, μπορείτε να χρησιμοποιήσετε τον πόρο cron .

cron 'reporting' do action :create minute '0' hour '0' weekday '1' command "/srv/app/scripts/daily_report" # Path of script to runend

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

Συνταγές

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

Για να εκτελέσετε μια συνταγή, χρησιμοποιούμε την ακόλουθη εντολή:

chef-client -z pathToRecipe

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

************************** default.rb ****************************
/* This is an example recipe to install install httpd (Apache HyperText Transfer Protocol (HTTP) server program), creates a file on the node at /var/www/html/index.html (default path for serving web pages on apache server) and starts the service on a centOS based machine */
package 'httpd'
file '/var/www/html/index.html' do content 'This is a placeholder for the home page.'end
service 'httpd' do action [:enable, :start]end

Μεταδεδομένα και Berksfile

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

This is where the Chef Supermarket comes in. It contains community cookbooks which you can use as dependencies in your own cookbook. These dependencies are listed in the metadata.rb file or even in your Berksfile. But then the question arises: how are they different?

************************* Berksfile ********************************source '//supermarket.chef.io' # Fetch dependencies from here
metadata

When you upload your cookbook on the chef server, you must also upload your cookbook’s dependencies. This is where Berks help. You just have to run two simple commands:

berks install berks upload

which download all the dependencies of your cookbooks and upload all of them to the chef server. The dependency cookbooks are present at

~/.berkshelf/cookbooks/

In case you updated your cookbook and want to re-upload them on the chef server, then you must update the version in the metadata file. Otherwise when you use the berks upload command, the new recipe won’t be uploaded unless you force an upload.

**************************** metadata.rb ***************************name 'testingChef'maintainer 'The Authors'maintainer_email '[email protected]'license 'All Rights Reserved'description 'Installs/Configures testingChef'long_description 'Installs/Configures testingChef'version '0.1.0' # Update after changes are made to the cookbookchef_version '>= 12.14' if respond_to?(:chef_version)
depends 'haproxy', '~> 6.2.6'

Chefignore

Put files/directories that should be ignored in this file when uploading

or sharing cookbooks to the community site.

Ohai

When we install CheckDK, we also get ohai with it. Every time you run chef-client on your node, chef runs ohai before that. Ohai collects a lot of system information. The types of attributes Ohai collects include, but are not limited to:

  • Operating System
  • Network
  • Memory
  • Disk
  • CPU

When running ohai you get a lot of output, so be mindful of what you want and write your commands accordingly.

Now if want, we can use all this information in our recipes. All we have to do is refer to a particular property of the node.

if node['hostname'] == "Some hostname" do // do something only if the nodes hostname matchesend

Knife

Knife is a tool which you use to communicate with the chef server. If you want to know anything about your nodes or want to update anything like their recipes, knife is the way to go. There are more than a dozen knife commands. Here are some of them

  1. knife bootstrap— This command is used to create a new node and attach that to your chef server. When bootstrapping a node, chef installs everything like ohai, chef-client on the node and it also runs chef-client automatically. For any subsequent changes made to that node, you need to run chef-client manually to update your node.
  2. κόμβος μαχαιριού show $ {nodeName} - Αυτή η εντολή χρησιμοποιείται για τη λήψη πληροφοριών σχετικά με τον κόμβο σας που περιλαμβάνει συνταγές, περιβάλλον, πλατφόρμα κ.λπ.

3. λίστα βιβλίων μαγειρικής μαχαιριών $ {nodeName} - Αυτή η εντολή χρησιμοποιείται για τη σύνδεση όλων των βιβλίων μαγειρικής με τον κόμβο σας

Για αυτό πρόκειται ! Σας ευχαριστούμε που διαβάσατε και ελπίζω να απολαύσατε το άρθρο.

Μπορείτε να με ακολουθήσετε στο Medium και το Github :)