Nagdagan nga systemd sa usa ka sudlanan

Gisundan namon ang hilisgutan sa paggamit sa systemd sa mga sudlanan sa dugay nga panahon. Balik sa 2014, ang among security engineer nga si Daniel Walsh nagsulat og artikulo Pagdagan nga systemd sulod sa usa ka Docker Container, ug paglabay sa pipila ka tuig - lain, nga gitawag Nagdagan nga systemd sa usa ka dili pribilihiyo nga sudlanan, diin siya miingon nga ang kahimtang wala kaayo mouswag. Sa partikular, gisulat niya nga "sa kasubo, bisan duha ka tuig ang milabay, kung imong google ang "Docker system", ang una nga butang nga moabut mao ang iyang parehas nga daan nga artikulo. Mao nga panahon na aron usbon ang usa ka butang. ” Dugang pa, nahisgotan na namo panagbangi tali sa Docker ug systemd developers.

Nagdagan nga systemd sa usa ka sudlanan

Sa niini nga artikulo atong ipakita kon unsa ang nausab sa paglabay sa panahon ug sa unsa nga paagi Podman makatabang kanato niini nga butang.

Adunay daghang mga hinungdan sa pagpadagan sa systemd sulod sa usa ka sudlanan, sama sa:

  1. Multiservice nga mga sudlanan – daghang mga tawo ang gusto nga kuhaon ang ilang mga multiservice nga aplikasyon gikan sa mga virtual machine ug ipadagan kini sa mga sudlanan. Mas maayo, siyempre, nga bungkagon ang ingon nga mga aplikasyon sa mga microservice, apan dili tanan nahibal-an kung giunsa kini buhaton o wala’y oras. Busa, ang pagpadagan sa ingon nga mga aplikasyon sama sa mga serbisyo nga gilunsad sa systemd gikan sa mga file sa unit naghimo sa hingpit nga kahulugan.
  2. Systemd Unit Files – Kadaghanan sa mga aplikasyon nga nagdagan sa sulod sa mga sudlanan gihimo gikan sa code nga kaniadto nagdagan sa virtual o pisikal nga mga makina. Kini nga mga aplikasyon adunay usa ka yunit nga file nga gisulat alang niini nga mga aplikasyon ug nakasabut kung giunsa kini ilunsad. Mao nga mas maayo pa nga magsugod sa mga serbisyo gamit ang gisuportahan nga mga pamaagi, kaysa sa pag-hack sa imong kaugalingon nga serbisyo sa init.
  3. Ang Systemd usa ka manager sa proseso. Nagdumala kini sa mga serbisyo (pagsira, pag-restart sa mga serbisyo, o pagpatay sa mga proseso sa zombie) nga mas maayo kaysa sa bisan unsang uban nga himan.

Ingon niana, adunay daghang mga hinungdan nga dili magpadagan sa systemd sa mga sudlanan. Ang nag-una mao nga ang systemd/journald nagkontrol sa output sa mga sudlanan, ug mga himan sama Kubernetes o openshift magpaabot nga ang mga sudlanan magsulat og log direkta sa stdout ug stderr. Busa, kung magdumala ka sa mga sudlanan pinaagi sa mga himan sa orkestra sama sa nahisgutan sa ibabaw, kinahanglan nimo nga seryoso nga ikonsiderar ang paggamit sa mga sulud nga nakabase sa systemd. Dugang pa, ang mga nag-develop sa Docker ug Moby kanunay nga kusganon nga supak sa paggamit sa systemd sa mga sudlanan.

Ang Pag-abot ni Podman

Nalipay kami nga ireport nga ang kahimtang sa katapusan nagpadayon. Ang team nga responsable sa pagpadagan sa mga sudlanan sa Red Hat nakahukom sa pagpalambo imong kaugalingong container nga makina. Naa siyay ngalan podman ug nagtanyag sa parehas nga command line interface (CLI) sama sa Docker. Ug hapit tanan nga mga mando sa Docker mahimong magamit sa Podman sa parehas nga paagi. Kanunay namong magpahigayon og mga seminar, nga karon gitawag na Pag-usab sa Docker ngadto sa Podman, ug ang pinakaunang slide nanawagan sa pagsulat: alias docker=podman.

Daghang mga tawo ang nagbuhat niini.

Ang akong Podman ug ako dili gyud batok sa mga sulud nga nakabase sa systemd. Human sa tanan, ang Systemd mao ang labing kasagarang gigamit nga Linux init subsystem, ug ang dili pagtugot niini sa pagtrabaho sa husto sa mga sudlanan nagpasabot sa dili pagtagad kung giunsa ang liboan ka mga tawo nga naanad sa pagpadagan sa mga sudlanan.

Nahibal-an ni Podman kung unsa ang buhaton aron mahimo ang systemd nga molihok sa husto sa usa ka sudlanan. Nagkinahanglan kini og mga butang sama sa pag-mount sa tmpfs sa /run ug /tmp. Ganahan siya nga ma-enable ang "containerized" nga palibot ug nagpaabot og mga permiso sa pagsulat sa iyang bahin sa cgroup directory ug sa /var/log/journald folder.

Kung magsugod ka sa usa ka sudlanan diin ang una nga sugo init o systemd, awtomatik nga gi-configure ni Podman ang tmpfs ug Cgroups aron masiguro nga ang systemd magsugod nga wala’y mga problema. Aron babagan kining auto launch mode, gamita ang --systemd=false nga kapilian. Palihug timan-i nga ang Podman naggamit lamang sa systemd mode kung makita niini nga kinahanglan kini magpadagan sa usa ka systemd o init nga sugo.

Ania ang usa ka kinutlo gikan sa manwal:

tawo podman run
...

–systemd=tinuod|sayup

Pagdagan sa usa ka sudlanan sa systemd mode. Gipaandar pinaagi sa default.

Kung nagpadagan ka usa ka systemd o init nga mando sa sulod sa usa ka sudlanan, i-configure ni Podman ang mga punto sa pag-mount sa tmpfs sa mosunod nga mga direktoryo:

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

Usab ang default stop signal mao ang SIGRTMIN+3.

Ang tanan niini nagtugot sa systemd nga modagan sa usa ka sirado nga sudlanan nga wala’y bisan unsang mga pagbag-o.

NOTE: systemd misulay sa pagsulat sa cgroup file system. Bisan pa, ang SELinux nagpugong sa mga sudlanan sa pagbuhat niini pinaagi sa default. Aron mahimo ang pagsulat, i-enable ang container_manage_cgroup boolean parameter:

setsebool -P container_manage_cgroup tinuod

Karon tan-awa kung unsa ang hitsura sa Dockerfile alang sa pagpadagan sa systemd sa usa ka sudlanan gamit ang Podman:

# cat Dockerfile

FROM fedora

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

EXPOSE 80

CMD [ "/sbin/init" ]

Mao ra.

Karon among gitigum ang sudlanan:

# podman build -t systemd .

Gisultihan namo ang SELinux nga tugotan ang systemd nga usbon ang configuration sa Cgroups:

# setsebool -P container_manage_cgroup true

Pinaagi sa dalan, daghang mga tawo ang nakalimot niini nga lakang. Maayo na lang, kini kinahanglan ra nga buhaton kausa ug ang setting maluwas pagkahuman sa pag-reboot sa sistema.

Karon magsugod na lang kami sa sudlanan:

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

Mao na, ang serbisyo nagdagan ug nagdagan:

$ curl localhost

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

…

</html>

PAHINUMDOM: Ayaw kini pagsulay sa Docker! Didto kinahanglan ka pa nga mosayaw gamit ang tamburin aron ilunsad kini nga mga matang sa mga sudlanan pinaagi sa daemon. (Dugang nga mga natad ug mga pakete gikinahanglan aron mahimo kining tanan nga hapsay sa Docker, o kini kinahanglan nga ipadagan sa usa ka pribilihiyo nga sudlanan. Alang sa mga detalye, tan-awa artikulo.)

Usa ka magtiayon nga mas cool nga mga butang bahin sa Podman ug systemd

Ang Podman mas maayo kay sa Docker sa systemd unit files

Kung ang mga sudlanan kinahanglan nga sugdan kung ang sistema nag-boot, nan mahimo nimong ipasok ang angay nga mga mando sa Podman sa file sa systemd unit, nga magsugod sa serbisyo ug bantayan kini. Gigamit ni Podman ang standard nga fork-exec nga modelo. Sa laing pagkasulti, ang mga proseso sa sudlanan mga anak sa proseso sa Podman, mao nga ang systemd dali nga makamonitor niini.

Gigamit ni Docker ang modelo sa kliyente-server, ug ang mga mando sa Docker CLI mahimo usab nga ibutang direkta sa usa ka file sa yunit. Bisan pa, sa higayon nga ang kliyente sa Docker magkonektar sa Docker daemon, kini (ang kliyente) mahimong lain nga proseso sa pagdumala sa stdin ug stdout. Sa baylo, ang systemd walay ideya bahin sa koneksyon tali sa kliyente sa Docker ug sa sudlanan nga nagdagan sa ilawom sa kontrol sa Docker daemon, ug busa, sa sulod niini nga modelo, ang systemd sa sukaranan dili makamonitor sa serbisyo.

Pag-aktibo sa systemd pinaagi sa socket

Ang Podman nagdumala sa pagpaaktibo pinaagi sa socket sa husto. Tungod kay gigamit ni Podman ang modelo nga fork-exec, mahimo nga ipasa ang socket sa mga proseso sa sulud sa bata niini. Dili kini mahimo sa Docker tungod kay naggamit kini usa ka modelo sa kliyente-server.

Ang serbisyo sa varlink nga gigamit ni Podman aron makigsulti sa mga hilit nga kliyente sa mga sulud sa tinuud nga gi-aktibo pinaagi sa usa ka socket. Ang pakete sa cockpit-podman, nga gisulat sa Node.js ug bahin sa proyekto sa cockpit, nagtugot sa mga tawo nga makig-uban sa mga sudlanan sa Podman pinaagi sa usa ka web interface. Ang web daemon nga nagdagan nga cockpit-podman nagpadala mga mensahe sa usa ka varlink socket nga gipamati sa systemd. Gi-aktibo dayon sa Systemd ang programa sa Podman aron makadawat mga mensahe ug magsugod sa pagdumala sa mga sudlanan. Ang pagpaaktibo sa systemd sa usa ka socket nagwagtang sa panginahanglan alang sa usa ka kanunay nga nagdagan nga daemon kung nagpatuman sa mga hilit nga API.

Dugang pa, naghimo kami og laing kliyente sa Podman nga gitawag og podman-remote, nga nagpatuman sa samang Podman CLI apan nagtawag sa varlink aron sa pagpadagan sa mga sudlanan. Ang Podman-remote mahimong modagan sa ibabaw sa mga sesyon sa SSH, nga nagtugot kanimo nga luwas nga makig-uban sa mga sudlanan sa lainlaing mga makina. Sa paglabay sa panahon, nagplano kami nga tugotan ang podman-remote nga suportahan ang MacOS ug Windows kauban ang Linux, aron ang mga developer sa mga platform makadagan sa Linux virtual machine nga adunay Podman varlink nga nagdagan ug adunay hingpit nga kasinatian nga ang mga sudlanan nagdagan sa lokal nga makina.

SD_NOTIFY

Gitugotan ka sa Systemd nga ilangan ang paglansad sa mga serbisyo sa auxiliary hangtod nga magsugod ang serbisyo sa sulud nga kinahanglan nila. Mahimong ipadala ni Podman ang SD_NOTIFY socket ngadto sa containerized nga serbisyo aron ang serbisyo magpahibalo sa systemd nga kini andam na sa pag-operate. Ug usab, ang Docker, nga naggamit sa usa ka modelo sa kliyente-server, dili makahimo niini.

Sa mga plano

Nagplano kami nga idugang ang command podman makamugna systemd CONTAINERID, nga makamugna og systemd unit file aron pagdumala sa usa ka piho nga sudlanan nga gitakda. Kini kinahanglan nga molihok sa parehas nga gamut ug wala’y gamut nga mga mode alang sa wala’y pribilehiyo nga mga sudlanan. Nakakita pa kami usa ka hangyo alang sa usa ka OCI-compatible systemd-nspawn runtime.

konklusyon

Ang pagpadagan sa systemd sa usa ka sudlanan usa ka masabtan nga panginahanglan. Ug salamat sa Podman, kami sa katapusan adunay usa ka sudlanan nga runtime nga wala magkasumpaki sa systemd, apan kini dali gamiton.

Source: www.habr.com

Idugang sa usa ka comment