Išsamus virėjo ir infrastruktūros kaip kodo vadovas pradedantiesiems

Pastarąsias kelias savaites aš daug kasinėjau virėją. Nors dokumentacija yra gera, buvo daug kartų, kai buvau įstrigęs be jokio supratimo. Taigi šefui pateiksiu išsamią įžangą. Jei dar visai negirdėjote apie virėją (pavyzdžiui, aš kelis mėnesius atgal), nesijaudinkite, aš visa tai paaiškinsiu.

Kas yra virėjas ir kodėl?

„Chef“ yra galinga automatikos platforma, transformuojanti infrastruktūrą į kodą. Virėjas automatizuoja, kaip infrastruktūra konfigūruojama, diegiama ir valdoma visame jūsų tinkle, neatsižvelgiant į jos dydį.

Bet ką reiškia infrastruktūra kaip kodas? Tarkime, kad turite „Java“ programą, kurią reikia įdiegti vienoje mašinoje. Tam nereikia automatikos - galite tai padaryti rankiniu būdu.

Bet kas nutinka, kai viena mašina negali atlaikyti apkrovos ir jums reikia įdiegti programą dar 10, 50 ar 100 mašinų? Čia ateina virėjas. Užuot rankiniu būdu įdiegę programą kiekvienoje mašinoje, galite parašyti kodą, kuris tai padarys už jus.

Terminologija

  1. Darbo stotis - jūsų vietinė mašina, taip pat nešiojamas kompiuteris. Tai kur rašote kodą, kuris tada stumiama į savo virėjo serveryje.
  2. „Chef Server“ - čia yra visas jūsų kodas. Jame taip pat yra visa informacija apie mazgus.
  3. „Nodes“, dar žinomas kaip „Chef Client“ - mašinos, kuriose turi veikti jūsų kodas. Mokymosi tikslais galite naudoti kažką panašaus į valkatą, o gamyboje - aws / gcp. Jūsų mazgai traukia naujausią kodą iš jūsų virėjo serverio.

Darbo su virėju pradžia

Norėdami pradėti, pirmiausia turime įdiegti „ ChefDK “ savo darbo vietoje. „ChefDK“ yra virėjo kūrimo rinkinys, kuriame yra visi įrankiai, kurių reikia norint pradėti naudoti virėją. Čia galite įdiegti „ChefDK“.

Įdiegę „ChefDK“, vykdykite šią komandą:

chef generate cookbook testingCheftree testingChef

Tai yra struktūra, kurią sukuria virėjas generuoja kulinarinių knygų komandą. Peržiūrėkime kiekvieną failą, kad pamatytume, ką jie daro.

Kulinarijos knygos

Virėjų knyga yra pagrindinis konfigūracijos vienetas, kurio tikslas yra pasiekti norimą būseną naudojant kitus komponentus, pvz., Receptus, šablonus, failus ir kt. Pagal numatytuosius nustatymus, sugeneruodami kulinarinę knygą, gausite tik receptų aplanką. Vis dėlto galite sukurti aplankus šablonams ir kitiems komponentams, jei ketinate juos naudoti (apie juos pakalbėsime vėliau).

Tarkime, kad kompiuteryje norite paleisti „Java“ programą. Tam reikalingi du dalykai:

  1. Jūsų kompiuteryje turi būti įdiegta „Java“.
  2. Norint paleisti, ji turi turėti programą.

Tada galite paleisti programą.

Taigi, jūs sukuriate kulinarinę knygą, kuri, vykdoma mazge, įdiegia „Java“ tame mazge, atima programą, kurią turite paleisti, ir paleidžia tą programą.

Virėjo ištekliai

Ištekliai yra „Ruby“ blokas, sudarytas iš keturių komponentų: tipo, pavadinimo, vienos (ar daugiau) savybių (su reikšmėmis) ir vieno (ar daugiau) veiksmų. Ištekliaus sintaksė yra tokia:

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

Tarkime, kad norite įdiegti „OpenJDK 7“ savo mazge. Norėdami tai padaryti, galite naudoti virėjo turimą paketo šaltinį.

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

Action: install“ yra numatytasis paketo išteklių veiksmas, todėl, jei norite, galite tai praleisti.

package 'java-1.7.0-openjdk'

Norėdami paleisti „cronJob“ savo mazge, galite naudoti „ cron“ šaltinį.

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

Priklausomai nuo to, ko norite pasiekti, galite naudoti daugybę virėjų išteklių, kuriuos galite naudoti. Daugiau apie juos galite perskaityti čia.

Receptai

Receptas yra išteklių rinkinys, linkęs priartinti jūsų mazgą vienu žingsniu arčiau norimos būsenos. Receptai rašomi rubinais.

Norėdami paleisti receptą, mes naudojame šią komandą:

chef-client -z pathToRecipe

-zVėliava reiškia, kad virėja-klientas turėtų veikti vietos režimu, nes mes ne prijungtas prie bet kurio virėjo serveryje. Jei jūsų mazgai yra prijungti prie serverio, nereikia naudoti -zžymos.

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

Metaduomenys ir „Berksfile“

Kuriant kulinarinę knygą, nereikia pradėti nuo pirmo žingsnio, nes yra didelė tikimybė, kad kažkas jau sukūrė kažką panašaus ir jūs galite tiesiog pratęsti jų darbą.

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. peilio mazgas rodo $ {nodeName} - ši komanda naudojama norint gauti informacijos apie jūsų mazgą, įskaitant receptus, aplinką, platformą ir kt.

3. peilių kulinarinių knygų sąrašas $ {nodeName} - ši komanda naudojama norint gauti visas su jūsų mazgu susietas kulinarines knygas

Viskas apie tai! Ačiū, kad skaitėte, ir tikiuosi, kad jums patiko straipsnis.

Galite sekti mane „Medium“ ir „Github“ :)