TÄmai par systemd lietoÅ”anu konteineros sekojam lÄ«dzi jau ilgu laiku. 2014. gadÄ mÅ«su droŔības inženieris Daniels VolÅ”s uzrakstÄ«ja rakstu
Å ajÄ rakstÄ mÄs parÄdÄ«sim, kas laika gaitÄ ir mainÄ«jies un kÄ Podman var mums palÄ«dzÄt Å”ajÄ jautÄjumÄ.
Ir daudz iemeslu, lai palaistu sistÄmu konteinerÄ, piemÄram:
- Daudzpakalpojumu konteineri ā daudzi cilvÄki vÄlas izÅemt savas daudzpakalpojumu lietojumprogrammas no virtuÄlajÄm maŔīnÄm un palaist tÄs konteineros. Protams, labÄk bÅ«tu sadalÄ«t Å”Ädas lietojumprogrammas mikropakalpojumos, taÄu ne visi vÄl zina, kÄ to izdarÄ«t, vai vienkÄrÅ”i nav laika. TÄpÄc ir pilnÄ«gi saprÄtÄ«gi palaist Å”Ädas lietojumprogrammas kÄ pakalpojumus, ko systemd palaida no vienÄ«bas failiem.
- SistÄmas vienÄ«bas faili - LielÄkÄ daļa lietojumprogrammu, kas darbojas konteineros, ir veidotas no koda, kas iepriekÅ” darbojÄs virtuÄlajÄs vai fiziskÄs maŔīnÄs. Å Ä«m lietojumprogrammÄm ir vienÄ«bas fails, kas ir rakstÄ«ts Ŕīm lietojumprogrammÄm un saprot, kÄ tÄs ir jÄpalaiž. TÄpÄc joprojÄm ir labÄk sÄkt pakalpojumus, izmantojot atbalstÄ«tas metodes, nevis uzlauzt savu sÄkuma pakalpojumu.
- Systemd ir procesu vadÄ«tÄjs. Tas pÄrvalda pakalpojumus (izslÄdzas, restartÄ pakalpojumus vai nogalina zombiju procesus) labÄk nekÄ jebkurÅ” cits rÄ«ks.
Tas nozÄ«mÄ, ka ir daudz iemeslu nedarbinÄt systemd konteineros. Galvenais ir tas, ka systemd/journald kontrolÄ konteineru un lÄ«dzÄ«gu rÄ«ku izvadi
Podmena atnÄkÅ”ana
MÄs esam priecÄ«gi ziÅot, ka situÄcija beidzot ir virzÄ«jusies uz priekÅ”u. Komanda, kas atbild par konteineru ekspluatÄciju uzÅÄmumÄ Red Hat, nolÄma attÄ«stÄ«ties
Daudzi cilvÄki to dara.
Mans Podmans un es nekÄdÄ gadÄ«jumÄ neesam pret uz systemd balstÄ«tiem konteineriem. Galu galÄ Systemd ir visbiežÄk izmantotÄ Linux sÄkumsistÄmas apakÅ”sistÄma, un neļaut tai pareizi darboties konteineros, tas nozÄ«mÄ ignorÄt to, kÄ tÅ«kstoÅ”iem cilvÄku ir pieraduÅ”i darbinÄt konteinerus.
Podman zina, kas jÄdara, lai sistÄma pareizi darbotos konteinerÄ. Tam ir vajadzÄ«gas tÄdas lietas kÄ tmpfs uzstÄdÄ«Å”ana uz /run un /tmp. ViÅai patÄ«k, ja ir iespÄjota "konteineru" vide, un viÅa sagaida rakstÄ«Å”anas atļaujas savai cgroup direktorija daļai un mapei /var/log/journald.
Kad startÄjat konteineru, kurÄ pirmÄ komanda ir init vai systemd, Podman automÄtiski konfigurÄ tmpfs un Cgroups, lai nodroÅ”inÄtu, ka systemd tiek palaists bez problÄmÄm. Lai bloÄ·Ätu Å”o automÄtiskÄs palaiÅ”anas režīmu, izmantojiet opciju --systemd=false. LÅ«dzu, Åemiet vÄrÄ, ka Podman izmanto systemd režīmu tikai tad, ja redz, ka tai ir jÄpalaiž systemd vai init komanda.
Å eit ir izvilkums no rokasgrÄmatas:
cilvÄks podman palaist
...āsystemd=true|false
Konteinera palaiÅ”ana systemd režīmÄ. IespÄjots pÄc noklusÄjuma.
Ja palaižat systemd vai init komandu konteinerÄ, Podman konfigurÄs tmpfs pievienoÅ”anas punktus Å”Ädos direktorijos:
/run, /run/lock, /tmp, /sys/fs/cgroup/systemd, /var/lib/journal
ArÄ« noklusÄjuma apturÄÅ”anas signÄls bÅ«s SIGRTMIN+3.
Tas viss ļauj systemd darboties slÄgtÄ konteinerÄ bez jebkÄdÄm izmaiÅÄm.
PIEZÄŖME: systemd mÄÄ£ina rakstÄ«t cgroup failu sistÄmÄ. TomÄr SELinux neļauj konteineriem to darÄ«t pÄc noklusÄjuma. Lai iespÄjotu rakstÄ«Å”anu, iespÄjojiet BÅ«la parametru container_manage_cgroup:
setsebool -P container_manage_cgroup true
Tagad apskatiet, kÄ izskatÄs Dockerfile, lai palaistu systemd konteinerÄ, izmantojot Podman:
# cat Dockerfile
FROM fedora
RUN dnf -y install httpd; dnf clean all; systemctl enable httpd
EXPOSE 80
CMD [ "/sbin/init" ]
Tas ir viss.
Tagad mÄs saliekam konteineru:
# podman build -t systemd .
MÄs sakÄm SELinux, lai ļautu systemd modificÄt Cgroups konfigurÄciju:
# setsebool -P container_manage_cgroup true
Starp citu, daudzi cilvÄki aizmirst par Å”o soli. Par laimi, tas ir jÄdara tikai vienu reizi, un iestatÄ«jums tiek saglabÄts pÄc sistÄmas pÄrstartÄÅ”anas.
Tagad mÄs vienkÄrÅ”i sÄkam konteineru:
# 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.
Tas ir viss, pakalpojums ir izveidots un darbojas:
$ curl localhost
<html xml_lang="en" lang="en">
ā¦
</html>
PIEZÄŖME. NemÄÄ£iniet to lietot Docker! Tur jums joprojÄm ir jÄdejo ar tamburÄ«nu, lai palaistu Å”Äda veida konteinerus caur dÄmonu. (Lai tas viss darbotos nevainojami programmÄ Docker, bÅ«s nepiecieÅ”ami papildu lauki un pakotnes, vai arÄ« tas bÅ«s jÄpalaiž priviliÄ£ÄtÄ konteinerÄ. PlaÅ”Äku informÄciju skatiet sadaļÄ
VÄl dažas interesantas lietas par Podman un systemd
Podman darbojas labÄk nekÄ Docker sistÄmas vienÄ«bu failos
Ja konteineri ir jÄuzsÄk sistÄmas sÄknÄÅ”anas laikÄ, varat vienkÄrÅ”i ievietot atbilstoÅ”Äs Podman komandas systemd vienÄ«bas failÄ, kas sÄks pakalpojumu un uzraudzÄ«s to. Podman izmanto standarta fork-exec modeli. Citiem vÄrdiem sakot, konteineru procesi ir Podman procesa atvases, tÄpÄc systemd tos var viegli pÄrraudzÄ«t.
Docker izmanto klienta-servera modeli, un Docker CLI komandas var arÄ« ievietot tieÅ”i vienÄ«bas failÄ. TomÄr, tiklÄ«dz Docker klients izveido savienojumu ar Docker dÄmonu, tas (klients) kļūst tikai par vÄl vienu procesa apstrÄdes stdin un stdout. SavukÄrt systemd nav ne jausmas par savienojumu starp Docker klientu un konteineru, kas darbojas Docker dÄmona kontrolÄ, un tÄpÄc Ŕī modeļa ietvaros systemd fundamentÄli nevar pÄrraudzÄ«t pakalpojumu.
SistÄmas aktivizÄÅ”ana caur kontaktligzdu
Podman pareizi apstrÄdÄ aktivizÄÅ”anu, izmantojot ligzdu. TÄ kÄ Podman izmanto modeli fork-exec, tas var pÄrsÅ«tÄ«t ligzdu saviem pakÄrtotajiem konteineru procesiem. Docker to nevar izdarÄ«t, jo tas izmanto klienta-servera modeli.
Varlink pakalpojums, ko Podman izmanto, lai sazinÄtos ar attÄliem klientiem uz konteineriem, faktiski tiek aktivizÄts, izmantojot ligzdu. Cockpit-podman pakotne, kas rakstÄ«ta Node.js un ir daļa no kabÄ«nes projekta, ļauj cilvÄkiem mijiedarboties ar Podman konteineriem, izmantojot tÄ«mekļa saskarni. TÄ«mekļa dÄmons, kurÄ darbojas kabÄ«nes-podman, nosÅ«ta ziÅojumus uz varlink ligzdu, kuru systemd klausÄs. PÄc tam Systemd aktivizÄ programmu Podman, lai saÅemtu ziÅojumus un sÄktu pÄrvaldÄ«t konteinerus. Systemd aktivizÄÅ”ana, izmantojot ligzdu, novÄrÅ” nepiecieÅ”amÄ«bu pÄc pastÄvÄ«gi strÄdÄjoÅ”a dÄmona, ievieÅ”ot attÄlÄs API.
TurklÄt mÄs izstrÄdÄjam citu Podman klientu ar nosaukumu podman-remote, kas ievieÅ” to paÅ”u Podman CLI, bet izsauc varlink, lai palaistu konteinerus. Podman-tÄlvadÄ«bas pults var darboties papildus SSH sesijÄm, ļaujot droÅ”i mijiedarboties ar konteineriem dažÄdÄs iekÄrtÄs. Laika gaitÄ mÄs plÄnojam iespÄjot podman-remote, lai atbalstÄ«tu MacOS un Windows kopÄ ar Linux, lai Å”o platformu izstrÄdÄtÄji varÄtu palaist Linux virtuÄlo maŔīnu, kurÄ darbojas Podman varlink, un gÅ«t pilnu pieredzi, ka konteineri darbojas vietÄjÄ datorÄ.
SD_NOTIFY
Systemd ļauj atlikt palÄ«gpakalpojumu palaiÅ”anu, lÄ«dz sÄkas tiem nepiecieÅ”amais konteinerizÄtais pakalpojums. Podman var pÄrsÅ«tÄ«t SD_NOTIFY ligzdu konteinerizÄtajam pakalpojumam, lai pakalpojums paziÅotu sistÄmai, ka tas ir gatavs darbam. Un atkal, Docker, kas izmanto klienta-servera modeli, to nevar izdarÄ«t.
PlÄnos
MÄs plÄnojam pievienot komandu podman generate systemd CONTAINERID, kas Ä£enerÄs systemd vienÄ«bas failu, lai pÄrvaldÄ«tu konkrÄtu norÄdÄ«to konteineru. Tam vajadzÄtu darboties gan saknes, gan bezsakÅu režīmÄ nepieŔķirtiem konteineriem. MÄs pat esam redzÄjuÅ”i pieprasÄ«jumu pÄc OCI saderÄ«ga systemd-nspawn izpildlaika.
SecinÄjums
Systemd darbinÄÅ”ana konteinerÄ ir saprotama nepiecieÅ”amÄ«ba. Pateicoties Podman, mums beidzot ir konteinera izpildlaiks, kas nav pretrunÄ ar systemd, bet padara to viegli lietojamu.
Avots: www.habr.com