Na-agba ọsọ sistemu na akpa

Anyị na-agbaso isiokwu nke iji systemd na containers ruo ogologo oge. Laa azụ na 2014, injinia nchekwa anyị Daniel Walsh dere edemede A na-agba ọsọ n'ime igbe Docker, na afọ ole na ole ka e mesịrị - ọzọ, nke a na-akpọ Sistemu na-agba ọsọ n'ime akpa enweghị ihe ùgwù, bụ́ nke o kwuru na ọnọdụ ahụ adịchaghị mma. Karịsịa, o dere na "n'ụzọ dị mwute, ọbụna afọ abụọ ka e mesịrị, ọ bụrụ na ị na-google" Docker usoro ", ihe mbụ na-apụta bụ otu ochie akụkọ ya. Ya mere ọ bụ oge ịgbanwe ihe. " Tụkwasị na nke ahụ, anyị ekwuworị banyere ya esemokwu dị n'etiti Docker na ndị mmepe sistemu.

Na-agba ọsọ sistemu na akpa

N'isiokwu a, anyị ga-egosi ihe gbanwere ka oge na-aga na otú Podman nwere ike isi nyere anyị aka n'okwu a.

Enwere ọtụtụ ihe kpatara ịgbanye sistemu n'ime akpa, dịka:

  1. Akpa ọtụtụ ọrụ – Ọtụtụ ndị mmadụ chọrọ ịdọpụ ha multi-ọrụ ngwa n'ime mebere igwe na-agbaba ha na arịa. Ọ ga-aka mma, n'ezie, imebi ngwa ndị dị otú ahụ na microservices, ma ọ bụghị onye ọ bụla maara otú e si eme nke a ma ma ọ bụ na-enweghị oge. Ya mere, ịme ụdị ngwa dị ka ọrụ nke sistemu sitere na faịlụ otu weputara na-eme ka uche zuru oke.
  2. Faịlụ Unit Sistemụ - A na-ewu ọtụtụ ngwa na-agba n'ime igbe site na koodu nke na-agbabu na igwe mebere ma ọ bụ nke anụ ahụ. Ngwa ndị a nwere faịlụ otu nke edere maka ngwa ndị a ma ghọta ka esi amalite ha. Yabụ na ọ ka mma ịmalite ọrụ site na iji ụzọ akwadoro, kama ịpụnara ọrụ init nke gị.
  3. Systemd bụ onye njikwa usoro. Ọ na-ejikwa ọrụ (na-emechi, malitegharịa ọrụ, ma ọ bụ na-egbu usoro zombie) karịa ngwá ọrụ ọ bụla ọzọ.

Nke ahụ kwuru, enwere ọtụtụ ihe kpatara ịghara ịgba ọsọ systemd na arịa. Nke kachasị bụ na systemd/journald na-achịkwa mmepụta nke arịa, yana ngwaọrụ ndị dị ka Kubernetes ma ọ bụ Meghee na-atụ anya ka arịa dee ndekọ ozugbo na stdout na stderr. Ya mere, ọ bụrụ na ị na-aga ijikwa arịa site na orchestration ngwá ọrụ dị ka ndị ahụ a kpọtụrụ aha n'elu, ị kwesịrị ị na-echebara nke ọma iji usoro dabeere containerd. Na mgbakwunye, ndị mmepe Docker na Moby na-emegidekarị iji sistemu n'ime akpa.

Ọbịbịa nke Podman

Obi dị anyị ụtọ ịkọ na ọnọdụ ahụ emesịa gaa n'ihu. Ndị otu na-ahụ maka ịgba ọsọ akpa na Red Hat kpebiri ịmalite injin akpa nke gị. O nwetara aha podman ma na-enye otu interface ahịrị iwu (CLI) dị ka Docker. Na ihe fọrọ nke nta ka ọ bụrụ iwu Docker niile enwere ike iji na Podman n'otu ụzọ ahụ. Anyị na-eduzikarị seminarị, nke a na-akpọ ugbu a Na-agbanwe Docker ka ọ bụrụ Podman, na nke mbụ slide na-akpọ maka ide: alias docker=podman.

Ọtụtụ ndị na-eme nke a.

Mụ na Podman m enweghị ụzọ ọ bụla megide arịa ndị dabere na sistemụ. A sị ka e kwuwe, Systemd bụ ihe ndị a na-ejikarị Linux init subsystem, na ịhapụ ya ka ọ rụọ ọrụ nke ọma n'ime akpa pụtara ileghara ka ọtụtụ puku mmadụ si agba arịa ngwa ngwa.

Podman maara ihe ọ ga-eme iji mee ka sistemu na-arụ ọrụ nke ọma n'ime akpa. Ọ chọrọ ihe dị ka ịgbanye tmpfs na /run na /tmp. Ọ na-amasị ya ka agbanyere gburugburu “containerized” ma na-atụ anya ide ikike n'akụkụ ya nke ndekọ aha otu yana na folda /var/log/journald.

Mgbe ịmalitere akpa nke iwu mbụ bụ init ma ọ bụ sistemu, Podman na-ahazi tmpfs na Cgroups na-akpaghị aka iji hụ na sistemụ na-amalite n'enweghị nsogbu. Iji gbochie ụdị mbido akpaaka a, jiri nhọrọ --systemd=false. Biko mara na Podman na-eji usoro sistemụ naanị mgbe ọ hụrụ na ọ ga-agba ọsọ sistemu ma ọ bụ iwu init.

Nke a bụ akụkụ nke akwụkwọ ntuziaka:

nwoke podman oso
...

–systemd=ezigbo|ụgha

Na-agba ọsọ akpa na ọnọdụ sistemu. Agbanyere na ndabara.

Ọ bụrụ na ị na-agba sistemu ma ọ bụ iwu init n'ime akpa, Podman ga-ahazi isi ihe ugwu tmpfs na akwụkwọ ndekọ aha ndị a:

/run, /run/mkpọchi, /tmp, /sys/fs/cgroup/systemd, /var/lib/journal

Ọzọkwa mgbama nkwụsị nke ndabara ga-abụ SIGRTMIN+3.

Ihe a niile na-enye ohere ka sistemu na-agba ọsọ n'ime akpa mechiri emechi na-enweghị mgbanwe ọ bụla.

IHE: sistemu na-anwa idegara sistemu faịlụ otu. Agbanyeghị, SELinux na-egbochi arịa ime nke a na ndabara. Iji mee ka ide ihe, mee ka container_manage_cgroup bolean paramita:

setsebool -P container_manage_cgroup eziokwu

Ugbu a lee ka Dockerfile dị ka ọ na-agba ọsọ n'ime akpa site na iji Podman:

# cat Dockerfile

FROM fedora

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

EXPOSE 80

CMD [ "/sbin/init" ]

Ọ gwụla.

Ugbu a, anyị na-achịkọta akpa ahụ:

# podman build -t systemd .

Anyị na-agwa SELinux ka o kwe ka systemd gbanwee nhazi otu ìgwè:

# setsebool -P container_manage_cgroup true

Site n'ụzọ, ọtụtụ ndị na-echefu nzọụkwụ a. Ọ dabara nke ọma, naanị nke a kwesịrị ime otu ugboro ma chekwaa ntọala ahụ mgbe ịmaliteghachi sistemụ ahụ.

Ugbu a, anyị na-amalite akpa ahụ:

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

Nke ahụ bụ ya, ọrụ a na-arụ ọrụ:

$ curl localhost

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

…

</html>

IHE: Anwala nke a na Docker! N'ebe ahụ, ị ​​ka kwesịrị iji ịgbà agba egwu iji malite ụdị arịa ndị a site na daemon. (A ga-achọrọ ubi na ngwugwu ndị ọzọ iji mee ka ihe a niile na-arụ ọrụ n'enweghị nsogbu na Docker, ma ọ bụ ọ ga-adị mkpa ka etinye ya n'ime akpa nwere ihe ùgwù. Maka nkọwa, lee ederede.)

Ihe di na nwunye mara mma gbasara Podman na sistemu

Podman na-arụ ọrụ nke ọma karịa Docker na faịlụ otu sistemụ

Ọ bụrụ na arịa kwesịrị ịmalite mgbe akpụkpọ ụkwụ sistemụ, ị nwere ike itinye iwu Podman kwesịrị ekwesị n'ime faịlụ sistemu sistemu, nke ga-amalite ọrụ wee nyochaa ya. Podman na-eji ụdị ndụdụ-exec ọkọlọtọ. N'ikwu ya n'ụzọ ọzọ, usoro akpa bụ ụmụaka nke usoro Podman, yabụ systemd nwere ike nyochaa ha ngwa ngwa.

Docker na-eji ụdị ihe nkesa ndị ahịa, yana iwu Docker CLI nwekwara ike idowe ya ozugbo na faịlụ otu. Agbanyeghị, ozugbo onye ahịa Docker jikọọ na Docker daemon, ọ (onye ahịa) na-aghọ naanị usoro ọzọ na-ejikwa stdin na stdout. N'aka nke ya, systemd enweghị echiche banyere njikọ dị n'etiti onye ahịa Docker na akpa nke na-arụ n'okpuru njikwa Docker daemon, ya mere, n'ime ihe nlereanya a, systemd enweghị ike nyochaa ọrụ ahụ.

Sistemu na-arụ ọrụ site na oghere

Podman na-ejikwa ịgbalite site na oghere nke ọma. N'ihi na Podman na-eji ụdị ndụdụ-exec, ọ nwere ike ibuga oghere na usoro akpa nwa ya. Docker enweghị ike ime nke a n'ihi na ọ na-eji ụdị ihe nkesa ahịa.

Ọrụ varlink nke Podman na-eji na-ekwurịta okwu na ndị ahịa dịpụrụ adịpụ na arịa na-arụ ọrụ n'ezie site na oghere. Ngwungwu kokpiiti-podman, nke edere na Node.js na akụkụ nke ọrụ ụgbọ mmiri, na-enye ndị mmadụ ohere ịmekọrịta ihe na Podman site na ntanetị weebụ. The web daemon na-agba ọsọ kokpiiti-podman na-eziga ozi na varlink soket nke sistemu na-ege ntị. Systemd wee rụọ ọrụ Podman mmemme ịnata ozi wee malite ijikwa arịa. Ịgbalite sistemụ arụ ọrụ n'elu oghere na-ewepụ mkpa maka daemon na-agba ọsọ mgbe niile mgbe ị na-emejuputa API ndị dịpụrụ adịpụ.

Na mgbakwunye, anyị na-etolite onye ahịa Podman ọzọ a na-akpọ podman-remote, nke na-arụ otu Podman CLI mana na-akpọ varlink ka ọ na-agba arịa. Podman-remote nwere ike na-agba ọsọ n'elu SSH sessions, na-enye gị ohere iji nchekwa na-akpakọrịta na arịa na dị iche iche igwe. Ka oge na-aga, anyị na-eme atụmatụ ime ka podman-remote na-akwado MacOS na Windows n'akụkụ Linux, ka ndị mmepe na nyiwe ndị ahụ nwere ike na-agba ọsọ Linux mebere igwe na Podman varlink na-agba ọsọ ma nwee ahụmahụ zuru oke na arịa na-agba ọsọ na igwe mpaghara.

SD_NOTIFY

Systemd na-enye gị ohere ịkwụsị mmalite nke ọrụ inyeaka ruo mgbe ọrụ akpanyere ha chọrọ ga-amalite. Podman nwere ike ibuga oghere SD_NOTIFY na ọrụ akpanyere ka ọrụ ahụ gosi sistemu na ọ dịla njikere ịrụ ọrụ. Ọzọkwa, Docker, nke na-eji ụdị ihe nkesa ahịa, enweghị ike ime nke a.

Na atụmatụ

Anyị na-eme atụmatụ ịgbakwunye iwu podman na-emepụta sistemu CONTAINERID, nke ga-ewepụta faịlụ otu sistemụ iji jikwaa otu akpa akọwapụtara. Nke a kwesịrị ịrụ ọrụ na ụdị mgbọrọgwụ na enweghị mgbọrọgwụ maka arịa ndị na-enweghị ihe ọ bụla. Anyị ahụla arịrịọ maka oge ojiri ọsọ sistemu-nspawn dakọtara OCI.

nkwubi

Ịgba ọsọ n'ime akpa bụ mkpa kwere nghọta. Ekele dịrị Podman, anyị mechara nwee oge ịgba ọsọ nke na-emegideghị sistemu, mana ọ na-eme ka ọ dị mfe iji.

isi: www.habr.com

Tinye a comment