فرض کن باید محیط یک سرویس کوچک را بسازی: بعضی برنامه‌ها kernel مستقل می‌خواهند، بعضی در کانتینر کافی‌اند و داده باید بعد از حذف یا خرابی نمونه هم قابل بازیابی باشد. در این مسیر، از انتخاب مدل مجازی‌سازی به ساخت و ادارهٔ VM و کانتینر می‌رسیم؛ سپس ساخت image، تنظیم اولین بوت و آزمایشگاه تکرارپذیر را به هم وصل می‌کنیم.

مبنای تطبیق، اهداف رسمی LPIC-3 Virtualization and Containerization نسخهٔ 3.0 با کد آزمون 305-300 است؛ این نسخه در ۱۷ مهر ۱۴۰۵ بررسی شد. این دوره تألیفی و مستقل است و دورهٔ رسمی LPI یا بانک سؤال آزمون نیست. پیش از برنامه‌ریزی آزمون، نسخهٔ اهداف را دوباره از منبع رسمی بررسی کن.

پیش‌نیاز و روش مطالعه#

کار با shell، مجوزها، بسته‌ها، systemd، SSH، IP، route و DNS را در حد LPIC-2 بشناس. برای policy دسترسی و TLS، دورهٔ امنیت LPIC-303 مکمل مناسب است. موضوع‌های HA و cluster storage این دوره را به مسیر LPIC-306 تبدیل نمی‌کنند؛ تمرکز روی چرخهٔ یک محیط آزمایشگاهی و تشخیص محدودیت‌هاست.

برای هر درس حدود ۶۰ تا ۹۰ دقیقه در نظر بگیر؛ نصب hypervisor، دریافت image و بازیابی می‌توانند بیشتر طول بکشند. «شب» ترتیب مطالعه است و الزام تقویمی ندارد. هر شصت درس با یک تاریخ انتشار در دسترس‌اند. در دفترچه، وضعیت مطالعه، اجرای تمرین و تأیید نتیجه را جدا ثبت کن؛ خروجی مورد انتظار متن، ادعای اجرای همهٔ آزمایش‌ها نیست.

واژه‌های مشترک دوره#

Host میزبان و guest مهمان است؛ VM ماشین مجازی دارای kernel مستقل است. Image تصویر ذخیره‌شدهٔ دیسک یا محیط برنامه، و instance نمونهٔ ساخته‌شده از آن است. Kernel هستهٔ سیستم‌عامل و userspace برنامه‌ها و کتابخانه‌های بیرون آن است. CPU پردازنده، RAM حافظهٔ اصلی و NIC کارت شبکه است؛ vCPU و NIC مجازی منبع مهمان‌اند.

واژهمعنی در تمرین‌ها
hypervisorلایهٔ اجرای ماشین‌های مجازی و ادارهٔ منابع آن‌ها
daemonفرایند سرویس پس‌زمینه؛ CLI رابط خط فرمان آن است
domainشیء ماشین مجازی در libvirt یا Xen، نه نام دامنهٔ DNS
storage pool / volumeمجموعهٔ ذخیره‌سازی و واحد دادهٔ داخل آن
bridge / NATاتصال لایهٔ دوم و ترجمهٔ آدرس شبکه؛ دو سازوکار جدا
DHCP / DNSتخصیص تنظیم شبکه و تبدیل نام به آدرس
snapshot / cloneنقطهٔ بازگشت وضعیت و کپی دارای هویت مستقل
overlay / backing imageلایهٔ تغییرات و تصویر پایهٔ وابستهٔ آن
namespace / cgroupجداسازی دید فرایند و کنترل مصرف منابع
capability / syscallواحد اختیار لینوکس و فراخوانی سرویس kernel
rootlessاجرای runtime بدون daemon دارای root میزبان
digest / tagشناسهٔ محتوایی artifact و نام قابل‌تغییر آن
URI / APIشناسهٔ اتصال و رابط برنامه‌نویسی مدیریت

اصطلاح تخصصی هر بخش در همان جلسه توضیح داده می‌شود؛ هنگام خواندن فرمان، نام فایل، گزینه و شناسهٔ محصول را با املای اصلی نگه دار.

قرارداد آزمایشگاه#

مبنای شاخهٔ QEMU/libvirt، Ubuntu Server 24.04 LTS روی x86_64 است. Xen روی Debian 13 در ماشین مستقل بوت می‌شود. برای تمرین کامل به قابلیت مجازی‌سازی سخت‌افزاری و دسترسی /dev/kvm نیاز داری؛ در host مجازی، nested virtualization باید در لایهٔ بیرونی هم فعال و واقعاً قابل استفاده باشد. اجرای TCG کندتر است و نتیجهٔ KVM محسوب نمی‌شود.

نقشمحیط و آدرس مدیریت Host-onlyکاربرد
hv-aUbuntu 24.04، 192.168.58.10/24QEMU و libvirt اصلی
hv-bUbuntu 24.04، 192.168.58.20/24انتقال و آزمون مقصد
xen-aDebian 13، 192.168.58.30/24بوت Xen و Dom0
containersUbuntu 24.04، 192.168.58.40/24مبانی kernel کانتینر
lxd-aClone مستقل، 192.168.58.50/24LXD با channel 5.21/stable
docker-aClone مستقل، 192.168.58.60/24Docker از بستهٔ Ubuntu

Cloneهای مختلف با IP یکسان هم‌زمان روشن نمی‌شوند. برای Xen migration، xen-b هم‌نسخه و با آدرس مدیریت آزاد لازم است. همهٔ ماشین‌ها لازم نیست هم‌زمان فعال باشند؛ منابع را قبل روشن کردن هر مجموعه بودجه‌بندی کن. برای دو guest دوگیگابایتی، یک host چهارگیگابایتی بدون حاشیهٔ RAM برای خودش مناسب نیست. فضای کافی برای base، copy و backup جدا رزرو کن؛ اندازهٔ virtual disk برابر مصرف واقعی storage نیست.

شبکهٔ Host-only از LAN خانه یا کار جداست؛ کارت NAT جدا فقط مسیر دریافت بسته و image را می‌دهد. console مستقل و Snapshot قبل هر ماژول داشته باش. تغییر boot یا bridge را روی میزبان کاری اجرا نکن. برای Vagrant، VirtualBox سازگار روی host جدا یا پنجرهٔ مستقل استفاده می‌شود؛ اجرای هم‌زمان backendهای سخت‌افزاری ناسازگار فرض نشده است.

شبکهٔ داخلیقرارداد
libvirt NAT192.168.60.0/24؛ host .1، lab01 برابر .11، lab02 برابر .12
libvirt isolated192.168.61.0/24 و fd30:305:61::/64
Xen bridge192.168.63.0/24؛ Dom0 .1 و DomU .11
QEMU TAP192.168.64.0/24؛ host .1 و guest .11
LXD NAT / isolated10.5.30.0/24 و 10.5.31.0/24
veth مستقل172.30.5.0/24؛ فقط دو namespace
Docker bridge172.28.5.0/24
Vagrant pair192.168.59.0/24؛ server .10 و client .20

این subnetها باید با route و VPN محیط تو تداخل نداشته باشند. نام interface را با ip -br address پیدا کن. DHCP و اعلان IPv6 آزمایشگاهی به LAN وصل نمی‌شوند؛ شبکهٔ isolated هم endpoint میزبان دارد و به‌تنهایی سیاست امنیتی کامل نیست.

فایل‌ها، کلید و قواعد اجرا#

در Ubuntu مبنا، ابزارهای مشاهده و ورود را پیش از شب‌های اول آماده کن؛ این کار هنوز hypervisor نصب نمی‌کند:

sudo apt update
sudo apt install openssh-client ripgrep numactl curl gnupg ca-certificates iproute2 tcpdump

روی host مربوط، با حساب عادی پوشه‌های خصوصی بساز. کلید زیر مخصوص دوره است و فایل موجود را overwrite نکن:

umask 077
mkdir -p ~/lpic305/{base,direct,images,keys,evidence,backups}
ssh-keygen -t ed25519 -f ~/lpic305/keys/id_ed25519 -C lpic305-lab

برای کار تعاملی passphrase مناسب انتخاب کن. Packer به دسترسی غیرتعاملی کلید نیاز دارد؛ از روش agent پشتیبانی‌شدهٔ communicator یا کلید مجزای موقت در VM خصوصی ساخت استفاده کن و بعد از ساخت دسترسی آن را لغو کن. کلید خصوصی وارد seed، Git یا image عمومی نمی‌شود. student در مهمان حساب تمرین است؛ حساب host با نام virtadmin در نمونهٔ migration باید واقعاً ساخته شده و دسترسی مدیریتی libvirt داشته باشد.

دو متغیر در جلسات image استفاده می‌شوند؛ اولی بعد از تأیید اصالت شب ۱۱ و دومی فقط بعد از backup سرد شب ۲۲ معتبر است. در هر shell جدید دوباره تنظیم کن:

export BASE_IMAGE="$HOME/lpic305/base/noble.qcow2"
export COLD_IMAGE="$HOME/lpic305/images/lab01-cold.qcow2"

فایل پایه readonly در نظر گرفته می‌شود؛ مهمان‌ها از overlay یا copy مستقل استفاده می‌کنند. مسیر COLD_IMAGE باید کپی خصوصی، آفلاین و بدون backing dependency گم‌شده باشد. در libvirt سیستم، disk زیر /var/lib/libvirt/images/ با owner و policy بستهٔ Ubuntu قرار می‌گیرد؛ مسیر home را با world-readable کردن به آن تحمیل نکن.

هر فرمان برای وضعیت آغاز همان جلسه است؛ همهٔ بلوک‌ها را به یک script بزرگ تبدیل نکن. نام object باید آزاد باشد. shutdown غیرهم‌زمان است: خاموشی کامل را قبل copy، resize یا تغییر disk تأیید کن. قطع اجباری guest مثل قطع برق است. snapshot روی همان storage، backup مستقل نیست و backup بدون آزمون restore هنوز تأییدشده نیست.

برای CLIهای مدیریتی URI/context را ثبت کن. در libvirt همیشه qemu:///system مبناست؛ برای نمونه‌های کوتاه بدون -c می‌توان در shell همان بخش تنظیم کرد:

export LIBVIRT_DEFAULT_URI=qemu:///system

Package، plugin و image را از ناشر معتبر دریافت و نسخهٔ واقعی را ثبت کن. Tag و alias متحرک‌اند؛ checksum و fingerprint واقعی برای بازتولید لازم‌اند. شاخهٔ Docker بستهٔ docker.io و Compose v2 از Ubuntu است؛ آن را با نصب Docker CE مخلوط نکن. اختیار socket Docker و گروه‌های libvirt/lxd مدیریتی است. خاموش کردن MAC، chmod 777 و گزینهٔ privileged راه عمومی رفع خطا نیستند.

تطبیق با اهداف رسمی#

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

هدفوزنشب‌ها و مهارت اصلی
351.1۶۱ تا ۶، ۲۰ و ۲۹؛ مفهوم، شبکه و چرخهٔ VM
351.2۳۷ تا ۱۰؛ Xen 4.x، Dom0/DomU و xl
351.3۴۳ و ۱۱ تا ۱۵؛ QEMU/KVM، monitor، VirtIO و Agent
351.4۹۴ و ۱۶ تا ۲۵؛ libvirt، XML، منابع، شبکه، storage و انتقال
351.5۳۲۶ تا ۲۹؛ فرمت و ابزارهای image
352.1۷۳۰ تا ۳۵ و ۴۶؛ namespace، cgroup، اختیار و runtime
352.2۶۳۶ تا ۴۰؛ LXC/LXD، image، profile، شبکه و storage
352.3۹۴۱ تا ۴۹؛ Docker، image، شبکه، volume، log و registry
352.4۳۴۹ تا ۵۱؛ Compose، Swarm، Kubernetes و Helm
353.1۲۵۲ و ۵۳؛ cloud، OpenStack و Terraform
353.2۲۵۶ و ۵۷؛ Packer و ساخت image
353.3۳۱۲، ۱۷، ۵۴، ۵۵ و ۵۷؛ cloud-init و آماده‌سازی نمونه
353.4۳۵۸ و ۵۹؛ Vagrant، box، شبکه و provisioning

شب ۶۰ مرور همهٔ هدف‌ها و تحویل نهایی است. فرمان‌های تاریخی مثل xm، brctl و tunctl و نام‌های قدیمی محصول از مطالعه حذف نمی‌شوند؛ برای اجرای جدید، ابزار و release پشتیبانی‌شده استفاده می‌شود. سطح هدف orchestration شناخت مفاهیم است؛ این سه شب جای دورهٔ کامل ادارهٔ Kubernetes نیستند. Terraform محلی نیز تمرین چرخهٔ state است و استقرار واقعی cloud را ادعا نمی‌کند.

فهرست مطالعه#

مبانی و Xen#

QEMU/KVM و libvirt#

ذخیره‌سازی، منابع و image#

مبانی کانتینر#

LXC/LXD#

Docker#

ارکستراسیون و cloud#

cloud-init، Packer، Vagrant و پروژهٔ نهایی#

معیار پایان دوره#

وقتی بتوانی محیط تازه را از تعریف و artifact معتبر بسازی، هویت و مسیر داده را توضیح بدهی، failure محدود را از روی evidence پیدا کنی و backup را روی نمونهٔ جدید بازیابی کنی، پروژه آمادهٔ تحویل است. نسخه و محدودیت را ثبت کن؛ مهاجرت طراحی‌شده یا manifest فقط اعتبارسنجی‌شده را به‌جای اجرای واقعی گزارش نکن. برای ادامه، دفترچهٔ شکاف‌ها و مسیرهای یادگیری را کنار نتیجهٔ پروژه نگه دار.