Packer چیست ؟ ساخت ایمیج به کمک packer

در این پست می‌خوانید:

Packer چیست

Packer یک ابزار منبع باز برای ایجاد image های ماشینی یکسان برای پلتفرم های مختلف از یک فایل  پیکربندی واحد است. Packer سبک وزن و روی هر سیستم عامل ای اجرا می شود.این ابزار عملکرد بسیار بالایی دارد وimage ها را برای چندین پلتفرم به صورت موازی و همزمان ایجاد می کند. Packer جایگزین مدیریت پیکربندی مانند Chef یا Puppet نمی شود. در واقع، هنگام ساخت image ها، Packer قادر است از ابزارهایی مانند Chef یا Puppet و حتی انسیبل برای نصب نرم افزار بر روی image استفاده کند.

Image ماشین یک واحد ثابت ای است که شامل یک سیستم عامل از pre-configured و نرم افزار های نصب شده است که برای ایجاد سریع ماشین های مجازی به صوزت آماده استفاده می شود. فرمت این ایمیج ها برای هر پلتفرم متفاوت میباشد. بهعنوان مثال  AMI برای EC2، فایل‌های VMDK/VMX برای VMware، OVF برای VirtualBox و غیره.

اصطلاحات پکر

اگر قبلاً از Packer استفاده نکرده اید بهتر ار قبل از هر بحثی راجب واژه شناسی این ابزار صحبت کنیم

Artifacts

نتایج یک ساخت یک ایمیج را گویند . معمولا این دیتا شامل شناسه ، فایل برای نمایش ایمیج یک ماشین هست. هر بیلدر  یک آرتیفکت تولید می کند. به عنوان مثال، در مورد سازنده آمازون EC2، این بخش مجموعه ای از شناسه های AMI است. برای سازنده VMware، آرتیفکت فهرستی از فایل‌ها است که ماشین مجازی ایجاد شده را تشکیل می‌دهد و …

Build 

بیلدها یک تسک واحد هست که در نهایت یک ایمیج برای یک پلتفرم واحد تولید میشود. ساخت های متعدد به صورت موازی اجرا می شوند

Builder

سازندگان یا builder  اجزایی از Packer هستند که قادر به ایجاد یک تصویر ماشین برای یک پلتفرم واحد هستند. سازندگان ار فایل پیکربندی تنظیمات  را می خوانند و از آن برای اجرا و تولید تصویر ماشین استفاده می کنند. یک سازنده به عنوان بخشی از یک ساخت به منظور ایجاد تصاویر واقعی به دست آمده فراخوانی می شود. سازندگان شامل VirtualBox، VMware و Amazon EC2 هستند.

لیست کامل این سازنده ها در لینک زیر است

https://www.packer.io/docs/builders

Commands

فرمان ها دستورات فرعی برای برنامه packer هستند که برخی از کارها را انجام می دهند. یک فرمان مثال، “build” است که به عنوان پکر build فراخوانی می شود. Packer با مجموعه ای از دستورات ارسال می شود تا رابط خط فرمان خود را تعریف کند.

Data Sources

منابع داده اجزایی از Packer هستند که داده‌ها را از خارج از Packer دریافت می‌کنند و آن را برای استفاده در قالب خاص در دسترس بقیه اجرا قرار می‌دهند. نمونه ای از منابع داده عبارتند از Amazon AMI و Amazon Secrets Manager.

لیست کامل آن در لینک زیر قابل مشاهده است

https://www.packer.io/docs/datasources

Post-processors

پس پردازشگرها اجزایی از Packer هستند که نتیجه یک سازنده یا یک پس پردازشگر دیگر را می گیرند و آن را برای ایجاد یک آرتیفکت جدید پردازش می کنند. نمونه هایی از پس پردازشگرها عبارتند از Compress برای فشرده سازی آرتیفکت ها،  آپلود برای بارگذاری آرتیفکت ها و غیره.

لیست کامل آن در لینک زیر قابل مشاهده است

https://www.packer.io/docs/post-processors

Provisioners

تأمین‌کننده‌ها اجزایی از Packer هستند که نرم‌افزار را در یک ماشین در حال اجرا نصب و پیکربندی می‌کنند، قبل از اینکه آن دستگاه به یک تصویر ثابت تبدیل شود. آنها کار اصلی ساختن تصویر حاوی نرم افزار مفید را انجام می دهند. تهیه‌کنندگان نمونه شامل shell scripts, Chef, Puppet و غیره هستند..

لیست کامل آن در لینک زیر قابل مشاهده است

https://www.packer.io/docs/provisioners

Templates

قالب ها فایل های JSON هستند که با پیکربندی اجزای مختلف Packer یک یا چند بیلد را تعریف می کنند. Packer قادر است یک الگو را بخواند و از آن اطلاعات برای ایجاد چندین تصویر ماشین به صورت موازی استفاده کند.

محیط متن packer

 

Packer با استفاده از یک رابط خط فرمان کنترل می شود. تمام تعاملات با Packer از طریق ابزار Packer انجام می شود. مانند بسیاری از ابزارهای خط فرمان دیگر، ابزار packer یک SUBCOMMAND را برای اجرا می‌گیرد و آن SUBCOMMAND ممکن است گزینه‌های دیگری نیز داشته باشد.

Packer init -- is used to download Packer plugin binaries
packer build -- command takes a template and runs all the builds within it in order to generate a set of artifacts
packer fix -- command takes a template and finds backwards incompatible parts of it and brings it up to date so it can be used with the latest version of Packer
packer validate --command is used to validate the syntax and configuration of a template

رفتار Packer توسط packer template تعیین می شود که شامل یک سری اعلانات و دستورات برای Packer است که باید آنها را دنبال کند. این الگو به Packer می‌گوید که از چه پلاگین‌هایی (سازنده، تأمین‌کننده، پس پردازشگر) استفاده کند، چگونه هر یک از آن افزونه‌ها را پیکربندی کند، و به چه ترتیبی اجرا شود.

 

دو نوع تمپلیت قابل استفاده است یکی json و دیگری HCL 

از هر دو مدل میتوان استفاده کرد . HCL نسبت به json قابل فهم تر است. برای تبدیل نمونه json به HCL میتوان از لینک زیر استفاده کرد

https://learn.hashicorp.com/tutorials/packer/hcl2-upgrade

 

نصب packer

برای نصب این ابزار از دستورات زیر استفاده میکنیم

## Debian / Ubuntu
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install packer

## RHEL / Centos
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install packer

 

ساخت ایمیج به کمک packer

در این مرحله قصد داریم به کمک ابزار پکر ایمیجی رو ایجاد کنیم. شما میتونین از builder ها و provisioner های متنوعی استفاده کنین

git clone https://github.com/rfakit/packer-ubuntu-image
cd packer-ubuntu-image
packer build ubuntu-18.04.json

توضیحات:

ubuntu-18.04.json

این فایل همان فایل تمپلیتی است که پکر به کمک آن ایمیج را ایجاد میکند

این فایل دارای بخش های مختلفی است. اولین بخش، بخش builders هست که زیرساخت مربوط برای ساخت ایمیج را شامل میشود . در این مثال ما از virtualbox-iso استفاده میکنیم .

قسمت boot_command حاوی یک سینتکس خاص هست که به کمک آن و فایل preseed  میتوان مراحل نصب را اتوماتیک کرد. این سینتکس به صورت زیر می باشد

<bs> - Backspace
<del> - Delete
<enter> <return> - Simulates an actual "enter" or "return" keypress.
<esc> - Simulates pressing the escape key.
<tab> - Simulates pressing the tab key.
<f1> - <f12> - Simulates pressing a function key.
<up> <down> <left> <right> - Simulates pressing an arrow key.
<spacebar> - Simulates pressing the spacebar.
<insert> - Simulates pressing the insert key.
<home> <end> - Simulates pressing the home and end keys.
<pageUp> <pageDown> - Simulates pressing the page up and page down keys.
<menu> - Simulates pressing the Menu key.
<leftAlt> <rightAlt> - Simulates pressing the alt key.
<leftCtrl> <rightCtrl> - Simulates pressing the ctrl key.
<leftShift> <rightShift> - Simulates pressing the shift key.
<leftSuper> <rightSuper> - Simulates pressing the ⌘ or Windows key.
<wait> <wait5> <wait10> - Adds a 1, 5 or 10 second pause before sending any additional keys. This is useful if you have to generally wait for the UI to update before typing more.
<waitXX> - Add an arbitrary pause before sending any additional keys. The format of XX is a sequence of positive decimal numbers, each with optional fraction and a unit suffix, such as 300ms, 1.5h or 2h45m. Valid time units are ns, us (or µs), ms, s, m, h. For example <wait10m> or <wait1m20s>.
<XXXOn> <XXXOff> - Any printable keyboard character, and of these "special" expressions, with the exception of the <wait> types, can also be toggled on or off. For example, to simulate ctrl+c, use <leftCtrlOn>c<leftCtrlOff>. Be sure to release them, otherwise they will be held down until the machine reboots. To hold the c key down, you would use <cOn>. Likewise, <cOff> to release.
{{ .HTTPIP }} {{ .HTTPPort }} - The IP and port, respectively of an HTTP server that is started serving the directory specified by the http_directory configuration parameter. If http_directory isn't specified, these will be blank!
{{ .Name }} - The name of the VM.

 

بخش provisioner شامل شخصی سازی هایی است که در این مثال ما از shell script استفاده کردیم

 

دیدگاه‌ها ۰
ارسال دیدگاه جدید