لینوکس ۳۰۵؛ شب ۶۰: پروژهٔ نهایی؛ ساخت، شکست و بازیابی با شواهد
فهرست نوشته
پایان دوره زمانی است که بتوانی یک محیط تازه بسازی، خرابی محدود را تشخیص بدهی و داده را برگردانی. امشب نتیجهٔ شصت جلسه را در یک تحویل کوچک و قابل تکرار جمع میکنیم.
این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.
جایگاه در دوره: هدفهای 351.1، 351.2، 351.3، 351.4، 351.5، 352.1، 352.2، 352.3، 352.4، 353.1، 353.2، 353.3، 353.4 آزمون 305-300.
محیط: فقط Cloneهای دوره و دادهٔ ساختگی؛ VMهای Xen، LXD، Docker و Vagrant لازم نیست همزمان روشن باشند. پروژهٔ نهایی به حساب cloud پولی نیاز ندارد.
تحویل چه چیزی است؟#
یک VM با libvirt و cloud-init، یک system container در LXD و یک برنامهٔ HTTP دارای image خودت در Docker تحویل بده. برای هرکدام نسخه، هویت، شبکه، سقف resource، روش ورود و محل داده را ثبت کن. نقش برنامه و مسیر درخواست را روی کاغذ رسم کن؛ صرف روشن بودن سه object کافی نیست.
| بخش | شاهد پذیرش |
|---|---|
| VM | boot، ورود key-only، XML و disk مستقل، marker داده |
| LXD | config مؤثر profile، محدودیت، شبکه و restore روی نام تازه |
| Docker | digest image، UID غیرroot، probe HTTP و volume مستقل |
| provisioning | template Packer و seed قابل بازتولید، خروجی تازهٔ آزمودهشده |
| آزمایشگاه تکراری | Vagrantfile و اجرای دوبارهٔ provisioner بدون خرابی config |
راهنمای ساخت دوباره را برای کسی بنویس که VM آمادهٔ تو را ندارد. مقادیر واقعی checksum و version را نگه دار؛ password، private key، token و state حساس وارد تحویل عمومی نشوند.
سه خرابی کنترلشده#
روی guest دورریختنی، NIC برنامه را از شبکهٔ درست جدا کن؛ روی container تازه، mount را readonly کن؛ و روی cloud-init نمونهٔ تازه، YAML نامعتبر بده. هر بار فقط یک متغیر تغییر کند. پیشبینی، مشاهده و اصلاح را ثبت کن: آیا خطا از route، permission یا config است؟ افزایش timeout و اعطای اختیار کامل توضیح علت نیست.
برای بازگشت، config قبلی همان NIC، mount یا seed را استفاده کن. پس از اصلاح، آزمون مثبت و منفی بگیر: درخواست مجاز جواب دهد و دسترسی بیرونی که در طرح مجاز نیست همچنان رد شود. اصل VM یا volume داده را برای این آزمایش خراب نکن.
بازیابی را واقعاً اجرا کن#
backup سرد همهٔ diskها و XML را در مقصد خصوصی جدا نگه دار. VM بازیابیشده با هویت مناسب و شبکهٔ isolated بوت شود؛ marker root و disk داده را بخوان. در LXD، root و custom volume را جدا restore کن؛ در Docker نیز archive داده را در volume جدید آزمون کن. checksum درست، جای آزمون boot و محتوا را نمیگیرد.
migration را فقط با دو host سازگار اجرا کن؛ در غیر این صورت پیشنیاز و محدودیت را «طراحیشده» گزارش بده. شکست مبهم انتقال باید قبل روشن کردن دوبارهٔ source، از نظر اجرای مقصد و مالکیت disk بررسی شود.
مرور آزمون با شکافهای روشن#
برای هر هدف جدول راهنما، یک تعریف، یک فرمان/فایل و یک failure قابل توضیح بنویس. Xen را با Dom0/DomU و xl، QEMU را با acceleration/monitor/Agent، libvirt را با URI/XML/network/storage و container را با namespace/cgroup/capability مرور کن. در deployment، فرق Packer، Terraform، cloud-init و Vagrant را از روی artifact و lifecycle توضیح بده.
به هر بخش یکی از وضعیتهای «مطالعهشده»، «اجراشده» یا «تأییدشده» بده. خواندن template برابر build موفق نیست و توضیح معماری cloud برابر استقرار OpenStack نیست. بخش آزمودهنشده را با برنامهٔ مشخص تکمیل کن؛ تعداد ابزار نصبشده معیار پایان دوره نیست.
منبع: اهداف رسمی LPIC-305 ، backup در libvirt ، backup در LXD ، volumeهای Docker .