A 'ruith systemd ann an container

Tha sinn air a bhith a’ leantainn cuspair cleachdadh systemd ann an soithichean airson ùine mhòr. Air ais ann an 2014, sgrìobh an innleadair tèarainteachd againn Daniel Walsh artaigil A’ ruith systemd taobh a-staigh inneal-gleidhidh Docker, agus bliadhna no dhà an dèidh sin - fear eile, ris an canar A 'ruith systemd ann an soitheach neo-phrìobhaideach, anns an do thuirt e nach robh an suidheachadh air a thighinn air adhart mòran. Gu sònraichte, sgrìobh e “gu mì-fhortanach, eadhon dà bhliadhna às deidh sin, ma nì thu google“ Docker system ”, is e a’ chiad rud a thig am bàrr an aon seann artaigil aige. Mar sin tha an t-àm ann rudeigin atharrachadh." A bharrachd air an sin, tha sinn air bruidhinn mu dheidhinn mu thràth còmhstri eadar Docker agus luchd-leasachaidh systemd.

A 'ruith systemd ann an container

San artaigil seo seallaidh sinn dè a tha air atharrachadh thar ùine agus mar as urrainn dha Podman ar cuideachadh sa chùis seo.

Tha iomadh adhbhar ann airson ruith siostam taobh a-staigh soitheach, leithid:

  1. Soithichean ioma-sheirbheis - tha mòran dhaoine airson na tagraidhean ioma-sheirbheis aca a tharraing a-mach à innealan brìgheil agus an ruith ann an soithichean. Bhiodh e na b’ fheàrr, gu dearbh, na tagraidhean sin a bhriseadh a-steach do mhicro-sheirbheisean, ach chan eil fios aig a h-uile duine ciamar a nì iad seo fhathast no dìreach chan eil an ùine aca. Mar sin, tha e ciallach a bhith a’ ruith thagraidhean leithid seirbheisean a chuir systemd air bhog bho fhaidhlichean aonad.
  2. Faidhlichean Aonad Systemd - Tha a’ mhòr-chuid de thagraidhean a tha a’ ruith taobh a-staigh shoithichean air an togail bho chòd a bha a’ ruith air innealan brìgheil no corporra roimhe seo. Tha faidhle aonad aig na tagraidhean sin a chaidh a sgrìobhadh airson na tagraidhean sin agus a thuigeas mar a bu chòir an cur air bhog. Mar sin tha e fhathast nas fheàrr seirbheisean a thòiseachadh a’ cleachdadh dhòighean le taic, seach a bhith a’ cumail sùil air an t-seirbheis init agad fhèin.
  3. Tha Systemd na mhanaidsear pròiseas. Bidh e a’ coileanadh riaghladh seirbheis (dùnadh sìos, ag ath-thòiseachadh seirbheisean, no a’ marbhadh pròiseasan zombie) nas fheàrr na inneal sam bith eile.

Thuirt sin, tha iomadh adhbhar ann gun a bhith a’ ruith systemd ann an soithichean. Is e am prìomh fhear gu bheil systemd / iris a’ cumail smachd air toradh shoithichean, agus innealan mar Kubernetes no openshift bi an dùil gun sgrìobh soithichean log gu dìreach gu stdout agus stderr. Mar sin, ma tha thu gu bhith a’ riaghladh shoithichean tro innealan orchestration mar an fheadhainn a chaidh ainmeachadh gu h-àrd, bu chòir dhut beachdachadh gu mòr air soithichean stèidhichte air siostam a chleachdadh. A bharrachd air an sin, tha luchd-leasachaidh Docker agus Moby gu tric air a bhith gu mòr an aghaidh a bhith a’ cleachdadh systemd ann an soithichean.

Teachd Podman

Tha sinn toilichte aithris gu bheil an suidheachadh air gluasad air adhart mu dheireadh. Cho-dhùin an sgioba le uallach airson ruith shoithichean aig Red Hat leasachadh an einnsean container agad fhèin. Fhuair e ainm podman agus a’ tabhann an aon eadar-aghaidh loidhne-àithne (CLI) ri Docker. Agus faodar cha mhòr a h-uile òrdugh Docker a chleachdadh ann am Podman san aon dòigh. Bidh sinn gu tric a’ cumail cho-labhairtean, ris an canar a-nis Ag atharrachadh Docker gu Podman, agus tha a’ chiad shleamhnag ag iarraidh sgrìobhadh: alias docker = podman.

Bidh mòran dhaoine a’ dèanamh seo.

Chan eil mo Podman agus mise ann an dòigh sam bith an aghaidh soithichean stèidhichte air siostam. Às deidh na h-uile, is e Systemd am fo-shiostam Linux init as cumanta a thathas a’ cleachdadh, agus le bhith a’ leigeil leis obrachadh gu ceart ann an soithichean tha sin a’ ciallachadh a bhith a’ seachnadh mar a tha mìltean de dhaoine cleachdte ri bhith a’ ruith shoithichean.

Tha fios aig Podman dè a nì e gus toirt air siostam obrachadh gu ceart ann an soitheach. Feumaidh e rudan mar a bhith a’ cur suas tmpfs air / run agus /tmp. Is toil leatha an àrainneachd “glèidhte” a bhith air a chomasachadh agus tha i an dùil ceadan sgrìobhaidh chun phàirt aice den eòlaire cgroup agus chun phasgan / var/log/journald.

Nuair a thòisicheas tu air soitheach anns a bheil a’ chiad àithne init no systemd, bidh Podman gu fèin-obrachail a’ rèiteachadh tmpfs agus Cgroups gus dèanamh cinnteach gun tòisich systemd gun duilgheadasan. Gus am modh cur air bhog fèin-ghluasadach seo a bhacadh, cleachd an roghainn --systemd = meallta. Thoir an aire nach bi Podman a’ cleachdadh modh systemd ach nuair a chì e gu feum e àithne systemd no init a ruith.

Seo earrann bhon leabhar-làimhe:

fear podman ruith
...

-systemd = fìor | meallta

A 'ruith soitheach ann am modh systemd. Air a chomasachadh gu bunaiteach.

Ma ruitheas tu òrdugh systemd no init taobh a-staigh soitheach, rèitichidh Podman puingean sreap tmpfs anns na clàran a leanas:

/ ruith, / ruith / glasadh, / tmp, / sys/fs/cgroup/systemd, /var/lib/journal

Cuideachd bidh an comharra stad bunaiteach SIGRTMIN + 3.

Tha seo uile a’ leigeil le systemd ruith ann an soitheach dùinte gun atharrachaidhean sam bith.

NOTA: tha systemd a’ feuchainn ri sgrìobhadh gu siostam faidhle cgroup. Ach, tha SELinux a’ cur casg air soithichean bho bhith a’ dèanamh seo gu bunaiteach. Gus sgrìobhadh a chomasachadh, cuir an comas am paramadair boolean container_manage_cgroup:

setsebool -P container_manage_cgroup fìor

A-nis thoir sùil air cò ris a tha an Dockerfile coltach airson a bhith a’ ruith systemd ann an soitheach a’ cleachdadh Podman:

# cat Dockerfile

FROM fedora

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

EXPOSE 80

CMD [ "/sbin/init" ]

Sin e.

A-nis bidh sinn a 'cruinneachadh an t-soithich:

# podman build -t systemd .

Bidh sinn ag innse do SELinux leigeil le systemd rèiteachadh Cgroups atharrachadh:

# setsebool -P container_manage_cgroup true

Air an t-slighe, tha mòran dhaoine a 'dìochuimhneachadh a' cheum seo. Gu fortanach, chan fheum seo a dhèanamh ach aon turas agus thèid an suidheachadh a shàbhaladh às deidh dhut an siostam ath-thòiseachadh.

A-nis tha sinn dìreach a 'tòiseachadh air a' bhogsa:

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

Sin e, tha an t-seirbheis ag obair:

$ curl localhost

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

…

</html>

NOTA: Na feuch seo air Docker! An sin feumaidh tu fhathast dannsadh le tambourine gus na soithichean sin a chuir air bhog tron ​​​​deamhain. (Bidh feum air raointean agus pacaidean a bharrachd gus toirt air seo obrachadh gun fhiosta ann an Docker, no feumaidh e a bhith air a ruith ann an soitheach sochair. Airson mion-fhiosrachadh, faic artaigil.)

Rud no dhà eile mu dheidhinn Podman agus systemd

Bidh Podman ag obair nas fheàrr na Docker ann am faidhlichean aonad systemd

Ma tha feum air soithichean a thòiseachadh nuair a thòisicheas an siostam, faodaidh tu dìreach na h-òrdughan Podman iomchaidh a chuir a-steach don fhaidhle aonad systemd, a thòisicheas an t-seirbheis agus a choimheadas e. Bidh Podman a’ cleachdadh a’ mhodail àbhaisteach fork-exec. Ann am faclan eile, is e clann pròiseas Podman a th ’ann am pròiseasan container, agus mar sin is urrainn dha systemd sùil a chumail orra gu furasta.

Bidh Docker a’ cleachdadh modal frithealaiche teachdaiche, agus faodar òrdughan Docker CLI a chuir gu dìreach ann am faidhle aonad. Ach, aon uair ‘s gu bheil an neach-dèiligidh Docker a’ ceangal ris an daemon Docker, bidh e (an neach-dèiligidh) gu bhith na phròiseas eile a ’làimhseachadh stdin agus stdout. An uair sin, chan eil beachd sam bith aig systemd mun cheangal eadar teachdaiche Docker agus an soitheach a tha a’ ruith fo smachd an daemon Docker, agus mar sin, taobh a-staigh a’ mhodail seo, chan urrainn dha systemd gu bunaiteach sùil a chumail air an t-seirbheis.

Cur an gnìomh systemd tro socaid

Bidh Podman a’ làimhseachadh gnìomhachd tro socaid gu ceart. Leis gu bheil Podman a’ cleachdadh a’ mhodail fork-exec, faodaidh e an t-socaid a chuir air adhart gu na pròiseasan container cloinne aige. Chan urrainn do Docker seo a dhèanamh a chionn 's gu bheil e a' cleachdadh modail frithealaiche-cliant.

Tha an t-seirbheis varlink a bhios Podman a’ cleachdadh gus conaltradh le teachdaichean iomallach gu soithichean air a chuir an gnìomh tro socaid. Tha am pasgan cockpit-podman, sgrìobhte ann an Node.js agus mar phàirt den phròiseact cockpit, a’ leigeil le daoine eadar-obrachadh le soithichean Podman tro eadar-aghaidh lìn. Bidh an deamhan lìn a tha a’ ruith cockpit-podman a’ cur teachdaireachdan gu socaid varlink air am bi systemd ag èisteachd. Bidh Systemd an uairsin a’ cur an gnìomh am prògram Podman gus teachdaireachdan fhaighinn agus tòiseachadh a’ riaghladh shoithichean. Le bhith a’ cur an gnìomh systemd thairis air socaid cuir às don fheum air deamhan a bhios a’ ruith gu cunbhalach nuair a thathar a’ buileachadh APIan iomallach.

A bharrachd air an sin, tha sinn a’ leasachadh teachdaiche Podman eile ris an canar podman-remote, a bhios a’ buileachadh an aon Podman CLI ach a dh’ iarras air varlink soithichean a ruith. Faodaidh Podman-remote ruith a bharrachd air seiseanan SSH, a’ toirt cothrom dhut eadar-obrachadh gu tèarainte le soithichean air diofar innealan. Thar ùine, tha sinn an dùil leigeil le podman-iomallach taic a thoirt do MacOS agus Windows còmhla ri Linux, gus an urrainn do luchd-leasachaidh air na h-àrd-chabhsairean sin inneal brìgheil Linux a ruith le Podman varlink a’ ruith agus an làn eòlas fhaighinn gu bheil soithichean a ’ruith air an inneal ionadail.

SD_NOTIFY

Leigidh Systemd leat cur air bhog seirbheisean taice a chuir dheth gus an tòisich an t-seirbheis shoithichean a tha a dhìth orra. Faodaidh Podman an socaid SD_NOTIFY a chuir air adhart chun t-seirbheis shoithichean gus an cuir an t-seirbheis fios gu systemd gu bheil i deiseil airson obrachadh. Agus a-rithist, chan urrainn dha Docker, a bhios a’ cleachdadh modal frithealaiche teachdaiche, seo a dhèanamh.

Anns na planaichean

Tha sinn an dùil am podman àithne a ghineadh CONTAINERID systemd, a ghineas faidhle aonad systemd gus inneal sònraichte a chaidh a shònrachadh a riaghladh. Bu chòir seo obrachadh an dà chuid ann am modhan bunaiteach agus gun fhreumh airson soithichean gun bhuannachd. Tha sinn eadhon air iarrtas fhaicinn airson ùine ruith systemd-nspawn a tha co-chosmhail ri OCI.

co-dhùnadh

Tha e furasta a thuigsinn a bhith a’ ruith systemd ann an soitheach. Agus taing dha Podman, tha ùine ruith container againn mu dheireadh nach eil a’ strì ri systemd, ach a tha ga dhèanamh furasta a chleachdadh.

Source: www.habr.com

Cuir beachd ann