Teljes útmutató kezdőnek a szakácsról és az infrastruktúráról mint kódról

Az elmúlt hetekben sokat ástam a Chef-et. Bár a dokumentáció jó, sokszor előfordult, hogy ragaszkodtam semmiféle nyomomhoz. Tehát mélyreható bevezetést fogok adni a szakácsnak. Ha egyáltalán nem hallottál a séfről (például néhány hónapja, mint én), ne aggódj, mindezt elmagyarázom.

Mi a Chef és miért?

A Chef egy erőteljes automatizálási platform, amely az infrastruktúrát kóddá alakítja. A szakács automatizálja az infrastruktúra konfigurálását, telepítését és kezelését az egész hálózaton, méretétől függetlenül.

De mit jelent az infrastruktúra mint kód? Tehát tegyük fel, hogy van egy Java alkalmazásod, amelyet egyetlen gépen kell telepíteni. Ehhez nincs szükség automatizálásra - manuálisan is megteheti.

De mi történik, ha egyetlen gép nem képes kezelni a terhelést, és 10, 50 vagy 100 gépre kell telepítenie az alkalmazását? Itt jön be a szakács. Ahelyett, hogy az alkalmazást manuálisan telepítené minden gépre, írhat kódot, amely megteszi az Ön számára.

Terminológia

  1. Munkaállomás - a helyi gép, más néven a laptop. Itt írja meg a kódot, amelyet aztán tolta a szakács szerver.
  2. Chef Server - Itt található az összes kód. Ez tartalmazza a csomópontokra vonatkozó összes információt is.
  3. Csomópontok, más néven Chef Client - Azok a gépek, ahol a kódnak futtatnia kell. Valami olyasmit használhat, mint a csavargó tanulási célokra, az aws / gcp pedig a gyártásban. A csomópontok a legfrissebb kódot húzzák ki a szakácsszerverről.

Első lépések a szakácsnál

A kezdéshez először telepítenünk kell a ChefDK -t a munkaállomásunkra. A ChefDK a Chef fejlesztőkészlet, amely tartalmazza az összes eszközt, amely a szakács használatának megkezdéséhez szükséges. A ChefDK-t innen telepítheti.

A ChefDK telepítése után futtassa a következő parancsot:

chef generate cookbook testingCheftree testingChef

Ezt a struktúrát a séf generálja szakácskönyv parancs generálja . Nézzünk át minden fájlt, hogy lássuk, mit csinálnak.

Szakácskönyvek

A szakácskönyv a konfiguráció alapvető egysége, amelynek célja más összetevők, például receptek, sablonok, fájlok stb. Akkor is létrehozhat mappákat sablonokhoz és egyéb összetevőkhöz, ha használni kívánja őket (később beszélünk róluk).

Tegyük fel, hogy java alkalmazást szeretne futtatni egy gépen. Ehhez két dolog szükséges:

  1. A gépen java telepítve kell lennie.
  2. A futtatásához rendelkeznie kell az alkalmazással.

Ezután futtathatja az alkalmazást.

Tehát létrehoz egy szakácskönyvet, amely egy csomóponton futva telepíti a java-t erre a csomópontra, beolvassa az Ön által futtatni kívánt alkalmazást, és futtatja azt.

Szakács források

Az erőforrás egy Ruby-blokk, amelynek négy összetevője van: egy típus, egy név, egy (vagy több) tulajdonság (értékekkel) és egy (vagy több) művelet. Az erőforrás szintaxisa a következő:

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

Tegyük fel, hogy telepíteni szeretné az OpenJDK 7-et a csomópontjára. Ehhez használhatja a szakácsban elérhető csomag erőforrást.

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

Az Action: install a csomagerőforrás alapértelmezett művelete, így ezt kihagyhatja, ha akarja.

package 'java-1.7.0-openjdk'

A csomóponton lévő cronJob futtatásához használhatja a cron erőforrást.

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

Attól függően, hogy mit szeretne elérni, rengeteg beépített szakácsforrás használható, amelyeket felhasználhat. Bővebben itt olvashat róluk.

Receptek

A recept olyan erőforrások gyűjteménye, amely hajlamos arra, hogy a csomópontját egy lépéssel közelebb hozza a kívánt állapothoz. A recepteket rubinban írják.

Egy recept futtatásához a következő parancsot használjuk:

chef-client -z pathToRecipe

A -zzászló azt jelenti, hogy a séf-kliensnek helyi módban kell futtatnia, mivel egyetlen séfkiszolgálóhoz sem kapcsolódunk. Abban az esetben, ha a csomópontok kapcsolódnak a szerverhez, nem kell használni a -zzászlót.

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

Metaadatok és Berksfile

Szakácskönyv kidolgozásakor nem kell az első lépéstől kezdeni, mivel nagy az esély arra, hogy valaki már épített valami hasonlót, és Ön csak meghosszabbíthatja a munkáját.

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