آموزش نصب و پیکربندی LXD روی Ubuntu 20.04

کانتینر لینوکسی چیست؟

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

تصور کنید که یک سرور دارید که باید چندین وب سایت را برای مشتریان خود میزبانی کند. یک راه این است که هر سایت را به عنوان یک virtual host یا server block بر روی همان instance از وب سرور Apache یا Nginx اجرا کنید. یا اینکه برای هر سایت، یک ماشین مجازی جدا ایجاد کنید. کانتینرهای لینوکسی بین این دو قرار می‌گیرند.

LXD چیست؟

LXD به شما امکان می‌دهد این کانتینرها را ایجاد و مدیریت کنید. LXD یک سرویس hypervisor برای مدیریت چرخه عمر کانتینرها فراهم می‌کند. در این آموزش، شما LXD را پیکربندی و از آن برای اجرای Nginx در یک کانتینر استفاده خواهید کرد و سپس ترافیک را از اینترنت به سمت کانتینر هدایت می‌کنید تا یک صفحه وب نمونه قابل دسترس شود.

پیش‌نیازها

  • یک سرور با اوبونتو 20.04. برای راه‌اندازی سرور (plan) می‌توانید از ParminCloud استفاده کنید.
  • حداقل ۵ گیگابایت فضای بلاک استوریج. باید آن را به صورت دستی فرمت و mount کنید تا LXD بتواند آن را آماده‌سازی کند.

نکته:

از اوبونتو 20.04 به بعد، LXD به صورت بسته snap رسمی موجود است. بسته snap قابلیت نصب روی هر توزیعی که از snapd پشتیبانی کند را دارد. پیشنهاد می‌شود سرور با حداقل ۲ گیگابایت رم برای اجرای بسته snap انتخاب شود.

آماده‌سازی محیط سرور

ابتدا باید کاربر sudo خود را به گروه lxd اضافه کنید:

sudo adduser $USER lxd

سپس برای اعمال عضویت جدید، باید یک بار از سیستم خارج و دوباره وارد شوید:

newgrp lxd

برای تأیید عضویت کاربر در گروه lxd از دستور زیر استفاده کنید:

groups

پیکربندی استوریج بک‌اند برای LXD

پیشنهاد می‌شود از فایل سیستم ZFS به عنوان استوریج بک‌اند LXD استفاده کنید. ابتدا لیست بسته‌های خود را به‌روزرسانی و سپس پکیج کمکی zfsutils-linux را نصب نمایید:

sudo apt update
sudo apt install zfsutils-linux

برای شناسایی نام دستگاه بلاک استوریج خود، از دستور زیر استفاده کنید:

ls -l /dev/disk/by-id/

مسیر کامل دستگاه خود مانند زیر خواهد بود:

/dev/disk/by-id/scsi-0DO_Volume_volume-fra1-0

(عیناً به جای “DO” عبارت مربوط به ParminCloud قرار می‌گیرد.)

تأیید نصب LXD

LXD به صورت snap در اوبونتو 20.04 به‌صورت پیش‌فرض نصب شده است. برای اطمینان از نصب بودن آن:

snap list lxd

برای مشاهده نسخه و اطلاعات بیشتر:

snap info lxd

اجرای اسکریپت lxd init

برای راه‌اندازی LXD، دستور زیر را اجرا کنید:

sudo lxd init
  • پیشنهاد می‌شود برای این آموزش، clustering را فعال نکنید (پاسخ no)
  • در بخش storage pool، گزینه‌های زیر را انتخاب کنید:
    • storage backend: zfs
    • نام pool: پیش‌فرض (یا دلخواه)
    • نیاز به ایجاد pool جدید: بله
    • نام دستگاه: مسیر دستگاه بلاک استوریج یادداشت‌شده را وارد کنید

پیکربندی شبکه برای کانتینرها

  • اتصال به MAAS لازم نیست (پاسخ no)
  • برای ایجاد شبکه bridge محلی، گزینه yes را انتخاب کنید
  • نام پیش‌فرض lxdbr0 را تأیید کنید

در پایان مراحل، سایر تنظیمات را بر اساس نیاز (مانند به‌روزرسانی خودکار تصاویر، نگهداری فایل YAML، مدیریت از شبکه) انتخاب کنید.

ایجاد اولین کانتینر LXD و اجرای Nginx

اکنون آماده هستید اولین کانتینر خود را بسازید. ابتدا لیست کانتینرها را مشاهده کنید (در ابتدا خالی است):

lxc list

برای ساخت و اجرای یک کانتینر اوبونتو 18.04 به نام webserver:

lxc launch ubuntu:18.04 webserver

پس از اتمام دانلود و راه‌اندازی، برای مشاهده اطلاعات کانتینر:

lxc list --columns ns4

حال باید به کانتینر یک IP استاتیک اختصاص دهید. ابتدا تنظیم device eth0 را override کنید:

lxc config device override webserver eth0
lxc config device set webserver eth0 ipv4.address [your_webserver_container_ip]
lxc restart webserver

برای ورود به شل کانتینر:

lxc shell webserver

در شل کانتینر، ابتدا پکیج‌ها را به‌روزرسانی و Nginx را نصب کنید:

apt update
apt install nginx

حال فایل صفحه پیش‌فرض Nginx را ویرایش کنید تا متن دلخواه خود برای شناسایی کانتینر اضافه شود:

nano /var/www/html/index.nginx-debian.html

عبارت «on LXD container webserver» را به فایل اضافه کرده و ذخیره کنید.

پس از خروج از کانتینر (exit)، از روی سرور اصلی وضعیت صفحه را تست کنید:

curl http://[your_webserver_container_ip]

اگر متن ویرایش‌شده را دیدید، کانتینر و وب سرور به درستی کار می‌کنند.

هدایت ترافیک خارجی به کانتینر با iptables

برای دسترسی جهانی، ترافیک پورت 80 سرور را به IP داخلی کانتینر هدایت کنید. کافیست به صورت زیر عمل کنید (متغیرها را طبق IP عمومی سرور و IP کانتینر خود جایگزین نمایید):

iptables -t nat -A PREROUTING -i [IFACE] -p tcp --dport 80 -d [PUBLIC_IP] -j DNAT --to-destination [CONTAINER_IP]:80

در صورت نیاز، می‌توانید این قانون را با اجرای دستور زیر دائمی کنید:

sudo apt install iptables-persistent

با پذیرش درخواست ذخیره قوانین هنگام نصب، پس از ریبوت قوانین باقی خواهند ماند.

حذف کانتینر و قوانین فایروال

برای توقف کانتینر:

lxc stop webserver

و برای حذف:

lxc delete webserver

برای حذف قانون فایروال:

iptables -t nat -L --line-numbers
iptables -t nat -D PREROUTING [LINE_NUMBER]

و سپس ذخیره تغییرات:

netfilter-persistent save

جمع‌بندی

شما در این آموزش موفق به نصب و پیکربندی LXD بر روی یک سرور با اوبونتو 20.04 شدید، یک کانتینر برای میزبانی Nginx ساختید و با کمک iptables امکان دسترسی عمومی به آن را فراهم نمودید.

برای اطلاعات و آموزش‌های بیشتر درباره LXD می‌توانید به مستندات رسمی آن مراجعه کنید.

از همراهی شما با پارمین کلود متشکریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *