| podman-pod-clone(1) | General Commands Manual | podman-pod-clone(1) |
نام (NAME)
podman-pod-clone - ایجاد یک رونوشت از یک پاد موجود
خلاصه دستور (SYNOPSIS)
podman pod clone [گزینهها] پاد [نام]
توضیحات (DESCRIPTION)
دستور podman pod clone با کپی کردن پیکربندی یک پاد موجود و کانتینرهای درون آن، یک پاد جدید ایجاد میکند. این کار به کاربر امکان میدهد تا به سادگی یک پاد مشابه را با همان تنظیمات یا با تغییرات جزئی بازتولید کند.
گزینهها (OPTIONS)
--blkio-weight=weight
ورودی/خروجی بلوکی (وزن نسبی)، بین 10 تا 1000، یا 0 برای غیرفعالسازی (پیشفرض 0)
--blkio-weight-device=device:weight
وزن ورودی/خروجی بلوکی (وزن نسبی دستگاه)
--cgroup-parent=path
گروه کنترلی (cgroup) والد اختیاری برای کانتینر
--cpu-shares, -c=shares
سهمهای پردازنده (وزن نسبی)
بهطور پیشفرض، همه کانتینرها سهم یکسانی از چرخههای پردازنده دریافت میکنند. این نسبت میتواند با تغییر وزن سهم پردازنده کانتینر نسبت به وزن سایر کانتینرهای در حال اجرا اصلاح شود.
برای تغییر نسبت از مقدار پیشفرض 1024، از پرچم --cpu-shares برای تنظیم وزن به 2 یا بالاتر استفاده کنید.
این نسبت تنها زمانی اعمال خواهد شد که فرایندهای با بار پردازشی بالا در حال اجرا باشند. هنگامی که وظایف در یک کانتینر بیکار هستند، کانتینرهای دیگر میتوانند از زمان پردازنده باقیمانده استفاده کنند. مقدار واقعی زمان پردازنده بسته به تعداد کانتینرهای در حال اجرا روی سیستم متغیر خواهد بود.
به عنوان مثال، سه کانتینر را در نظر بگیرید که یکی دارای cpu-share معادل 1024 و دو کانتینر دیگر دارای تنظیم cpu-share برابر با 512 هستند. هنگامی که فرایندها در هر سه کانتینر تلاش میکنند از %100 پردازنده استفاده کنند، کانتینر اول %50 از کل زمان پردازنده را دریافت خواهد کرد. اگر کانتینر چهارمی با cpu-share معادل 1024 اضافه کنید، کانتینر اول تنها %33 از پردازنده را دریافت میکند. کانتینرهای باقیمانده %16.5، %16.5 و %33 از پردازنده را دریافت خواهند کرد.
روی یک سیستم چندهستهای، سهمهای زمان پردازنده میان تمام هستههای پردازنده توزیع میشود. حتی اگر یک کانتینر به کمتر از %100 زمان پردازنده محدود شده باشد، میتواند از %100 هر هسته پردازنده به صورت جداگانه استفاده کند.
به عنوان مثال، سیستمی با بیش از سه هسته را در نظر بگیرید. اگر یک کانتینر {C0} را با -c=512 در حال اجرای یک فرایند، و کانتینر دیگری {C1} را با -c=1024 در حال اجرای دو فرایند راهاندازی کنید، این کار میتواند منجر به تقسیم سهمهای پردازنده به شکل زیر شود:
PID container CPU CPU share
100 {C0} 0 100% of CPU0
101 {C1} 1 100% of CPU1
102 {C1} 2 100% of CPU2
--cpus
تعداد پردازندهها
--cpuset-cpus=number
پردازندههای مجاز برای اجرا (0-3, 0,1)
--cpuset-mems=nodes
گرههای حافظه مجاز برای اجرا (0-3, 0,1)
--destroy
حذف پاد اصلی پس از ایجاد رونوشت از آن.
--device=host-device[:container-device][:permissions]
افزودن دستگاه میزبان به کانتینر
--device-read-bps=path:rate
محدود کردن نرخ خواندن (بایت در ثانیه) از یک دستگاه
--device-write-bps=path:rate
محدود کردن نرخ نوشتن (بایت در ثانیه) روی یک دستگاه
--gidmap=container_gid:from_gid[:amount]
نگاشت شناسههای گروه کاربری (GID) میزبان به کانتینر در حالت بدون ریشه (rootless).
--gpus=ENTRY
دستگاههای پردازنده گرافیکی (GPU) جهت افزودن به کانتینر ('all' برای ارسال همه GPUها)
--help, -h
چاپ نحوه استفاده
-h, --hostname="" نام میزبان کانتینر
--hostname=name
تنظیم نام میزبان (hostname) سفارشی برای کانتینر.
--infra-command=command
دستور جایگزین برای اجرای کانتینر زیرساخت در پاد.
--infra-conmon-pidfile=file
مسیر فایل برای ثبت شناسه فرآیند (PID) مانیتور conmon کانتینر زیرساخت.
--infra-name=name
نام سفارشی برای کانتینر زیرساخت پاد.
--label, -l=key=value
افزودن یک برچسب تصویر label (برای نمونه label=value) به متاداده تصویر. این گزینه میتواند چندین بار استفاده شود. اگر نام label ذکر شود، اما نه = و نه یک value ارائه نشود، آنگاه label روی یک مقدار خالی تنظیم میشود.
کاربران میتوانند یک LABEL ویژه به صورت io.containers.capabilities=CAP1,CAP2,CAP3 در یک Containerfile تنظیم کنند که فهرست قابلیتهای (capabilities) لینوکس مورد نیاز برای اجرای درست کانتینر را مشخص میکند. این برچسب تعیینشده در تصویر کانتینر به موتورهای کانتینر، مانند Podman، که این برچسب را میشناسند میگوید تا کانتینر را فقط با همین قابلیتها اجرا کنند. موتور کانتینر کانتینر را فقط با قابلیتهای مشخصشده راهاندازی میکند، تا زمانی که این فهرست از قابلیتها زیرمجموعهای از فهرست پیشفرض باشد.
اگر قابلیتهای مشخصشده در مجموعه پیشفرض نباشند، موتورهای کانتینر باید یک پیام خطا چاپ کنند و کانتینر را با قابلیتهای پیشفرض اجرا خواهند کرد.
--label-file=file
خواندن فایلی از برچسبها که با خط جدا شدهاند
--memory, -m=number[unit]
محدودیت حافظه (قالب: []، که در آن واحد میتواند b، k، m یا g باشد)
به شما امکان میدهد حافظه در دسترس کانتینر را محدود کنید. اگر میزبان از حافظه swap پشتیبانی کند، تنظیم حافظه -m میتواند بزرگتر از رم (RAM) فیزیکی باشد. اگر محدودیت 0 مشخص شود (عدم استفاده از -m)، حافظه کانتینر محدود نمیشود. محدودیت واقعی ممکن است به ضریبی از اندازه صفحه سیستمعامل گرد شود (این مقدار بسیار بزرگ خواهد بود، یعنی میلیونها تریلیون).
--memory-swap=number[unit]
حد حافظه مبادلهای (swap) برابر با مجموع حافظه بهعلاوه swap؛ مقدار '-1' برای فعال کردن swap نامحدود
--name, -n
اختصاص یک نام به کانتینر
--pid=pid
فضای نام PID مورد استفاده
--restart=policy
سیاست راهاندازی مجدد هنگام خروج کانتینر
--security-opt=option
گزینههای امنیتی
--shm-size=number[unit]
اندازه مسیر /dev/shm
--shm-size-systemd=number[unit]
اندازه سیستمفایل موقت /dev/shm در زمان فعال بودن حالت systemd.
--start
شروع خودکار پاد جدید پس از اتمام شبیهسازی.
--subgidname=name
نام کاربری در /etc/subgid برای تخصیص شناسههای گروه کاربری در حالت بدون ریشه.
--subuidname=name
نام کاربری در /etc/subuid برای تخصیص شناسههای کاربری در حالت بدون ریشه.
--sysctl=name=value
گزینههای sysctl
--uidmap=container_uid:from_uid[:amount]
نگاشت شناسههای کاربری (UID) سیستم میزبان به کانتینر در حالت بدون ریشه.
--userns=mode
فضای نام کاربر مورد استفاده
--uts=mode
فضای نام UTS مورد استفاده
-v, --volume= سوار کردن یک حجم بهصورت bind mount
--volume, -v=[[SOURCE-VOLUME|HOST-DIR:]CONTAINER-DIR[:OPTIONS]]
ایجاد یک اتصال پیوندی (bind mount). اگر مشخص کنید -v /HOST-DIR:/CONTAINER-DIR، ابزار Podman مسیر /HOST-DIR در میزبان را به /CONTAINER-DIR درون کانتینر Podman پیوند میزند. مقادیر OPTIONS فهرستی جداشده با کاما هستند و میتوانند شامل موارد زیر باشند:
- [rw|ro]
- [U]
- [z|Z|O]
- [[r]shared|[r]slave|[r]private|[r]unbindable] [1] ⟨#Footnote1⟩
مسیر CONTAINER-DIR باید یک مسیر مطلق مانند /src/docs باشد. مسیر HOST-DIR نیز باید یک مسیر مطلق باشد. Podman مسیر HOST-DIR را به مسیری که مشخص میکنید bind-mount میکند. برای نمونه، اگر /foo را بهعنوان مسیر میزبان بدهید، Podman محتویات /foo را در سیستمفایل کانتینر روی میزبان کپی کرده و آن را به درون کانتینر bind-mount میکند.
میتوانید چندین گزینه -v را برای سوار کردن یک یا چند اتصال به یک کانتینر مشخص کنید.
اتصالهای جلد حفاظتشده در برابر نوشتن (Write Protected Volume Mounts)
میتوانید پسوند :ro یا :rw را به یک جلد اضافه کنید تا به ترتیب در حالت فقطخواندنی یا خواندنی-نوشتنی متصل شود. بهطور پیشفرض، جلدها بهصورت خواندنی-نوشتنی سوار میشوند. مثالها را ببینید.
تغییر مالکیت اتصالهای جلد (Chowning Volume Mounts)
بهطور پیشفرض، Podman مالک و گروه دایرکتوریهای جلد منبع متصلشده به کانتینرها را تغییر نمیدهد. اگر کانتینری در یک فضاینام کاربری (user namespace) جدید ایجاد شود، UID و GID درون کانتینر ممکن است با UID و GID متفاوتی روی میزبان متناظر باشند.
پسوند :U به Podman اعلام میکند تا بر پایه UID و GID درون کانتینر، از UID و GID درست میزبان استفاده کرده و مالک و گروه جلد منبع را تغییر دهد.
برچسبگذاری اتصالهای جلد (Labeling Volume Mounts)
سامانههای برچسبگذاری مانند SELinux نیازمند قرارگیری برچسبهای مناسب روی محتوای جلد متصلشده به کانتینر هستند. بدون برچسب، سامانه امنیتی ممکن است از استفاده فرایندهای در حال اجرا درون کانتینر از محتوا جلوگیری کند. بهطور پیشفرض، Podman برچسبهای تنظیمشده توسط سیستمعامل را تغییر نمیدهد.
برای تغییر یک برچسب در بستر کانتینر، میتوانید یکی از دو پسوند :z یا :Z را به اتصال جلد اضافه کنید. این پسوندها به Podman میگویند که اشیای فایل روی جلدهای اشتراکی را دوباره برچسبگذاری کند. گزینه z به Podman میگوید که دو کانتینر محتوای جلد را به اشتراک میگذارند. در نتیجه، Podman محتوا را با یک برچسب محتوای مشترک برچسبگذاری میکند. برچسبهای جلد مشترک به همه کانتینرها اجازه خواندن/نوشتن محتوا را میدهند. گزینه Z به Podman میگوید که محتوا را با یک برچسب خصوصی غیرمشترک برچسبگذاری کند. تنها کانتینر فعلی میتواند از یک جلد خصوصی استفاده کند.
اتصالهای جلد اورلی (Overlay Volume Mounts)
پرچم :O به Podman اعلام میکند دایرکتوری را از میزبان با استفاده از سیستمفایل Overlay بهعنوان یک فضای ذخیرهسازی موقت سوار کند. کانتینرهای دستور RUN مجاز هستند محتویات درون نقطه اتصال را تغییر دهند و این تغییرات در فضای ذخیرهسازی کانتینر در یک دایرکتوری جداگانه ذخیره میشوند. در اصطلاحات سامانه فایل Overlay، دایرکتوری منبع lower و دایرکتوری ذخیرهسازی کانتینر upper خواهد بود. اصلاحات انجامشده در نقطه اتصال هنگام پایان اجرای دستور RUN از بین میروند، شبیه به یک نقطه اتصال tmpfs.
هر اجرای بعدی دستورهای RUN محتوای دایرکتوری منبع اصلی را میبیند؛ و هر تغییری از دستورات RUN قبلی دیگر وجود نخواهد داشت.
یک مورد استفاده از اتصال overlay، به اشتراک گذاشتن حافظه نهان بستهها (package cache) از میزبان به درون کانتینر برای افزایش سرعت ساخت است.
نکته:
- پرچم O مجاز نیست همراه با پرچمهای Z یا z مشخص شود. محتوای متصلشده به درون کانتینر با برچسب خصوصی برچسبگذاری میشود. در سامانههای SELinux، برچسبهای موجود در دایرکتوری منبع باید برای برچسب کانتینر قابلخواندن باشند. در غیر این صورت، تفکیک کانتینر SELinux باید غیرفعال شود تا کانتینر کار کند.
- تغییر دایرکتوری جلدی که با یک اتصال overlay به درون کانتینر متصل شده است میتواند خطاهای غیرمنتظره به وجود آورد. توصیه میشود تا پایان اجرای کانتینر این دایرکتوری را تغییر ندهید.
بهطور پیشفرض جلدهای bind-mount شده private هستند. بدین معنا که هرگونه اتصالی که درون کانتینر انجام شود روی میزبان قابل مشاهده نخواهد بود و برعکس. این رفتار را میتوان با مشخص کردن ویژگی انتشار اتصال جلد تغییر داد.
هنگامی که خطمشی انتشار اتصال روی shared تنظیم شود، هرگونه اتصال انجامشده درون کانتینر روی آن جلد هم برای میزبان و هم کانتینر قابل مشاهده خواهد بود. هنگامی که خطمشی انتشار اتصال روی slave تنظیم شود، انتشار یکطرفه اتصال فعال شده و هرگونه اتصال انجامشده روی میزبان برای آن جلد تنها در داخل کانتینر قابل مشاهده خواهد بود. برای کنترل ویژگی انتشار اتصال جلد، از پرچمهای انتشار :[r]shared، :[r]slave، [r]private یا [r]unbindable استفاده کنید. ویژگی انتشار را فقط میتوان برای جلدهای bind-mount شده تعیین کرد و نه جلدهای داخلی یا جلدهای نامگذاریشده. برای کارکرد انتشار اتصال روی نقطه اتصال منبع (نقطه اتصالی که دایرکتوری منبع روی آن سوار شده است)، باید ویژگیهای انتشار مناسب را داشته باشد. برای جلدهای shared، نقطه اتصال منبع باید shared باشد. و برای جلدهای slave، اتصال منبع باید shared یا slave باشد. [1] ⟨#Footnote1⟩
از دستور df <source-dir> برای تعیین اتصال منبع و سپس از دستور findmnt -o TARGET,PROPAGATION <source-mount-dir> برای تعیین ویژگیهای انتشار اتصال منبع استفاده کنید؛ اگر ابزار findmnt در دسترس نیست، نقطه اتصال منبع را میتوان با بررسی مدخل mount در فایل /proc/self/mountinfo مشخص کرد. optional fields را بررسی کنید و ببینید آیا ویژگی انتشاری مشخص شده است یا خیر. shared:X به معنای shared بودن اتصال است، master:X به معنای slave بودن اتصال است و اگر چیزی وجود نداشته باشد به این معناست که اتصال private است. [1] ⟨#Footnote1⟩
برای تغییر ویژگیهای انتشار یک نقطه اتصال از دستور mount استفاده کنید. برای نمونه، برای bind-mount کردن دایرکتوری منبع /foo دستورهای mount --bind /foo /foo و mount --make-private --make-shared /foo را اجرا کنید. این کار /foo را به یک نقطه اتصال shared تبدیل میکند. ویژگیهای انتشار نقطه اتصال منبع را میتوان مستقیماً تغییر داد. برای نمونه اگر / نقطه اتصال منبع برای /foo باشد، دستور mount --make-shared / را برای تبدیل / به یک اتصال shared به کار ببرید.
نکته: اگر کاربر تنها از طریق یک گروه دارای مجوز دسترسی باشد، دسترسی به حجم از درون یک پاد بدون ریشه ناموفق خواهد بود.
اتصالهای نگاشت شناسه (Idmapped mount)
در صورت تعیین idmap، یک اتصال با شناسه نگاشتشده به فضاینام کاربری مقصد در کانتینر ایجاد میشود. گزینه idmap از نگاشت سفارشی که میتواند با فضاینام کاربری کانتینر متفاوت باشد پشتیبانی میکند. این نگاشت را میتوان بعد از گزینه idmap به این صورت تعیین کرد: idmap=uids=0-1-10#10-11-10;gids=0-100-10. برای هر سهگانه، مقدار اول آغاز شناسههای سیستمفایل پشتیبان است که به مقدار دوم روی میزبان نگاشت میشوند. طول این نگاشت در مقدار سوم مشخص میگردد. محدودههای چندگانه با نماد # از یکدیگر تفکیک میشوند.
--volumes-from=CONTAINER[:OPTIONS]
سوار کردن حجمها از کانتینر(های) مشخصشده. برای به اشتراکگذاری حجمها میان کانتینرها و پادها استفاده میشود. options فهرستی جداشده با کاما از موارد زیر است:
- rw|ro
- z
حجمهای از قبل سوارشده از یک کانتینر مبدأ را روی یک پاد دیگر سوار میکند. CONTAINER میتواند نام یا شناسه کانتینر باشد. برای اشتراکگذاری حجم، هنگام اجرای کانتینر مقصد از گزینه --volumes-from استفاده کنید. حتی اگر کانتینر مبدأ در حال اجرا نباشد، حجمها میتوانند به اشتراک گذاشته شوند.
بهطور پیشفرض، Podman حجمها را در همان حالت (خواندنی-نوشتنی یا فقطخواندنی) که در کانتینر مبدأ سوار شدهاند، سوار میکند. این رفتار را میتوان با افزودن گزینه ro یا rw تغییر داد.
سامانههای برچسبگذاری امنیتی مانند SELinux نیازمند قرارگیری برچسبهای مناسب روی محتوای حجم سوارشده در پاد هستند. بدون برچسب، سامانه امنیتی ممکن است از دسترسی فرآیندهای درون کانتینر به محتوا جلوگیری کند. بهطور پیشفرض، Podman برچسبهای تنظیمشده توسط سیستمعامل را تغییر نمیدهد.
برای تغییر برچسب در بافت پاد، پسوند z را به سوار کردن حجم اضافه کنید. این پسوند به Podman اعلام میکند تا اشیای فایل را روی حجمهای مشترک مجدداً برچسبگذاری کند. گزینه z به Podman میگوید که دو موجودیت محتوای حجم را به اشتراک میگذارند. در نتیجه، Podman محتوا را با یک برچسب محتوای مشترک نشانهگذاری میکند. برچسبهای مشترک به همه کانتینرها اجازه خواندن و نوشتن روی محتوا را میدهند.
اگر محل حجم ناشی از کانتینر مبدأ با دادههای موجود در پاد مقصد همپوشانی داشته باشد، حجم مذکور دادههای موجود در مقصد را پنهان میکند.
مثالها (EXAMPLES)
شبیهسازی پاد مشخصشده در یک پاد جدید:
# podman pod clone pod-name 6b2c73ff8a1982828c9ae2092954bcd59836a131960f7e05221af9df5939c584
شبیهسازی پاد مشخصشده در یک پاد جدید با نام جدید:
# podman pod clone pod-name --name=cloned-pod d0cf1f782e2ed67e8c0050ff92df865a039186237a4df24d7acba5b1fa8cc6e7 6b2c73ff8a1982828c9ae2092954bcd59836a131960f7e05221af9df5939c584
شبیهسازی و حذف پاد اصلی و تغییر تعداد پردازندهها:
# podman pod clone --destroy --cpus=5 d0cf1 6b2c73ff8a1982828c9ae2092954bcd59836a131960f7e05221af9df5939c584
شبیهسازی پاد مشخصشده با شناسه و نام جدید:
# podman pod clone 2d4d4fca7219b4437e0d74fcdc272c4f031426a6eacd207372691207079551de new_name 5a9b7851013d326aa4ac4565726765901b3ecc01fcbc0f237bc7fd95588a24f9
شبیهسازی یک پاد با اعمال محدودیت حافظه:
# podman pod clone --memory=1g --memory-swap=2g pod-name 6b2c73ff8a1982828c9ae2092954bcd59836a131960f7e05221af9df5939c584
شبیهسازی یک پاد با اعمال محدودیت پردازنده:
# podman pod clone --cpus=2.5 --cpu-shares=1024 pod-name 6b2c73ff8a1982828c9ae2092954bcd59836a131960f7e05221af9df5939c584
همچنین ببینید (SEE ALSO)
تاریخچه (HISTORY)
مه ۲۰۲۲، در ابتدا توسط Charlie Doern <cdoern@redhat.com> نگاشته شد.
پانویسها (FOOTNOTES)
۱: پروژه Podman به فراگیری، از ارزشهای بنیادین متنباز، متعهد است. اصطلاحات انتشار سوارکردن (mount propagation) شامل master و slave که در اینجا استفاده شده، مشکلساز و تفرقهافکن است و باید دگرگون شود. با این حال، این اصطلاحات هماکنون درون هسته لینوکس استفاده میشوند و در این مقطع زمانی باید به همان صورت به کار روند. هنگامی که نگهدارندگان هسته این کاربرد را اصلاح کنند، Podman بیدرنگ از آن پیروی خواهد کرد.