Nṣiṣẹ systemd ni a eiyan

A ti tẹle koko-ọrọ ti lilo systemd ninu awọn apoti fun igba pipẹ. Pada ni ọdun 2014, ẹlẹrọ aabo wa Daniel Walsh kowe nkan kan Ṣiṣe eto laarin Apoti Docker kan, ati ki o kan tọkọtaya ti odun nigbamii - miiran, eyi ti a npe ni Nṣiṣẹ systemd ni a ti kii-anfani eiyan, ninu eyiti o sọ pe ipo naa ko ti dara si pupọ. Ni pataki, o kọwe pe “laanu, paapaa ọdun meji lẹhinna, ti o ba google “eto Docker”, ohun akọkọ ti o wa ni nkan atijọ rẹ kanna. Nitorinaa o to akoko lati yi nkan pada. ” Ni afikun, a ti sọrọ tẹlẹ rogbodiyan laarin Docker ati awọn olupilẹṣẹ eto.

Nṣiṣẹ systemd ni a eiyan

Ninu àpilẹkọ yii a yoo fihan ohun ti o yipada ni akoko ati bi Podman ṣe le ṣe iranlọwọ fun wa ninu ọran yii.

Awọn idi pupọ lo wa lati ṣiṣẹ eto inu apoti kan, gẹgẹbi:

  1. Multiservice awọn apoti - ọpọlọpọ eniyan fẹ lati fa awọn ohun elo iṣẹ-ọpọlọpọ wọn kuro ninu awọn ẹrọ foju ati ṣiṣe wọn sinu awọn apoti. Yoo dara julọ, dajudaju, lati fọ iru awọn ohun elo sinu awọn iṣẹ microservices, ṣugbọn kii ṣe gbogbo eniyan mọ bi o ṣe le ṣe eyi sibẹsibẹ tabi nirọrun ko ni akoko. Nitorinaa, ṣiṣe iru awọn ohun elo bii awọn iṣẹ ti a ṣe ifilọlẹ nipasẹ eto lati awọn faili ẹyọkan jẹ oye pipe.
  2. Systemd Unit Awọn faili - Pupọ awọn ohun elo ti n ṣiṣẹ ninu awọn apoti ni a kọ lati koodu ti o ṣiṣẹ tẹlẹ lori foju tabi awọn ẹrọ ti ara. Awọn ohun elo wọnyi ni faili ẹyọkan ti a kọ fun awọn ohun elo wọnyi ati loye bi o ṣe yẹ ki wọn ṣe ifilọlẹ. Nitorinaa o tun dara julọ lati bẹrẹ awọn iṣẹ ni lilo awọn ọna atilẹyin, dipo gige iṣẹ init tirẹ.
  3. Systemd jẹ oluṣakoso ilana. O ṣakoso awọn iṣẹ (tiipa, awọn iṣẹ tun bẹrẹ, tabi pa awọn ilana Zombie) dara julọ ju eyikeyi ọpa miiran lọ.

Iyẹn ti sọ, awọn idi pupọ lo wa lati ma ṣiṣẹ eto ni awọn apoti. Ohun akọkọ ni pe systemd/journald n ṣakoso iṣelọpọ awọn apoti, ati awọn irinṣẹ bii Kubernetes tabi Ṣiṣii Shift reti awọn apoti lati kọ log taara si stdout ati stderr. Nitorinaa, ti o ba n ṣakoso awọn apoti nipasẹ awọn irinṣẹ orchestration bii awọn ti a mẹnuba loke, o yẹ ki o ronu ni pataki nipa lilo awọn apoti ti o da lori eto. Ni afikun, Docker ati awọn olupilẹṣẹ Moby nigbagbogbo ni ilodi si ilodi si lilo eto ninu awọn apoti.

Wiwa ti Podman

Inu wa dun lati jabo pe ipo naa ti lọ siwaju nikẹhin. Awọn egbe lodidi fun nṣiṣẹ awọn apoti ni Red Hat pinnu lati se agbekale ti ara rẹ eiyan engine. O ni orukọ podman ati pe o funni ni wiwo laini aṣẹ kanna (CLI) bi Docker. Ati pe gbogbo awọn aṣẹ Docker le ṣee lo ni Podman ni ọna kanna. Nigbagbogbo a ṣe awọn apejọ, eyiti a pe ni bayi Iyipada Docker si Podman, ati ifaworanhan akọkọ n pe fun kikọ: inagijẹ docker=podman.

Ọpọlọpọ eniyan ṣe eyi.

Mi Podman ati Emi ko si ni ọna kan lodi si awọn apoti ti o da lori eto. Lẹhinna, Systemd jẹ eto ipilẹ init Linux ti o wọpọ julọ, ati pe ko gba laaye lati ṣiṣẹ daradara ninu awọn apoti tumọ si aibikita bii ẹgbẹẹgbẹrun eniyan ṣe saba si awọn apoti ṣiṣe.

Podman mọ kini lati ṣe lati jẹ ki systemd ṣiṣẹ daradara ninu apoti kan. O nilo awọn nkan bii iṣagbesori tmpfs lori / run ati / tmp. O nifẹ lati jẹ ki agbegbe “afikun” ṣiṣẹ ati nireti kikọ awọn igbanilaaye si apakan tirẹ ti itọsọna akojọpọ ati si folda /var/log/journald.

Nigbati o ba bẹrẹ eiyan kan ninu eyiti aṣẹ akọkọ jẹ init tabi eto, Podman ṣe atunto tmpfs laifọwọyi ati Awọn ẹgbẹ lati rii daju pe eto eto bẹrẹ laisi awọn iṣoro. Lati dènà ipo ifilọlẹ aifọwọyi, lo aṣayan --systemd=eke. Jọwọ ṣakiyesi pe Podman nlo ipo eto nikan nigbati o rii pe o nilo lati ṣiṣẹ systemd tabi aṣẹ init.

Eyi ni yiyan lati inu itọnisọna:

ọkunrin podman run
...

–systemd=otitọ| irọ

Nṣiṣẹ a eiyan ni systemd mode. Ṣiṣẹ nipasẹ aiyipada.

Ti o ba ṣiṣẹ eto eto tabi aṣẹ init inu apo eiyan kan, Podman yoo tunto awọn aaye oke tmpfs ninu awọn ilana atẹle:

/run, /run/titiipa, /tmp, /sys/fs/cgroup/systemd, /var/lib/journal

Paapaa ifihan agbara iduro aiyipada yoo jẹ SIGRTMIN+3.

Gbogbo eyi ngbanilaaye systemd lati ṣiṣẹ ninu apoti pipade laisi awọn iyipada eyikeyi.

AKIYESI: awọn igbiyanju eto lati kọ si eto faili akojọpọ. Sibẹsibẹ, SELinux ṣe idiwọ awọn apoti lati ṣe eyi nipasẹ aiyipada. Lati mu kikọ ṣiṣẹ, jẹ ki eiyan_manage_cgroup paramita boolean ṣiṣẹ:

setsebool -P container_manage_cgroup otitọ

Bayi wo kini Dockerfile ṣe dabi fun ṣiṣe eto ninu apoti kan nipa lilo Podman:

# cat Dockerfile

FROM fedora

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

EXPOSE 80

CMD [ "/sbin/init" ]

Gbogbo ẹ niyẹn.

Bayi a ṣajọpọ apoti naa:

# podman build -t systemd .

A sọ fun SELinux lati gba systemd laaye lati yipada iṣeto Awọn ẹgbẹ:

# setsebool -P container_manage_cgroup true

Nipa ọna, ọpọlọpọ eniyan gbagbe nipa igbesẹ yii. O da, eyi nikan nilo lati ṣee ṣe ni ẹẹkan ati pe o ti fipamọ eto naa lẹhin atunbere eto naa.

Bayi a kan bẹrẹ apoti naa:

# 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.

Iyẹn ni, iṣẹ naa ti wa ni oke ati nṣiṣẹ:

$ curl localhost

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

…

</html>

AKIYESI: Maṣe gbiyanju eyi lori Docker! Nibẹ ni o tun nilo lati jo pẹlu tambourine lati ṣe ifilọlẹ iru awọn apoti wọnyi nipasẹ daemon. (Awọn aaye afikun ati awọn idii yoo nilo lati jẹ ki gbogbo eyi ṣiṣẹ lainidi ni Docker, tabi yoo nilo lati ṣiṣẹ ni apo eiyan ti o ni anfani. Fun awọn alaye, wo article.)

A tọkọtaya diẹ itura ohun nipa Podman ati systemd

Podman ṣiṣẹ dara julọ ju Docker ni awọn faili ẹyọ ti eto

Ti awọn apoti ba nilo lati bẹrẹ nigbati awọn bata eto, lẹhinna o le jiroro ni fi awọn aṣẹ Podman ti o yẹ sinu faili ẹyọkan ti eto, eyiti yoo bẹrẹ iṣẹ naa ki o ṣe atẹle rẹ. Podman nlo awoṣe orita-exec boṣewa. Ni awọn ọrọ miiran, awọn ilana eiyan jẹ awọn ọmọde ti ilana Podman, nitorinaa systemd le ṣe atẹle wọn ni rọọrun.

Docker nlo awoṣe olupin-olupin, ati awọn aṣẹ Docker CLI tun le gbe taara sinu faili ẹyọ kan. Bibẹẹkọ, ni kete ti alabara Docker ba sopọ si Docker daemon, o (alabara) di ilana mimu mimu stdin ati stdout miiran kan. Ni ọna, systemd ko ni imọran nipa asopọ laarin alabara Docker ati eiyan ti o nṣiṣẹ labẹ iṣakoso ti Docker daemon, ati nitorinaa, laarin awoṣe yii, eto ipilẹ ko le ṣe atẹle iṣẹ naa.

Ṣiṣẹ systemd nipasẹ iho

Podman kapa ibere ise nipasẹ iho ti tọ. Nitori Podman nlo awoṣe orita-exec, o le dari iho naa si awọn ilana eiyan ọmọ rẹ. Docker ko le ṣe eyi nitori pe o nlo awoṣe olupin-olupin.

Iṣẹ varlink ti Podman nlo lati ṣe ibasọrọ pẹlu awọn onibara latọna jijin si awọn apoti ti wa ni mu ṣiṣẹ gangan nipasẹ iho kan. Apoti-podman, ti a kọ sinu Node.js ati apakan ti iṣẹ akanṣe, gba eniyan laaye lati ṣe ajọṣepọ pẹlu awọn apoti Podman nipasẹ wiwo wẹẹbu kan. Daemon wẹẹbu nṣiṣẹ cockpit-podman nfi awọn ifiranṣẹ ranṣẹ si iho varlink kan ti ẹrọ ti n tẹtisi. Systemd lẹhinna mu eto Podman ṣiṣẹ lati gba awọn ifiranṣẹ wọle ati bẹrẹ iṣakoso awọn apoti. Ṣiṣẹ ẹrọ ṣiṣẹ lori iho yọkuro iwulo fun daemon ti nṣiṣẹ nigbagbogbo nigbati o ba n ṣe awọn API latọna jijin.

Ni afikun, a n ṣe idagbasoke alabara Podman miiran ti a pe ni podman-remote, eyiti o ṣe imuse Podman CLI kanna ṣugbọn pe varlink lati ṣiṣẹ awọn apoti. Latọna jijin Podman le ṣiṣẹ lori awọn akoko SSH, gbigba ọ laaye lati ṣe ibaraenisepo pẹlu awọn apoti lori awọn ẹrọ oriṣiriṣi. Ni akoko pupọ, a gbero lati jẹ ki podman-latọna jijin lati ṣe atilẹyin MacOS ati Windows lẹgbẹẹ Linux, ki awọn olupilẹṣẹ lori awọn iru ẹrọ yẹn le ṣiṣẹ ẹrọ foju Linux kan pẹlu Podman varlink nṣiṣẹ ati ni iriri kikun pe awọn apoti nṣiṣẹ lori ẹrọ agbegbe.

SD_NOTIFY

Systemd gba ọ laaye lati da idaduro ifilọlẹ awọn iṣẹ iranlọwọ titi di igba ti iṣẹ apoti ti wọn nilo yoo bẹrẹ. Podman le dari iho SD_NOTIFY si iṣẹ ti a fi sinu apoti ki iṣẹ naa le sọ sisitemu pe o ti ṣetan lati ṣiṣẹ. Ati lẹẹkansi, Docker, eyiti o nlo awoṣe olupin-olupin, ko le ṣe eyi.

Ninu awọn eto

A gbero lati ṣafikun aṣẹ podman ṣe ipilẹṣẹ CONTAINERID ti eto, eyiti yoo ṣe agbekalẹ faili ẹyọkan ti eto lati ṣakoso apoti kan pato pato. Eyi yẹ ki o ṣiṣẹ ni awọn gbongbo mejeeji ati awọn ipo root fun awọn apoti ti ko ni anfani. A ti rii paapaa ibeere kan fun akoko asiko ṣiṣe eto-nspawn ibaramu OCI kan.

ipari

Nṣiṣẹ systemd ni a eiyan jẹ ẹya understandable nilo. Ati ọpẹ si Podman, a nipari ni a eiyan asiko isise ti ko ni rogbodiyan pẹlu systemd, ṣugbọn mu ki o rọrun lati lo.

orisun: www.habr.com

Fi ọrọìwòye kun