Kami parantos lami nuturkeun topik ngagunakeun systemd dina wadahna. Deui dina 2014, insinyur kaamanan urang Daniel Walsh nulis artikel
Dina tulisan ieu kami bakal nunjukkeun naon anu parantos robih kana waktosna sareng kumaha Podman tiasa ngabantosan urang dina masalah ieu.
Aya seueur alesan pikeun ngajalankeun systemd di jero wadah, sapertos:
- wadahna multiservice - seueur jalma anu hoyong narik aplikasi multi-layananna tina mesin virtual sareng ngajalankeunana dina wadah. Éta langkung saé, tangtosna, pikeun ngarobih aplikasi sapertos kana microservices, tapi henteu sadayana terang kumaha ngalakukeun ieu atanapi ngan saukur teu gaduh waktos. Ku alatan éta, ngajalankeun aplikasi kayaning jasa dibuka ku systemd tina file unit ngajadikeun rasa sampurna.
- File Unit Systemd - Seuseueurna aplikasi anu dijalankeun di jero wadah diwangun tina kode anu saacanna dijalankeun dina mesin virtual atanapi fisik. Aplikasi ieu ngagaduhan file unit anu diserat pikeun aplikasi ieu sareng ngartos kumaha aranjeunna kedah diluncurkeun. Janten éta langkung saé pikeun ngamimitian jasa nganggo metode anu dirojong, tibatan ngarékam jasa init anjeun nyalira.
- Systemd mangrupikeun manajer prosés. Éta ngalaksanakeun manajemén jasa (pareuman, ngamimitian deui jasa, atanapi maéhan prosés zombie) langkung saé tibatan alat anu sanés.
Kitu cenah, aya seueur alesan pikeun henteu ngajalankeun systemd dina peti. Anu utama nyaéta systemd / jurnal ngatur kaluaran wadah, sareng alat sapertos
Datangna Podman
Kami bagja ngalaporkeun yén kaayaan tungtungna parantos maju. Tim anu tanggung jawab pikeun ngajalankeun peti di Red Hat mutuskeun pikeun ngembangkeun
Loba jalma ngalakukeun ieu.
Abdi sareng Podman henteu ngalawan wadah basis systemd. Barina ogé, Systemd mangrupikeun subsistem init Linux anu paling sering dianggo, sareng henteu ngamungkinkeun éta tiasa dianggo leres dina wadah hartosna teu malire kumaha rébuan jalma biasa ngajalankeun wadah.
Podman terang naon anu kudu dilakukeun pikeun ngajantenkeun systemd leres dina wadahna. Peryogikeun hal sapertos masang tmpfs on /run sareng /tmp. Anjeunna resep gaduh lingkungan "containerized" diaktipkeun sareng ngarepkeun ijin nyerat kana bagian tina diréktori cgroup sareng kana folder /var/log/journald.
Nalika anjeun ngamimitian wadah dimana paréntah anu munggaran nyaéta init atanapi systemd, Podman otomatis ngonpigurasi tmpfs sareng Cgroups pikeun mastikeun yén systemd dimimitian tanpa masalah. Pikeun meungpeuk modeu peluncuran otomatis ieu, paké pilihan --systemd=false. Punten dicatet yén Podman ngan nganggo mode systemd nalika ningali yén éta kedah ngajalankeun paréntah systemd atanapi init.
Ieu mangrupikeun kutipan tina manual:
lalaki podman ngajalankeun
...–systemd=leres|palsu
Ngajalankeun wadah dina modeu systemd. Diaktipkeun sacara standar.
Upami anjeun ngajalankeun paréntah systemd atanapi init di jero wadah, Podman bakal ngonpigurasikeun titik gunung tmpfs dina diréktori ieu:
/run, /run/lock, /tmp, /sys/fs/cgroup/systemd, /var/lib/journal
Ogé sinyal eureun standar bakal SIGRTMIN + 3.
Sadaya ieu ngamungkinkeun systemd ngajalankeun dina wadah anu ditutup tanpa modifikasi.
CATETAN: systemd nyobian nyerat kana sistem file cgroup. Nanging, SELinux nyegah wadah tina ngalakukeun ieu sacara standar. Pikeun ngaktipkeun tulisan, aktipkeun parameter boolean container_manage_cgroup:
setsebool -P container_manage_cgroup leres
Ayeuna tingali kumaha rupa Dockerfile pikeun ngajalankeun systemd dina wadah nganggo Podman:
# cat Dockerfile
FROM fedora
RUN dnf -y install httpd; dnf clean all; systemctl enable httpd
EXPOSE 80
CMD [ "/sbin/init" ]
Éta hungkul.
Ayeuna urang ngumpul wadahna:
# podman build -t systemd .
Kami nyarioskeun ka SELinux pikeun ngamungkinkeun systemd ngarobih konfigurasi Cgroups:
# setsebool -P container_manage_cgroup true
Ku jalan kitu, loba jalma poho ngeunaan hambalan ieu. Untungna, ieu ngan ukur kedah dilakukeun sakali sareng setelan disimpen saatos rebooting sistem.
Ayeuna urang ngan ngamimitian wadahna:
# 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.
Éta éta, jasa parantos dijalankeun:
$ curl localhost
<html xml_lang="en" lang="en">
…
</html>
CATETAN: Ulah coba ieu dina Docker! Di dinya anjeun masih kedah nari nganggo rebana pikeun ngaluncurkeun wadah sapertos kieu ngalangkungan daemon. (Widang sareng bungkusan tambahan bakal diperyogikeun pikeun ngajantenkeun ieu sadayana lancar di Docker, atanapi kedah dijalankeun dina wadah anu istimewa. Kanggo detil, tingali
Sababaraha hal anu langkung keren ngeunaan Podman sareng systemd
Podman damel langkung saé tibatan Docker dina file unit systemd
Upami wadahna kedah dimimitian nalika sistem boot, maka anjeun ngan saukur tiasa ngalebetkeun paréntah Podman anu pas kana file unit systemd, anu bakal ngamimitian jasa sareng ngawaskeunana. Podman nganggo modél garpu-exec standar. Dina basa sejen, prosés wadahna mangrupakeun barudak tina prosés Podman, jadi systemd bisa kalayan gampang ngawas aranjeunna.
Docker nganggo modél klien-server, sareng paréntah Docker CLI ogé tiasa ditempatkeun langsung dina file unit. Nanging, sakali klien Docker nyambung ka daemon Docker, éta (klien) janten ngan ukur prosés ngolah stdin sareng stdout. Sabalikna, systemd teu gaduh ide ngeunaan sambungan antara klien Docker sareng wadah anu dijalankeun dina kadali daemon Docker, sareng ku kituna, dina modél ieu, systemd dasarna henteu tiasa ngawas jasa éta.
Aktipkeun systemd via stop kontak
Podman nanganan aktivasina via stop kontak leres. Kusabab Podman ngagunakeun modél fork-exec, éta tiasa neraskeun stop kontak ka prosés wadah anakna. Docker teu tiasa ngalakukeun ieu sabab ngagunakeun modél klien-server.
Ladenan varlink anu digunakeun Podman pikeun komunikasi sareng klien jauh ka wadahna sabenerna diaktipkeun via stop kontak. Paket cockpit-podman, ditulis dina Node.js sareng bagian tina proyék kabina, ngamungkinkeun jalma pikeun berinteraksi sareng wadah Podman ngalangkungan antarmuka wéb. Web daemon ngajalankeun cockpit-podman ngirim pesen ka stop kontak varlink nu systemd listens on. Systemd teras ngaktifkeun program Podman pikeun nampi pesen sareng ngawitan ngatur wadah. Ngaktipkeun systemd dina stop kontak ngaleungitkeun kabutuhan daemon anu terus-terusan ngajalankeun nalika nerapkeun API jauh.
Salaku tambahan, urang ngembangkeun klien Podman anu sanés disebut podman-remote, anu ngalaksanakeun Podman CLI anu sami tapi nyauran varlink pikeun ngajalankeun wadah. Podman-jauh bisa ngajalankeun on luhureun sesi SSH, ngamungkinkeun Anjeun pikeun aman berinteraksi sareng peti dina mesin béda. Kana waktosna, kami ngarencanakeun pikeun ngaktifkeun podman-remote pikeun ngadukung MacOS sareng Windows sareng Linux, ku kituna pamekar dina platform-platform éta tiasa ngajalankeun mesin virtual Linux sareng Podman varlink jalan sareng gaduh pangalaman lengkep yén wadahna dijalankeun dina mesin lokal.
SD_NOTIFY
Systemd ngamungkinkeun anjeun pikeun nunda peluncuran jasa bantu dugi ka jasa wadahna anu diperyogikeun dimimitian. Podman tiasa neraskeun stop kontak SD_NOTIFY ka layanan containerized supados layanan ngabéjaan systemd yén éta téh siap beroperasi. Sareng deui, Docker, anu nganggo modél klien-server, teu tiasa ngalakukeun ieu.
Dina rencana
Urang rencanana pikeun nambahkeun paréntah podman ngahasilkeun systemd CONTAINERID, nu bakal ngahasilkeun file Unit systemd pikeun ngatur wadah husus dieusian. Ieu kedah dianggo dina modeu root sareng rootless pikeun wadah anu teu boga hak istimewa. Kami malah ningali pamundut pikeun runtime systemd-nspawn anu cocog sareng OCI.
kacindekan
Ngajalankeun systemd dina wadah mangrupikeun kabutuhan anu kaharti. Sareng hatur nuhun kana Podman, kami tungtungna gaduh runtime wadah anu henteu bertentangan sareng systemd, tapi ngagampangkeun dianggo.
sumber: www.habr.com