Комплетни водич за почетнике о кувару и инфраструктури као коду

Последњих неколико недеља пуно сам копао по кувару. Иако је документација добра, било је доста случајева када сам заглавио без икаквог појма. Тако да ћу детаљно представити шефа кухиње. Ако уопште нисте чули за шефа кухиње (попут мене пре неколико месеци), не брините, све ћу вам објаснити.

Шта је кувар и зашто?

Цхеф је моћна платформа за аутоматизацију која трансформише инфраструктуру у код. Кувар аутоматизује начин на који је инфраструктура конфигурисана, постављена и којом се управља широм ваше мреже, без обзира на њену величину.

Али шта значи инфраструктура као код? Дакле, рецимо да имате Јава апликацију коју треба применити на једној машини. За то вам није потребна аутоматизација - то можете учинити ручно.

Али шта се дешава када једна машина не може да поднесе терет и треба да примените апликацију на још 10 или 50 или 100 машина? Овде долази Цхеф. Уместо да ручно примените своју апликацију на свакој машини, можете да напишете код који то чини уместо вас.

Терминологија

  1. Радна станица - ваша локална машина која се зове и ваш лаптоп. Овде пишете свој код који се затим прослеђује на ваш куварски сервер.
  2. Цхеф Сервер - Овде се налази сав ваш код. Такође садржи све информације о чворовима.
  3. Нодес ака Цхеф Цлиент - Машине на којима ваш код треба да ради. Можете користити нешто попут вагранта за потребе учења и авс / гцп у производњи. Ваши чворови повлаче најновији код са вашег цхеф сервера.

Почетак рада са куваром

Да бисмо започели, прво морамо да инсталирамо ЦхефДК на нашу радну станицу. ЦхефДК је Цхеф развојни комплет који садржи све алате потребне за почетак употребе цхеф-а. ЦхефДК можете инсталирати одавде.

Након што инсталирате ЦхефДК, покрените следећу команду:

chef generate cookbook testingCheftree testingChef

Ово је структура коју генерише наредба кувара генериши кувар . Идемо преко сваке датотеке да видимо шта раде.

Куварице

Кувар је основна јединица конфигурације која има за циљ постизање жељеног стања уз помоћ других компоненти попут рецепата, шаблона, датотека итд. Подразумевано, када генеришете куварицу, добијате само фасциклу рецепата. Међутим, можете креирати фасцикле за предлошке и друге компоненте и ако планирате да их користите (о њима ћемо касније).

Рецимо да желите да покренете јава апликацију на машини. За то су потребне две ствари:

  1. На вашој машини мора бити инсталирана Јава.
  2. Мора да има апликацију за покретање.

Тада можете покренути апликацију.

Дакле, креирате књигу кувара која, када се покрене на чвору, инсталира јаву на тај чвор, преузима апликацију коју морате да покренете и покреће ту апликацију.

Ресурси кувара

Ресурс је Руби блок са четири компоненте: типом, именом, једним (или више) својстава (са вредностима) и једном (или више) радњама. Синтакса за ресурс је следећа:

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

Рецимо да желите да инсталирате ОпенЈДК 7 на ваш чвор. Да бисте то урадили, можете користити ресурсе пакета доступне у цхеф-у.

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

Акције: инсталацију је стандардна акција за пакета ресурса, тако да можете прескочити ако желите.

package 'java-1.7.0-openjdk'

Да бисте покренули цронЈоб на вашем чвору, можете користити ресурс црон .

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

Метаподаци и Берксфиле

Када радите на куварици, не морате да започнете од првог корака, јер постоје велике шансе да је неко већ саградио нешто слично, а ви можете само да проширите свој посао.

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. схов ноде нод $ {нодеНаме} - Ова наредба се користи за добијање информација о вашем чвору које укључују рецепте, окружење, платформу итд.

3. листа кувара ножа $ {нодеНаме} - Ова наредба се користи за добијање свих књига кувара повезаних са вашим чвором

То је то ! Хвала вам што сте прочитали и надам се да вам се свидео чланак.

Можете ме пратити на Медиум и Гитхуб :)