Mandeha systemd ao anaty container

Efa ela izahay no nanaraka ny lohahevitra momba ny fampiasana systemd anaty container. Tamin'ny taona 2014, nanoratra lahatsoratra ny injenieranay momba ny fiarovana Daniel Walsh Mandeha systemd ao anaty Docker Container, ary roa taona taty aoriana - iray hafa, izay nantsoina Mandeha systemd ao anaty fitoeran-javatra tsy misy tombontsoa, izay nambarany fa tsy dia nihatsara loatra ny toe-draharaha. Nanoratra manokana izy fa "indrisy, na dia roa taona aty aoriana aza, raha google" Docker system ", ny zavatra voalohany mipoitra dia ny lahatsorany taloha ihany. Ka izao no fotoana hanovana zavatra. ” Ankoatra izay, efa niresaka momba izany isika fifandirana eo amin'ny Docker sy ny developer systemd.

Mandeha systemd ao anaty container

Ato amin'ity lahatsoratra ity dia hasehontsika izay niova rehefa nandeha ny fotoana sy ny fomba ahafahan'i Podman manampy antsika amin'ity raharaha ity.

Betsaka ny antony tokony hampandehanana systemd ao anaty container, toy ny:

  1. Kaontenera multiservice – maro ny olona te-hisintona ny rindranasa maro-serivisy avy amin'ny milina virtoaly ary hampandeha azy ireo ao anaty kaontenera. Tsara kokoa, mazava ho azy, ny manapaka ny fampiharana toy izany ho microservices, saingy tsy ny rehetra no mahafantatra ny fomba hanaovana izany na tsy manam-potoana fotsiny. Noho izany, ny fampandehanana ny rindranasa toy ny serivisy navoakan'ny systemd avy amin'ny rakitra unit dia tonga lafatra.
  2. Systemd Unit Files - Ny ankamaroan'ny rindranasa mandeha ao anaty kaontenera dia natsangana avy amin'ny kaody izay nandeha tamin'ny milina virtoaly na ara-batana teo aloha. Ireo fampiharana ireo dia manana fisie iray izay nosoratana ho an'ireo fampiharana ireo ary mahatakatra ny fomba tokony hanombohan'izy ireo. Noho izany dia mbola tsara kokoa ny manomboka serivisy amin'ny alΓ lan'ny fomba tohanana, toy izay mijirika ny serivisy init anao manokana.
  3. Systemd dia mpitantana ny dingana. Izy io dia mitantana serivisy (akatona, mamerina ny serivisy, na mamono ny fizotran'ny zombie) tsara kokoa noho ny fitaovana hafa rehetra.

Izany hoe, misy antony maro tsy tokony hampandehanana systemd ao anaty container. Ny tena zava-dehibe dia ny systemd/journald dia mifehy ny fivoahan'ny kaontenera, ary ny fitaovana toy izany Kubernetes na openshift manantena ny kaontenera hanoratra log mivantana amin'ny stdout sy stderr. Noho izany, raha hitantana kaontenera amin'ny alΓ lan'ny fitaovana orkestra tahaka ireo voalaza etsy ambony ireo ianao dia tokony handinika tsara ny fampiasana container mifototra amin'ny systemd. Fanampin'izany, ireo mpamorona Docker sy Moby dia matetika nanohitra mafy ny fampiasana systemd ao anaty container.

Ny fahatongavan'i Podman

Faly izahay mitatitra fa nandroso ihany ny raharaha. Nanapa-kevitra ny hamolavola ny ekipa tompon'andraikitra amin'ny fampandehanana kaontenera ao amin'ny Red Hat ny motera fitoeranao manokana. Nahazo anarana izy podman ary manolotra interface interface (CLI) mitovy amin'ny Docker. Ary saika ny baiko Docker rehetra dia azo ampiasaina amin'ny Podman amin'ny fomba mitovy. Matetika izahay no manao seminera, izay antsoina ankehitriny Manova ny Docker ho Podman, ary ny horonan-tsary voalohany indrindra dia miantso ny fanoratana: alias docker=podman.

Olona maro no manao izany.

Ny Podman-ko sy izaho dia tsy manohitra velively ny kaontenera mifototra amin'ny systemd. Rehefa dinihina tokoa, Systemd no Linux init subsystem fampiasa matetika indrindra, ary ny tsy famelana azy hiasa araka ny tokony ho izy ao anaty kaontenera dia midika fa tsy miraharaha ny fomba fanaon'ny olona an'arivony amin'ny fampandehanana kaontenera.

Fantatr'i Podman izay tokony hatao mba hampandeha tsara ny systemd ao anaty fitoeran-javatra iray. Mila zavatra toy ny fametrahana tmpfs amin'ny /run sy /tmp. Tiany ny mamela ny tontolo iainana "containerized" ary manantena ny fahazoan-dΓ lana hanoratra amin'ny ampahany amin'ny lahatahiry cgroup sy amin'ny lahatahiry /var/log/journald.

Rehefa manomboka kaontenera misy ny baiko voalohany dia init na systemd, Podman dia manamboatra tmpfs sy Cgroups ho azy mba hahazoana antoka fa tsy misy olana ny systemd. Mba hanakanana ity fomba fandefasana fiara ity dia ampiasao ny safidy --systemd=false. Mariho fa ny Podman dia mampiasa fomba systemd ihany rehefa hitany fa mila manao baiko systemd na init.

Ity misy sombiny avy amin'ny manual:

lehilahy podman mihazakazaka
...

–systemd=marina|diso

Mandeha container amin'ny fomba systemd. Enabled by default.

Raha mitantana baiko systemd na init ao anaty container ianao, Podman dia hanitsy ireo teboka mounts tmpfs ao amin'ireto lahatahiry manaraka ireto:

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

Ary ny famantarana fiatoana default dia SIGRTMIN+3.

Izany rehetra izany dia ahafahan'ny systemd mihazakazaka ao anaty container mihidy tsy misy fanovana.

FANAMARIHANA: manandrana manoratra amin'ny cgroup filesystem ny systemd. Na izany aza, SELinux dia manakana ny container tsy hanao izany amin'ny alΓ lan'ny default. Mba hahafahan'ny fanoratana dia avelao ny mari-pamantarana boolean container_manage_cgroup:

setsebool -P container_manage_cgroup marina

Jereo izao ny endriky ny Dockerfile amin'ny fampandehanana systemd ao anaty container mampiasa Podman:

# cat Dockerfile

FROM fedora

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

EXPOSE 80

CMD [ "/sbin/init" ]

Izay ihany.

Ankehitriny dia manangona ny container izahay:

# podman build -t systemd .

Nolazainay tamin'i SELinux ny hamela ny systemd hanova ny configuration Cgroups:

# setsebool -P container_manage_cgroup true

Teny an-dalana, maro ny olona manadino ity dingana ity. Soa ihany fa tsy maintsy atao indray mandeha ihany izany ary voatahiry ny toerana aorian'ny famerenana indray ny rafitra.

Izao vao manomboka ny container isika:

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

Izay ihany, mandeha sy mandeha ny serivisy:

$ curl localhost

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

…

</html>

FANAMARIHANA: Aza manandrana izany amin'ny Docker! Mbola mila mandihy amin'ny ampongatapaka ianao any mba handefasana ireo karazana kaontenera ireo amin'ny alΓ lan'ny daemon. (Ny saha sy ny fonosana fanampiny dia takiana mba hampandeha tsara an'izany rehetra izany ao amin'ny Docker, na tsy maintsy atao ao anaty fitoeran-javatra manokana izany. Raha mila fanazavana fanampiny dia jereo lahatsoratra.)

Zavatra mahafinaritra roa momba ny Podman sy systemd

Podman dia miasa tsara kokoa noho ny Docker amin'ny rakitra unit systemd

Raha mila atomboka ny kaontenera rehefa mandeha ny rafitra, dia azonao atao ny mampiditra fotsiny ny baiko Podman mifanaraka amin'ny rakitra systemd unit, izay hanomboka ny serivisy ary hanara-maso izany. Mampiasa ny modely fork-exec mahazatra i Podman. Raha lazaina amin'ny teny hafa, ny fizotran'ny container dia zanaky ny fizotran'ny Podman, noho izany dia afaka manara-maso azy ireo mora foana ny systemd.

Docker dia mampiasa modely mpanjifa-server, ary ny baiko Docker CLI dia azo apetraka mivantana ao anaty rakitra iray ihany koa. Na izany aza, raha vao mifandray amin'ny daemon Docker ny mpanjifa Docker, dia lasa dingana hafa amin'ny fitantanana stdin sy stdout fotsiny izy (ny mpanjifa). Ho setrin'izany, ny systemd dia tsy manana hevitra momba ny fifandraisana misy eo amin'ny mpanjifa Docker sy ny kaontenera izay eo ambany fifehezan'ny daemon Docker, ary noho izany, ao anatin'ity modely ity, ny systemd dia tsy afaka manara-maso ny serivisy.

Fampahavitrihana systemd amin'ny alalan'ny socket

Podman dia mitantana ny fampahavitrihana amin'ny alΓ lan'ny socket tsara. Satria mampiasa ny maodely fork-exec i Podman, dia afaka mampita ny socket amin'ny fizotry ny fitoeran-janany. Tsy afaka manao izany i Docker satria mampiasa modely mpanjifa-server.

Ny serivisy varlink ampiasain'i Podman hifandraisana amin'ny mpanjifa lavitra mankany amin'ny kaontenera dia tena mavitrika amin'ny alΓ lan'ny socket. Ny fonosana cockpit-podman, voasoratra ao amin'ny Node.js ary ampahany amin'ny tetikasa cockpit, dia ahafahan'ny olona mifandray amin'ny kaontenera Podman amin'ny alΓ lan'ny interface interface. Ny daemon web mihazakazaka cockpit-podman dia mandefa hafatra amin'ny socket varlink izay henoin'ny systemd. Ny Systemd avy eo dia manetsika ny programa Podman handray hafatra ary hanomboka hitantana ireo kaontenera. Ny fampandehanana systemd amin'ny socket dia manafoana ny filana daemon mandeha tsy tapaka rehefa mampihatra API lavitra.

Ho fanampin'izany, dia mamolavola mpanjifa Podman hafa antsoina hoe podman-remote izahay, izay manatanteraka ny Podman CLI ihany fa miantso ny varlink mba hampandehanana container. Ny Podman-remote dia afaka mihazakazaka eo an-tampon'ny fivoriana SSH, ahafahanao mifandray tsara amin'ny kaontenera amin'ny milina samihafa. Rehefa mandeha ny fotoana, dia mikasa ny hamela ny podman-remote hanohana ny MacOS sy Windows miaraka amin'ny Linux izahay, mba hahafahan'ireo mpamorona amin'ireo sehatra ireo mampandeha milina virtoaly Linux miaraka amin'ny Podman varlink mihazakazaka ary manana traikefa feno amin'ny fametrahana ny container amin'ny milina eo an-toerana.

SD_NOTIFY

Ny Systemd dia mamela anao hanemotra ny fandefasana serivisy fanampiny mandra-panombohan'ny serivisy fitakiana azy ireo. Podman dia afaka mamindra ny socket SD_NOTIFY mankany amin'ny serivisy misy container mba hampandrenesan'ny serivisy ny systemd fa vonona ny hiasa. Ary indray, Docker, izay mampiasa modely mpanjifa-server, dia tsy afaka manao izany.

Ao amin'ny drafitra

Mikasa ny hanampy ny baiko podman mamokatra systemd CONTAINERID izahay, izay hamokatra rakitra unit systemd hitantana container manokana voatondro. Izany dia tokony hiasa amin'ny fomba faka sy tsy misy fotony ho an'ny kaontenera tsy manana tombontsoa. Nahita fangatahan'ny OCI-compatible systemd-nspawn runtime izahay.

famaranana

Ny fampandehanana systemd ao anaty fitoeran-javatra dia filΓ na azo takarina. Ary misaotra an'i Podman, manana fotoana fandefasana container izay tsy mifanipaka amin'ny systemd izahay, fa manamora ny fampiasana azy.

Source: www.habr.com

Add a comment