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

Преди да научим Puppet, нека разберем:

Какво е управление на конфигурацията?

Управлението на конфигурацията е процес на поддържане на софтуер и компютърни системи (например сървъри, хранилища, мрежи) в известно, желано и последователно състояние. Той също така позволява достъп до точен исторически запис на състоянието на системата за целите на управлението на проекта и одита.

Системните администратори изпълняват предимно повтарящи се задачи като инсталиране на сървъри, конфигуриране на тези сървъри и т.н. Тези професионалисти могат да автоматизират тази задача, като пишат скриптове.

Трудна работа обаче е, когато работят върху масивна инфраструктура. Инструментът за управление на конфигурации като кукла беше въведен за решаване на такива проблеми.

Какво е кукла?

КУКЛЕН е инструмент за управление на системата за централизиране и автоматизиране на процеса на управление на конфигурацията. Puppet се използва и като инструмент за внедряване на софтуер. Това е софтуер за управление на конфигурации с отворен код, широко използван за конфигуриране на сървър, управление, внедряване и оркестриране на различни приложения и услуги в цялата инфраструктура на организацията.

Puppet е специално проектиран да управлява конфигурацията на Linux и Windows системи. Той е написан на Ruby и използва своя уникален д omain С пецифичен THE anguage (DSL), за да опише системната конфигурация.

Какви са версиите на куклите?

Puppet се предлага в две версии:

  • Кукла с отворен код : Това е основна версия на инструмента за управление на конфигурацията на Puppet, който е известен също като Open Source Puppet. Той е достъпен директно от уебсайта на Puppet и е лицензиран под системата Apache 2.0.
  • Куклено предприятие : Търговска версия, която предлага функции като отчитане на съответствието, оркестрация, ролево базиран контрол на достъпа, GUI, API и инструменти за командния ред за ефективно управление на възли.

Какво може да направи куклата?

Например имате инфраструктура с около 100 сървъра. Като системен администратор, вашата роля е да гарантирате, че всички тези сървъри винаги са актуални и работят с пълна функционалност.

Системният администратор работи ръчно на сървърите



За да направите това, можете да използвате Puppet, което ви позволява да напишете прост код, който може да бъде разгърнат автоматично на тези сървъри. Това намалява човешките усилия и прави процеса на развитие бърз и ефективен.

Puppet автоматизира управление на сървъра

как да внедря интерфейс в java

Puppet изпълнява следните функции:

  • Puppet ви позволява да дефинирате различни конфигурации за всеки хост.
  • Инструментът ви позволява непрекъснато да наблюдавате сървърите, за да потвърдите дали необходимата конфигурация съществува или не и не се променя. Ако конфигурацията се промени, Puppet tool ще се върне към предварително дефинираната конфигурация на хоста.
  • Той също така осигурява контрол над цялата конфигурирана система, така че централизирана промяна се извършва автоматично.
  • Използва се и като инструмент за разгръщане, тъй като автоматично разгръща софтуера в системата. Той реализира инфраструктурата като код, защото политиките и конфигурациите са написани като код.

Куклен DSL и парадигми за програмиране

Преди да научим Puppet DSL, нека разберем програмните парадигми:

Парадигмата за програмиране е стил, който използвате в компютърното програмиране.

Четири типа парадигми са:

  • Наложително.
  • Декларативна.
  • Функционален (който се счита за подмножество на тази декларативна парадигма)
  • Обектно-ориентиран.

Ще се съсредоточим върху Императив и Декларация.

Наложително:

Това парадигмата за програмиране изразява логиката на изчислението (Какво да правите) и описва неговия контролен поток (Как да направите)

Пример:

Да предположим, че отивате в офиса си, резервирате такси и започнете да давате стъпка по стъпка указания на шофьора, докато стигнете до офиса. Посочването на това какво да правите и как да направите е императивен стил.

Декларативно:

Тази програмна парадигма изразява логиката на изчислението (Какво да правите), без да описва неговия контролен поток (Как да направите)

Пример:

Да предположим, че отивате в офиса си, резервирате такси Uber и посочете крайната дестинация (Office). Посочването на това какво да правите не как да направите е декларативен стил.

Парадигма

Какво да правя

Как да се направи

Наложително

Да

Да

Декларативна

Да

Не

Puppet използва декларативна парадигма за програмиране

Puppet използва декларативен подход за програмиране.

Пример: Създайте потребител в системата:

Това може да се направи с помощта на императивен модел на програмиране чрез скрипт на обвивката: Тук ние определяме как да създадем потребителя и какви команди да използваме в операционната система.

Въпреки това, това може да се направи с помощта на декларативен модел на програмиране само с няколко реда куклен код, език на куклен домейн (DSL) и все пак да се постигне същия резултат.

Модели на внедряване на инструменти за управление на конфигурацията

Има два модела за внедряване за инструменти за управление на конфигурацията:

  • Модел за внедряване, базиран на push: иницииран от главен възел.
  • Модел на внедряване, базиран на издърпване: иницииран от агенти.

Модел за внедряване, базиран на push:

В този модел на внедряване главният сървър изпраща конфигурациите и софтуера до отделните агенти. След като провери защитена връзка, капитанът изпълнява команди дистанционно на агентите. Например Ansible и Salt Stack.

Модел на внедряване, базиран на издърпване.

В този модел на внедряване отделните сървъри се свързват с главен сървър, проверяват и установяват защитена връзка, изтеглят техните конфигурации и софтуер и след това сами се конфигурират - например Puppet и Chef.

Как работи Puppet?

Puppet се основава на модел за разполагане на Pull, където възлите на агента се проверяват редовно след всеки 1800 секунди с главния възел, за да се види дали нещо трябва да се актуализира в агента. Ако нещо трябва да се актуализира, агентът изтегля необходимите куклени кодове от капитана и извършва необходимите действия.

Нека го обясним с пример:

Пример: Master - Agent Setup:

Господарят:

Машина, базирана на Linux, с инсталиран Puppet master софтуер. Той е отговорен за поддържането на конфигурации под формата на куклени кодове. Главният възел може да бъде само Linux.

Агентите:

Целевите машини, управлявани от кукла с инсталиран на тях софтуер за куклен агент.

Агентът може да бъде конфигуриран на всяка поддържана операционна система като Linux или Windows или Solaris или Mac OS.

Комуникацията между капитана и агента се осъществява чрез защитени сертификати.

Комуникация с агент на кукловоди



Комуникация между капитана и агента:

Етап 1) След като се установи връзка между агента и капитана, Puppet agent изпраща данните за състоянието си до Puppet master сървъра. Те се наричат ​​факти: Тази информация включва името на хоста, подробностите за ядрото, IP адреса, данните за името на файла и т.н.

Агентът изпраща факти на капитана

Стъпка 2) Puppet Master използва тези данни и съставя списък с конфигурацията, която трябва да се приложи към агента. Този списък с конфигурация, който трябва да се извърши на агент, е известен като каталог. Това може да бъде променено, като инсталиране на пакет, надстройки или премахвания, създаване на файлова система, създаване или изтриване на потребител, рестартиране на сървъра, промени в конфигурацията на IP и т.н.

Master изпраща каталог на Агента

Стъпка 3) Агентът използва този списък с конфигурации, за да приложи всички необходими промени в конфигурацията на възела.

В случай, че няма отклонения в конфигурацията, Агентът не извършва никакви промени в конфигурацията и оставя възела да работи със същата конфигурация.

Агентът прилага конфигурация

Стъпка 4) След като приключи, възелът докладва на кукловодния майстор, като посочва, че конфигурацията е приложена и завършена.

Куклени блокове

Puppet предоставя гъвкавостта да интегрира отчети с инструменти на трети страни, използвайки Puppet APIs.

Четири вида куклени градивни елементи са

  1. Ресурси
  2. Класове
  3. Манифест
  4. Модули

Куклени ресурси:

Кукленските ресурси са градивните елементи на Puppet.

Ресурсите са вградени функции които се изпълняват в задния край, за да изпълняват необходимите операции в кукла.

Куклени класове:

Комбинация от различни ресурси може да бъде групирана заедно в една единица, наречена клас.

Куклен манифест:

Manifest е директория, съдържаща куклени DSL файлове. Тези файлове имат разширение .pp. Разширението .pp означава куклена програма. Кукленият код се състои от дефиниции или декларации на куклени класове.

Куклени модули:

Модулите са колекция от файлове и директории, като манифести, дефиниции на класове. Те са многократно използваемите и споделяеми единици в Puppet.

Например модулът MySQL за инсталиране и конфигуриране на MySQL или модулът Jenkins за управление на Jenkins и др.

Видове куклени ресурси

Като цяло системата се състои от файлове, потребители, услуги, процеси, пакети и т.н. В Puppet те се наричат ​​ресурси. Ресурсите са основните градивни елементи в

Куклен. Всички операции с куклени агенти се извършват с помощта на куклени ресурси.

Кукленските ресурси са готови инструменти, които се използват за изпълнение на различни задачи и операции на всяка поддържана платформа. Можем да използваме един куклен ресурс за изпълнение на конкретна задача, или можем да използваме множество куклени ресурси заедно, за да изпълним някои сложни внедрявания на конфигурации на приложения.

Ресурсите могат да бъдат различни. Куклени употреби ресурси и видове ресурси за да се опише конфигурацията на системата.

Има три вида ресурси:

  1. Куклено ядро ​​или вградени типове ресурси.
  2. Типове ресурси, определени от марионетка.
  3. Куклени персонализирани типове ресурси.

Куклено ядро ​​или вградени типове ресурси:

Основните или вградените типове ресурси са предварително изградените типове куклен ресурс, доставени с куклен софтуер. Всички основни или вградени типове ресурси Puppet са написани и поддържани от екипа на Puppet.

Типове ресурси, определени от марионетка:

Определените типове ресурси са олекотени типове ресурси, написани на декларативен език Puppet, използвайки комбинация от съществуващи типове ресурси.

Куклени персонализирани типове ресурси:

Персонализираните типове ресурси са напълно персонализирани типове ресурси, написани на Ruby.

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

В терминала въведете следната команда, за да се покаже списък с подходящи за Puppet подкоманди: | _+_ |

В нашия случай се интересуваме от подкомандата ' ресурс ', които ще използваме, за да намерим информацията за вградените типове куклен ресурс.

В терминала въведете някоя от следните команди, за да се покаже списък с действия свързано с подкомандата на куклите ' ресурс ':

Puppet --help

В този случай имаме ресурс като подкоманда и -типове като действие.

Puppet има 49 вградени основни типа ресурси.

В терминала въведете следната команда, за да се покаже списък с наличните вградени типове куклен ресурс: | _+_ |

Всеки тип поддържа списък с атрибути . Тези атрибути предоставят подробно описание, което Puppet използва за управление на ресурса.

За да разберете всички атрибути, свързани с типа куклен ресурс, използвайте следната команда: | _+_ |

Параметрите ще изброят всички налични атрибути за този тип ресурс.

куклен пакет за описание

Трудно е за нов човек да разбере и да свърже много неуправляеми файлове с куклен код. Тук имаме нужда от някакво групиране, за да свържем операции. Целта е да се реши един -единствен проблем, като например всички операции, необходими за конфигуриране на ssh на сървър или ntp услуга или пълен уеб сървър или сървър на база данни от нулата.

Какво представляват куклени класове?

Куклени курсове са колекцията от куклени ресурси, обединени заедно като едно цяло.

Puppet въведе класове, за да направи структурата повторно използваема и организирана.

Първо, трябва да дефинираме клас, използвайки синтаксиса за дефиниция на клас; класовете трябва да бъдат уникални и могат да бъдат декларирани само веднъж със същото име: | _+_ |

Пример: | _+_ |

Досега сме дефинирали само класа, но не сме го използвали никъде. Това означава, че този код, който сме написали, никога няма да се изпълни, освен ако не декларираме този клас другаде.

Декларация за клас

За да използвате дефиниран клас в кода, използвайте включват ключова дума. | _+_ |

Нека разберем това с реален сценарий.

Демо инсталиране на NTP

Първо, уверете се, че NTP пакетът вече не присъства на сървъра, следната команда няма да върне нищо, ако telnet не присъства на сървъра: | _+_ |

Както виждаме, NTP пакетът вече присъства на сървъра. Нека премахнем съществуващия NTP пакет: | _+_ |

След като премахнете пакета, уверете се, че файлът ntp.conf не съществува: | _+_ |

Проверете дали услугата ntp не съществува, като изпълните следната команда: | _+_ |

Създайте нов .pp файл за запазване на кода. От командния ред: | _+_ |

Преминете към режим на вмъкване, като натиснете i от клавиатурата.

Въведете следния код, за да създадете нов файл: | _+_ |

След като приключите с редактирането: натиснете esc

За да запазите файла, натиснете: wq!

Следващата стъпка е да проверка дали кодът има някакви синтаксични грешки. Изпълнете следната команда: | _+_ |

Уверете се, че сте преминали към корен за да можете да завършите теста без никаква грешка, като изпълните командата: | _+_ |

Тест е следващата стъпка в процеса на създаване на код. Изпълнете следната команда за изпълнение тест за дим: | _+_ |

Последната стъпка е да бягай куклата в реален режим и проверете изхода. | _+_ |

Puppet не изпълни нищо, защото демонстрационният клас беше просто дефиниран но не деклариран .

Така че, докато не декларирате кукления клас, кодът няма да се приложи.

Нека да декларирам демо класа в същия код, използвайки включва име на клас в края на кода: | _+_ |

Отново проверка дали кодът има някакви синтаксични грешки. Изпълнете следната команда: | _+_ |

Уверете се, че сте преминали към корен за да можете да завършите теста без никаква грешка, като изпълните командата: | _+_ |

Тестване е следващата стъпка в процеса на създаване на код. Изпълнете следната команда за изпълнение тест за дим: | _+_ |

Последната стъпка е да бягай куклата в реален режим и проверете изхода. | _+_ |

Този път кодът се прилага, защото класът е дефиниран и след това деклариран.

Уверете се, че ntp.conf вече съществува: | _+_ |

Проверете дали услугата ntp е стартирана, като изпълните следната команда: | _+_ |

Този урок е допринесен от Aliaa Monier