Kompletan početnički vodič za kuhara i infrastrukturu kao kod

Posljednjih nekoliko tjedana puno sam kopao po Chefu. Iako je dokumentacija dobra, bilo je puno slučajeva kad sam zapeo bez ikakvog pojma. Stoga ću detaljno predstaviti šefa kuhinje. Ako uopće niste čuli za kuhara (poput mene prije nekoliko mjeseci), ne brinite, objasnit ću vam sve.

Što je Chef i zašto?

Chef je moćna automatizacijska platforma koja transformira infrastrukturu u kod. Kuhar automatizira način na koji se infrastruktura konfigurira, postavlja i upravlja širom vaše mreže, bez obzira na njezinu veličinu.

Ali što znači infrastruktura kao kod? Dakle, recimo da imate Java aplikaciju koju treba instalirati na jednom stroju. Za to vam nije potrebna automatizacija - to možete učiniti ručno.

Ali što se događa kada jedan stroj ne može podnijeti opterećenje, a svoju aplikaciju trebate rasporediti na još 10 ili 50 ili 100 računala? Ovdje dolazi Chef. Umjesto da ručno postavljate svoju aplikaciju na svaki pojedini stroj, možete napisati kod koji to čini umjesto vas.

Terminologija

  1. Radna stanica - vaš lokalni stroj, poznat i kao vaš laptop. Ovdje napišete svoj kôd koji se zatim gurne na vaš kuharski poslužitelj.
  2. Chef Server - Ovdje se nalazi sav vaš kôd. Sadrži i sve informacije o čvorovima.
  3. Nodes aka Chef Client - Strojevi na kojima treba raditi vaš kôd. Možete koristiti nešto poput vagranta za potrebe učenja i aws / gcp u proizvodnji. Vaši čvorovi povlače najnoviji kôd s vašeg kuharskog poslužitelja.

Početak rada s kuharom

Za početak prvo moramo instalirati ChefDK na našu radnu stanicu. ChefDK je Chefov razvojni komplet koji sadrži sve alate potrebne za početak korištenja chefa. ChefDK možete instalirati odavde.

Nakon što instalirate ChefDK, pokrenite sljedeću naredbu:

chef generate cookbook testingCheftree testingChef

To je struktura koju generira naredba chef generiraj kuharicu . Idemo pregledati svaku datoteku da vidimo što rade.

Kuharice

Kuharica je temeljna konfiguracijska jedinica kojoj je cilj postići neko željeno stanje uz pomoć drugih komponenata, poput recepata, predložaka, datoteka itd. Prema zadanim postavkama, kada generirate kuharicu, dobivate samo mapu s receptima. Međutim, možete stvoriti mape za predloške i druge komponente, također ako ih planirate koristiti (o njima ćemo kasnije).

Recimo da želite pokrenuti Java aplikaciju na stroju. Za to su potrebne dvije stvari:

  1. Na vašem računalu mora biti instalirana Java.
  2. Mora imati aplikaciju za pokretanje.

Tada možete pokrenuti aplikaciju.

Dakle, izradite kuharicu koja, kada se izvodi na čvoru, instalira javu na taj čvor, dohvaća aplikaciju koju morate pokrenuti i pokreće tu aplikaciju.

Resursi kuhara

Resurs je Ruby blok s četiri komponente: tipom, imenom, jednim (ili više) svojstava (s vrijednostima) i jednom (ili više) radnjama. Sintaksa resursa je sljedeća:

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

Recimo da želite instalirati OpenJDK 7 na svoj čvor. Da biste to učinili, možete koristiti resurse paketa dostupne u chefu.

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

Akcija: instalirati je zadana akcija za paket resursa, tako da možete preskočiti ako želite.

package 'java-1.7.0-openjdk'

Da biste pokrenuli cronJob na vašem čvoru, možete koristiti cron resurs.

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

Ovisno o tome što želite postići, postoji puno ugrađenih resursa za kuhara koje možete koristiti. Više o njima možete pročitati ovdje.

Recepti

Recept je zbirka resursa koja nastoji vaš čvor približiti korak do željenog stanja. Recepti su napisani rubinom.

Za pokretanje recepta koristimo sljedeću naredbu:

chef-client -z pathToRecipe

Oznaka -zimplicira da bi se chef-klijent trebao izvoditi u lokalnom načinu jer nismo povezani ni s jednim chef poslužiteljem. U slučaju da su vaši čvorovi povezani s poslužiteljem, ne morate koristiti -zzastavicu.

************************** 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

Metapodaci i Berksfile

Kada radite na kuharici, ne morate započeti s prvim korakom, jer postoji velika vjerojatnost da je netko već sagradio nešto slično, a vi mu možete samo produžiti posao.

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. knife node show ${nodeName} — This command is used to get information about your node which includes recipes, environment, platform etc.

3. knife cookbook list ${nodeName} — This command is used to get all the cookbooks associated with your node

That’s about it ! Thank you for reading, and I hope you enjoyed the article.

You can follow me on Medium and Github :)