په کانتینر کې د سیسټم چلول

موږ د اوږدې مودې لپاره په کانټینرونو کې د سیسټمډ کارولو موضوع تعقیبوو. په 2014 کې بیرته، زموږ امنیتي انجنیر ډینیل والش یوه مقاله لیکلې وه د ډاکر کانټینر دننه سیسټم چلول، او یو څو کاله وروسته - بل، چې ویل کیږي په غیر مراعات شوي کانټینر کې سیسټم چلولپه هغه کې هغه وویل چې وضعیت ډیر ښه شوی نه دی. په ځانګړي توګه ، هغه لیکلي چې "له بده مرغه ، حتی دوه کاله وروسته ، که تاسو د "ډاکر سیسټم" ګوګل وکړئ ، لومړی شی چې راپورته کیږي د هغه پخوانی مقاله ده. نو دا د یو څه بدلولو وخت دی. " برسېره پر دې، موږ لا دمخه په اړه خبرې کړې دي د ډاکر او سیسټمډ پراختیا کونکو ترمنځ شخړه.

په کانتینر کې د سیسټم چلول

پدې مقاله کې به موږ وښیو چې د وخت په تیریدو سره څه بدلون راغلی او پوډمین څنګه پدې مسله کې زموږ سره مرسته کولی شي.

په کانټینر کې د سیسټم چلولو لپاره ډیری دلیلونه شتون لري، لکه:

  1. د څو خدماتو کانتینرونه - ډیری خلک غواړي خپل د څو خدماتو غوښتنلیکونه له مجازی ماشینونو څخه وباسي او په کانټینرونو کې یې پرمخ وړي. دا به غوره وي، البته، دا ډول غوښتنلیکونه په مایکرو خدماتو کې مات کړئ، مګر هرڅوک نه پوهیږي چې دا څنګه ترسره کړي یا په ساده ډول وخت نلري. له همدې امله، د یونټ فایلونو څخه د سیسټم لخوا پیل شوي خدماتو په توګه د داسې غوښتنلیکونو چلول مناسب معنی لري.
  2. د سیسټمډ واحد فایلونه - ډیری غوښتنلیکونه چې د کانټینرونو دننه روان دي د کوډ څخه جوړ شوي چې دمخه په مجازی یا فزیکي ماشینونو کې روان وو. دا غوښتنلیکونه د واحد فایل لري چې د دې غوښتنلیکونو لپاره لیکل شوي او پوهیږي چې دوی باید څنګه پیل شي. نو دا لاهم غوره ده چې د ملاتړ شوي میتودونو په کارولو سره خدمات پیل کړئ ، د دې پرځای چې خپل د پیل خدمت هیک کړئ.
  3. Systemd د پروسې مدیر دی. دا خدمتونه اداره کوي (بندوي، خدمتونه بیا پیلوي، یا د زومبي پروسې وژني) د نورو وسیلو په پرتله ښه.

دې وویل، په کانټینرونو کې د سیسټم نه چلولو ډیری دلیلونه شتون لري. اصلي یو دا دی چې سیسټمډ/جرنلډ د کانټینرونو محصول کنټرولوي ، او اوزار لکه کوبنیټس او یا پرانيستی تمه کیږي کانټینرونه په مستقیم ډول stdout او stderr ته log ولیکي. له همدې امله، که تاسو د آرکیسټریشن وسیلو له لارې کانټینرونه اداره کوئ لکه پورته ذکر شوي، تاسو باید په جدي توګه د سیسټم پر بنسټ کانتینرونو کارولو ته پام وکړئ. سربیره پردې ، د ډاکر او موبي پراختیا کونکي ډیری وختونه په کانټینرونو کې د سیسټم کارولو سره سخت مخالف دي.

د پوډمین راتګ

موږ خوشحاله یو چې راپور ورکړو چې وضعیت په پای کې مخ په وړاندې روان دی. په Red Hat کې د کانټینرونو چلولو مسؤل ټیم ​​پریکړه وکړه چې پراختیا ومومي ستاسو د کانټینر انجن. هغه یو نوم ترلاسه کړ پوډمین او د ډاکر په څیر ورته کمانډ لاین انٹرفیس (CLI) وړاندیز کوي. او نږدې ټول ډاکر کمانډونه په پوډمین کې په ورته ډول کارول کیدی شي. موږ ډیری وختونه سیمینارونه ترسره کوو، چې اوس ورته ویل کیږي پوډمین ته د ډاکر بدلول، او لومړی سلایډ د لیکلو غوښتنه کوي: عرف ډاکر = پوډمین.

ډیری خلک دا کار کوي.

زما پوډمین او زه په هیڅ ډول د سیسټم پراساس کانټینرونو پروړاندې نه یو. په هرصورت، Systemd ترټولو عام کارول شوي لینکس init سبسیسټم دی، او دا په کانټینرونو کې په سمه توګه کار کولو ته اجازه نه ورکول پدې مانا ده چې په زرګونو خلک څنګه د کانټینرونو چلولو سره عادی دي.

پوډمین پوهیږي چې څه وکړي ترڅو سیسټم په کانټینر کې په سمه توګه کار وکړي. دا شیانو ته اړتیا لري لکه د tmpfs نصب کول په /run او /tmp. هغه د "کنټینر شوي" چاپیریال فعالول خوښوي او د هغې د cgroup لارښود برخې او /var/log/journald فولډر ته د لیکلو اجازې تمه لري.

کله چې تاسو یو کانټینر پیل کړئ په کوم کې چې لومړی کمانډ init یا systemd وي، پوډمین په اوتومات ډول tmpfs او Cgroups تنظیموي ترڅو ډاډ ترلاسه کړي چې سیسټم پرته له کومې ستونزې پیل کیږي. د دې اتومات لانچ حالت بندولو لپاره، --systemd=false انتخاب وکاروئ. مهرباني وکړئ په یاد ولرئ چې پوډمین یوازې د سیسټمډ حالت کاروي کله چې دا وګوري چې دا د سیسټمډ یا init کمانډ چلولو ته اړتیا لري.

دلته د لارښود څخه یوه اقتباس دی:

سړی پوډمن منډه کړه
...

-systemd=ریښتیا|غلط

د سیسټم په حالت کې د کانټینر چلول. په ډیفالټ فعال شوی.

که تاسو په کانټینر کې د systemd یا init کمانډ پرمخ وړئ ، پوډمین به په لاندې لارښودونو کې د tmpfs ماونټ پوائنټونه تنظیم کړي:

/چل، /چل/لاک، /tmp، /sys/fs/cgroup/systemd، /var/lib/journal

همدارنګه د اصلي تمځای سیګنال به SIGRTMIN+3 وي.

دا ټول سیسټم ته اجازه ورکوي چې پرته له کوم تعدیل څخه په تړل شوي کانټینر کې پرمخ بوځي.

یادونه: سیسټمډ هڅه کوي چې د cgroup فایل سیسټم ته ولیکي. په هرصورت، SELinux د ډیفالټ په واسطه د کانټینرونو مخه نیسي. د لیکلو وړ کولو لپاره، د کانټینر_مینیج_cgroup بولین پیرامیټر فعال کړئ:

setsebool -P کانټینر_مینیج_cgroup ریښتیا

اوس وګورئ چې Dockerfile د پوډمین په کارولو سره په کانټینر کې د سیسټم چلولو لپاره څه ښکاري:

# cat Dockerfile

FROM fedora

RUN dnf -y install httpd; dnf clean all; systemctl enable httpd

EXPOSE 80

CMD [ "/sbin/init" ]

بس نور څه نه.

اوس موږ کانټینر راټولوو:

# podman build -t systemd .

موږ SELinux ته وایو چې systemd ته اجازه ورکړي چې د Cgroups ترتیب بدل کړي:

# setsebool -P container_manage_cgroup true

د لارې په توګه، ډیری خلک د دې ګام په اړه هیر کړي. خوشبختانه ، دا یوازې یوځل ترسره کیدو ته اړتیا لري او ترتیب د سیسټم ریبوټ کولو وروسته خوندي شوی.

اوس موږ یوازې کانټینر پیل کوو:

# podman run -ti -p 80:80 systemd

systemd 239 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid)

Detected virtualization container-other.

Detected architecture x86-64.

Welcome to Fedora 29 (Container Image)!

Set hostname to <1b51b684bc99>.

Failed to install release agent, ignoring: Read-only file system

File /usr/lib/systemd/system/systemd-journald.service:26 configures an IP firewall (IPAddressDeny=any), but the local system does not support BPF/cgroup based firewalling.

Proceeding WITHOUT firewalling in effect! (This warning is only shown for the first loaded unit using IP firewalling.)

[  OK ] Listening on initctl Compatibility Named Pipe.

[  OK ] Listening on Journal Socket (/dev/log).

[  OK ] Started Forward Password Requests to Wall Directory Watch.

[  OK ] Started Dispatch Password Requests to Console Directory Watch.

[  OK ] Reached target Slices.

…

[  OK ] Started The Apache HTTP Server.

دا دی، خدمت پورته او روان دی:

$ curl localhost

<html  xml_lang="en" lang="en">

…

</html>

یادونه: په ډاکر کې دا هڅه مه کوئ! هلته تاسو لاهم اړتیا لرئ د تیمبورین سره نڅا وکړئ ترڅو دا ډول کانټینرونه د ډیمون له لارې پیل کړئ. (اضافي ساحو او کڅوړو ته به اړتیا وي چې دا ټول په ډاکر کې په بې ساري ډول کار وکړي، یا دا به اړتیا ولري چې په یو امتیازي کانټینر کې چلول شي. د جزیاتو لپاره، وګورئ مقالې.)

د پوډمین او سیسټمډ په اړه یو څو نور ښه شیان

پوډمین د سیسټمډ واحد فایلونو کې د ډاکر څخه ښه کار کوي

که چیرې کانټینرونه پیل کولو ته اړتیا ولري کله چې سیسټم بوټ شي ، نو تاسو کولی شئ په ساده ډول د سیسټمډ واحد فایل کې د پوډمین مناسب کمانډونه دننه کړئ ، کوم چې به خدمت پیل کړي او څارنه به یې وکړي. پوډمن معیاري فورک-ایکسیک ماډل کاروي. په بل عبارت، د کانټینر پروسې د پوډمین پروسې ماشومان دي، نو سیسټمډ کولی شي په اسانۍ سره څارنه وکړي.

ډاکر د پیرودونکي - سرور ماډل کاروي ، او د ډاکر CLI کمانډونه هم مستقیم د یونټ فایل کې کیښودل کیدی شي. په هرصورت ، یوځل چې د ډاکر پیرودونکی د ډاکر ډیمون سره وصل شي ، دا (مراجعیت) د سټین او سټډ آؤٹ اداره کولو لپاره یو بل پروسې کیږي. په بدل کې ، سیسټمډ د ډاکر پیرودونکي او کانټینر ترمینځ د اړیکې په اړه هیڅ نظر نلري چې د ډاکر ډیمون تر کنټرول لاندې تیریږي ، او له همدې امله ، پدې ماډل کې ، سیسټمډ اساسا نشي کولی د خدماتو څارنه وکړي.

د ساکټ له لارې د سیسټم فعالول

پوډمین د ساکټ له لارې په سمه توګه فعالول اداره کوي. ځکه چې پوډمین د فورک-ایکسیک ماډل کاروي، دا کولی شي ساکټ د خپل ماشوم کانټینر پروسې ته وړاندې کړي. ډاکر دا نشي کولی ځکه چې دا د پیرودونکي - سرور ماډل کاروي.

د varlink خدمت چې پوډمین د لرې پرتو پیرودونکو سره کانټینرونو ته د خبرو اترو لپاره کاروي په حقیقت کې د ساکټ له لارې فعال شوی. د cockpit-podman بسته چې په Node.js کې لیکل شوې او د کاکپیټ پروژې برخه ده، خلکو ته اجازه ورکوي چې د ویب انٹرفیس له لارې د پوډمین کانټینرونو سره اړیکه ونیسي. د ویب ډیمون د کاکپیټ پوډمین چلول د ورلینک ساکټ ته پیغامونه لیږي چې سیسټم یې اوري. سیسټمډ بیا د پوډمین برنامه فعالوي ترڅو پیغامونه ترلاسه کړي او د کانټینرونو اداره کول پیل کړي. په ساکټ کې د سیسټم فعال کول د ریموټ APIs پلي کولو پرمهال د دوامداره چلونکي ډیمون اړتیا له مینځه وړي.

سربیره پردې ، موږ د پوډمین ریموټ په نوم یو بل پوډمین پیرودونکي رامینځته کوو ، کوم چې ورته پوډمین CLI پلي کوي مګر د کانټینرونو چلولو لپاره varlink غږ کوي. پوډمین - ریموټ کولی شي د SSH سیشنونو په سر کې وګرځي ، تاسو ته اجازه درکوي په مختلف ماشینونو کې د کانټینرونو سره په خوندي ډول تعامل وکړئ. د وخت په تیریدو سره ، موږ پلان لرو چې د لینکس تر څنګ د MacOS او وینډوز ملاتړ لپاره پوډمین ریموټ فعال کړو ، نو پدې پلیټ فارمونو کې پراختیا کونکي کولی شي د پوډمین ورلنک چلولو سره د لینکس مجازی ماشین پرمخ بوځي او بشپړ تجربه ولري چې کانټینرونه په محلي ماشین کې روان دي.

SD_NOTIFY

سیسټمډ تاسو ته اجازه درکوي د مرستندویه خدماتو پیل تر هغه وخته پورې وځنډوي تر څو چې د کانټینر شوي خدمت پیل شي. پوډمین کولی شي د SD_NOTIFY ساکټ کانټینر شوي خدمت ته واستوي ترڅو خدمت سیسټم ته خبر ورکړي چې دا کار کولو ته چمتو دی. او بیا ، ډاکر ، کوم چې د پیرودونکي - سرور ماډل کاروي ، دا نشي کولی.

په پلانونو کې

موږ پلان لرو چې د کمانډ پوډمین جنریټ سیسټمډ کانټینرایډ اضافه کړو ، کوم چې به د مشخص شوي کانټینر اداره کولو لپاره د سیسټمډ واحد فایل رامینځته کړي. دا باید د بې ګټې کانټینرونو لپاره په روټ او بې روټ حالتونو کې کار وکړي. موږ حتی د OCI-compatible systemd-nspawn چلولو لپاره غوښتنه لیدلې ده.

پایلې

په کانټینر کې د سیسټم چلول د پوهیدو وړ اړتیا ده. او د پوډمین څخه مننه، موږ په پای کې د کانټینر چلولو وخت لرو چې د سیسټم سره ټکر نه کوي، مګر کارول یې اسانه کوي.

سرچینه: www.habr.com

Add a comment