Rith systemd i gcoimeádán

Táimid ag leanúint leis an ábhar a bhaineann le húsáid systemd i gcoimeádáin le fada an lá. Ar ais i 2014, scríobh ár n-innealtóir slándála Daniel Walsh alt Rith systemd laistigh de Coimeádán Duga, agus cúpla bliain ina dhiaidh sin - ceann eile, ar a dtugtar Rith systemd i gcoimeádán neamhphribhléid, inar luaigh sé nach raibh mórán feabhas tagtha ar an scéal. Go háirithe, scríobh sé “ar an drochuair, fiú dhá bhliain ina dhiaidh sin, má dhéanann tú Google ar “Córas Docker”, is é an chéad rud a thagann suas ná a shean-alt céanna. Mar sin tá sé in am rud éigin a athrú.” Ina theannta sin, ní mór dúinn labhairt cheana féin faoi coinbhleacht idir Docker agus forbróirí systemd.

Rith systemd i gcoimeádán

San Airteagal seo taispeánfaimid cad a d'athraigh le himeacht ama agus conas is féidir le Podman cabhrú linn san ábhar seo.

Tá go leor cúiseanna ann le córas a rith taobh istigh de choimeádán, mar shampla:

  1. Coimeádáin ilseirbhíse – tá go leor daoine ag iarraidh a bhfeidhmchláir ilseirbhíse a tharraingt amach as meaisíní fíorúla agus iad a rith i gcoimeádáin. Bheadh ​​​​sé níos fearr, ar ndóigh, iarratais den sórt sin a bhriseadh ina micrisheirbhísí, ach níl a fhios ag gach duine conas é seo a dhéanamh go fóill nó go simplí níl an t-am acu. Dá bhrí sin, tá ciall foirfe le feidhmchláir den sórt sin a rith mar sheirbhísí arna seoladh ag systemd ó chomhaid aonaid.
  2. Comhaid Aonaid Systemd – Tá an chuid is mó d’fheidhmchláir a ritheann taobh istigh de choimeádáin tógtha ó chód a bhíodh ar siúl ar mheaisíní fíorúla nó fisiceacha. Tá comhad aonaid ag na feidhmchláir seo a scríobhadh do na feidhmchláir seo agus tuigeann sé conas ba cheart iad a sheoladh. Mar sin tá sé níos fearr fós seirbhísí a thosú ag baint úsáide as modhanna tacaithe, seachas do sheirbhís init féin a hackáil.
  3. Is bainisteoir próisis é Systemd. Bainistíonn sé seirbhísí (dúnann sé síos, atosaíonn sé seirbhísí, nó maraíonn sé próisis zombie) níos fearr ná aon uirlis eile.

É sin ráite, tá go leor cúiseanna ann gan córas a reáchtáil i gcoimeádáin. Is é an ceann is mó a rialaíonn systemd/journald an t-aschur na gcoimeádán, agus uirlisí cosúil Kubernetesopenshift bí ag súil go scríobhfaidh coimeádáin loga díreach chuig stdout agus stderr. Dá bhrí sin, má tá tú chun coimeádáin a bhainistiú trí uirlisí ceolfhoirne cosúil leis na cinn a luaitear thuas, ba cheart duit smaoineamh dáiríre ar choimeádáin atá bunaithe ar chórais a úsáid. Ina theannta sin, is minic a bhí forbróirí Docker agus Moby go láidir i gcoinne úsáid a bhaint as systemd i gcoimeádáin.

Teacht Podman

Tá áthas orainn a thuairisciú go bhfuil an scéal imithe ar aghaidh faoi dheireadh. Chinn an fhoireann atá freagrach as coimeádáin a rith ag Red Hat forbairt a dhéanamh d'inneall coimeádán féin. Fuair ​​sé ainm podman agus cuireann sé an comhéadan líne ordaithe céanna (CLI) le Docker. Agus is féidir beagnach gach ordú Docker a úsáid i Podman ar an mbealach céanna. Is minic a dhéanaimid seimineáir, ar a dtugtar anois Athrú Docker go Podman, agus iarrtar scríobh ar an gcéad sleamhnán: alias docker = podman.

Déanann go leor daoine é seo.

Níl mo Podman agus mé féin in aghaidh coimeádáin atá bunaithe ar chórais. Tar éis an tsaoil, is é Systemd an fochóras init Linux is coitianta a úsáidtear, agus gan ligean dó oibriú i gceart i gcoimeádáin ciallaíonn sé neamhaird a dhéanamh ar an gcaoi a bhfuil na mílte duine i dtaithí ar choimeádáin a reáchtáil.

Tá a fhios ag Podman cad atá le déanamh chun oibriú córasach i gceart i gcoimeádán. Tá rudaí mar tmpfs gléasta ar / rith agus /tmp de dhíth air. Is maith léi an timpeallacht “choimeádta” a bheith cumasaithe aici agus tá sí ag súil le ceadanna a scríobh chuig a cuid den eolaire cgroup agus chuig an bhfillteán /var/log/journald.

Nuair a thosaíonn tú coimeádán ina bhfuil an chéad ordú init nó systemd, déanann Podman tmpfs agus Cgroups a chumrú go huathoibríoch chun a chinntiú go dtosaíonn systemd gan fadhbanna. Chun an modh seolta uathoibríoch seo a bhlocáil, úsáid an rogha --systemd= bréagach. Tabhair faoi deara le do thoil nach n-úsáideann Podman mód systemd ach amháin nuair a fheiceann sé go gcaithfidh sé ordú systemd nó init a rith.

Seo sliocht as an lámhleabhar:

fear rith podman
...

–systemd=fíor|bréagach

Coimeádán a rith i mód córasach. Cumasaithe de réir réamhshocraithe.

Má ritheann tú ordú systemd nó init taobh istigh de choimeádán, cumróidh Podman pointí gléasta tmpfs sna heolairí seo a leanas:

/ rith, / rith / glasáil, /tmp, / sys/fs/cgroup/systemd, /var/lib/journal

Chomh maith leis sin is é SIGRTMIN+3 an comhartha stad réamhshocraithe.

Ligeann sé seo go léir systemd a reáchtáil i gcoimeádán dúnta gan aon mhodhnuithe.

TABHAIR FAOI DEARA: déanann systemd iarracht scríobh chuig an gcóras comhad cgroup. Mar sin féin, cuireann SELinux cosc ​​ar choimeádáin é seo a dhéanamh de réir réamhshocraithe. Chun an scríobh a chumasú, cumasaigh an paraiméadar boolean container_manage_cgroup:

setsebool -P container_manage_cgroup fíor

Anois féach ar an gcuma atá ar an Dockerfile chun córas a rith i gcoimeádán ag baint úsáide as Podman:

# cat Dockerfile

FROM fedora

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

EXPOSE 80

CMD [ "/sbin/init" ]

Sin é an méid.

Anois cuirimid an coimeádán le chéile:

# podman build -t systemd .

Deirimid le SELinux ligean do systemd cumraíocht Cgroups a mhodhnú:

# setsebool -P container_manage_cgroup true

Dála an scéil, déanann go leor daoine dearmad ar an gcéim seo. Ar ámharaí an tsaoil, ní gá é seo a dhéanamh ach uair amháin agus sábhálfar an socrú tar éis an córas a atosú.

Anois táimid ag tosú ar an gcoimeádán:

# 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 é, tá an tseirbhís ar bun agus ag feidhmiú:

$ curl localhost

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

…

</html>

TABHAIR FAOI DEARA: Ná bain triail as seo ar Docker! Ní mór duit fós a bheith ag damhsa le tambóirín chun na cineálacha coimeádáin seo a sheoladh tríd an deamhan. (Beidh gá le réimsí agus pacáistí breise le go n-oibreoidh sé seo go léir gan uaim in Docker, nó beidh sé riachtanach é a rith i gcoimeádán faoi phribhléid. Le haghaidh sonraí, féach Airteagal.)

Cúpla rud níos deise faoi Podman agus systemd

Oibríonn Podman níos fearr ná Docker i gcomhaid aonaid systemd

Más gá coimeádáin a thosú nuair a thosaíonn an córas, is féidir leat na horduithe Podman cuí a chur isteach sa chomhad aonaid systemd, a thosóidh an tseirbhís agus a dhéanfaidh monatóireacht air. Úsáideann Podman an múnla caighdeánach forc-exec. I bhfocail eile, is leanaí de phróiseas Podman iad próisis coimeádán, agus mar sin is féidir le systemd monatóireacht a dhéanamh orthu go héasca.

Úsáideann Docker múnla cliant-freastalaí, agus is féidir orduithe CLI Docker a chur go díreach i gcomhad aonaid freisin. Mar sin féin, a luaithe a nascann cliant an Docker leis an deamhan Docker, ní bheidh ann (an cliant) ach próiseas eile ag láimhseáil stdin agus stdout. Ina dhiaidh sin, níl aon smaoineamh ag systemd faoin nasc idir an cliant Docker agus an coimeádán a ritheann faoi rialú an deamhan Docker, agus mar sin, laistigh den tsamhail seo, ní féidir le systemd monatóireacht a dhéanamh ar an tseirbhís go bunúsach.

Córas a ghníomhachtú trí shoicéad

Láimhseálann Podman gníomhachtú tríd an soicéad i gceart. Toisc go n-úsáideann Podman an tsamhail forc-exec, is féidir leis an soicéad a chur ar aghaidh chuig a phróisis coimeádán leanaí. Ní féidir le Docker é seo a dhéanamh toisc go n-úsáideann sé samhail cliant-freastalaí.

Cuirtear an tseirbhís varlink a úsáideann Podman chun cumarsáid a dhéanamh le cianchliant chuig coimeádáin i ngníomh trí shoicéad. Ceadaíonn an pacáiste cockpit-podman, atá scríofa i Node.js agus mar chuid den tionscadal cockpit, do dhaoine idirghníomhú le coimeádáin Podman trí chomhéadan gréasáin. Seolann an deamhan gréasáin a ritheann cockpit-podman teachtaireachtaí chuig soicéad varlink a éisteann systemd air. Ansin gníomhaíonn Systemd an clár Podman chun teachtaireachtaí a fháil agus chun tosú ar choimeádáin a bhainistiú. Má ghníomhachtaítear systemd thar soicéad, ní gá deamhan a shíneann i gcónaí agus cian-API á gcur i bhfeidhm.

Ina theannta sin, tá cliant Podman eile á fhorbairt againn ar a dtugtar podman-remote, a chuireann an Podman CLI céanna i bhfeidhm ach a ghlaonn varlink chun coimeádáin a rith. Is féidir le podman-iargúlta reáchtáil ar bharr seisiúin SSH, rud a ligeann duit idirghníomhú go daingean le coimeádáin ar mheaisíní éagsúla. Le himeacht ama, tá sé beartaithe againn podman-iargúlta a chumasú chun tacú le MacOS agus Windows taobh le Linux, ionas gur féidir le forbróirí ar na hardáin sin meaisín fíorúil Linux a reáchtáil le Podman varlink ag rith agus an taithí iomlán a bheith acu go bhfuil coimeádáin ag rith ar an meaisín áitiúil.

SD_NOTIFY

Ligeann Systemd duit seoladh seirbhísí cúnta a chur siar go dtí go gcuirfear tús leis an tseirbhís coimeádaithe atá de dhíth orthu. Is féidir le Podman an soicéad SD_NOTIFY a chur ar aghaidh chuig an tseirbhís coimeádaithe ionas go gcuirfidh an tseirbhís in iúl do systemd go bhfuil sé réidh le feidhmiú. Agus arís, ní féidir le Docker, a úsáideann múnla cliant-freastalaí, é seo a dhéanamh.

Sna pleananna

Tá sé beartaithe againn an podman ordaithe a ghiniúint CONTAINERID systemd a chur leis, rud a ghinfidh comhad aonaid siste chun coimeádán sonrach sonraithe a bhainistiú. Ba cheart go n-oibreodh sé seo ar mhodhanna fréamhacha agus gan fhréamh araon do choimeádáin neamhphríobháideacha. Chonaiceamar fiú iarratas ar am rite systemd-nspawn atá comhoiriúnach le OCI.

Conclúid

Is riachtanas intuigthe é reáchtáil systemd i gcoimeádán. Agus a bhuíochas le Podman, tá am rite coimeádáin againn ar deireadh nach dtagann salach ar a chéile le systemd, ach a éascaíonn é a úsáid.

Foinse: will.com

Add a comment