Quadlet: Podman कंटेनरों को systemd के साथ चलाना
(mo8it.com)- Podman daemonless होने के कारण, सर्वर बूट होने के बाद कंटेनरों को भरोसेमंद तरीके से उठाने के लिए एक execution host की ज़रूरत होती है, और Quadlet इसे systemd service file तरीके से हल करता है
- पहले
podman generate systemdमें container creation और service file generation को अलग-अलग संभालना पड़ता था, और generated file बदलने पर हर बार manual editing का बोझ आता था - Quadlet
~/.config/containers/systemdकी.containerफ़ाइल में[Container],[Service],[Install]सेटिंग्स को साथ रखकर Podman options और systemd behavior को एक ही जगह manage करता है - rootless Podman में boot auto-start के लिए
WantedBy=default.targetऔर linger activation ज़रूरी है, जबकिmulti-user.targetuser mode में define नहीं होता AutoUpdate=registry, systemd dependencies, directory-based file grouping, औरpodletconversion tool के साथ Quadlet rootless·daemonless Podman ऑपरेशन के लिए अच्छी तरह फिट बैठता है
Quadlet की ज़रूरत क्यों है
- Quadlet Podman कंटेनरों को systemd service की तरह चलाने का तरीका है
- कंटेनरों को background में चलाया जा सकता है
- सर्वर reboot के बाद कंटेनर अपने-आप शुरू हो सकते हैं
- Podman कंटेनरों को systemd के तहत चलाने का तरीका अपने-आप में नया नहीं है
- पहले
podman generate systemdकमांड इस्तेमाल की जाती थी - यह कमांड अब Quadlet पर migrate करने की deprecation warning दिखाती है
- पहले
- Podman daemonless architecture पर आधारित है, इसलिए daemon के बिना कंटेनर शुरू करवाने के लिए एक execution host चाहिए
पुराने podman generate systemd तरीके की असुविधा
- पुराने तरीके में पहले
podman createसे कंटेनर बनाना पड़ता था- उदाहरण कंटेनर
docker.io/library/postgres:16image का उपयोग करता है - इसमें
-p 5432:5432, volume mount,POSTGRES_PASSWORDenvironment variable, औरio.containers.autoupdate=registrylabel शामिल हैं
- उदाहरण कंटेनर
- इसके बाद
podman generate systemd test-db -fn --newचलाकरcontainer-test-db.serviceफ़ाइल बनाई जाती थी - बनी हुई service file को
~/.config/systemd/userमें रखकर नीचे दिए गए कमांड से enable और start किया जाता थाsystemctl --user enable --now container-test-db
- इस flow में container creation, service file generation, ज़रूरत पड़ने पर file move, और service enablement बार-बार दोहराना पड़ता था
- अगर container creation command लंबी हो जाए, तो बाद में फिर चलाने के लिए अलग से shell script संभालनी पड़ती थी
- generated systemd service file को customize करना हो, तो हर बार फिर से manual editing करनी पड़ती थी
Quadlet फ़ाइल की संरचना
- Quadlet तरीके में
~/.config/containers/systemddirectory बनाई जाती है और उसके भीतर.containerफ़ाइल रखी जाती है - उदाहरण
test-db.containerफ़ाइल में ये तत्व शामिल हैं[Container]Image=docker.io/library/postgres:16AutoUpdate=registryPublishPort=5432:5432Volume=%h/volumes/test-db:/var/lib/postgresql/data:ZEnvironment=POSTGRES_PASSWORD=CHANGE_ME
[Service]Restart=always
[Install]WantedBy=default.target
.containerफ़ाइल एक सामान्य systemd service file ही है, लेकिन इसमें एक खास[Container]section शामिल होता है[Container]के कई optionspodman createमें इस्तेमाल होने वाले command-line options से मेल खाते हैंImage: इस्तेमाल की जाने वाली image और tagAutoUpdate=registry:--label "io.containers.autoupdate=registry"के बराबरPublishPort:-pके बराबरVolume:-vके बराबरEnvironment:-eके बराबर
- user home directory के लिए
~की जगह systemd specifier%hइस्तेमाल करना चाहिए [Service]मेंRestart=alwaysकंटेनर को तब तक हमेशा restart कराता है, जब तक उसे manually stop न किया जाए[Install]मेंWantedBy=default.targetकंटेनर को boot पर auto-start होने देता है
rootless Podman में ज़रूरी systemd सेटिंग्स
- rootless कंटेनरों में
multi-user.targetनहीं, बल्किdefault.targetइस्तेमाल करना चाहिएmulti-user.targetsystemd user mode में define नहीं है- इसे
systemctl --user status multi-user.targetसे जाँचा जा सकता है - system mode में इसे
systemctl status multi-user.targetसे देखा जा सकता है
- क्योंकि कंटेनर systemd user service के रूप में चलते हैं, इसलिए user login न होने पर भी कंटेनर शुरू हों, इसके लिए linger enable करना पड़ता है
loginctl enable-linger
- सर्वर reboot के बाद auto-start चाहिए तो linger activation अनिवार्य है
- नई service file को systemd से discover करवाने के लिए यह कमांड चलानी होगी
systemctl --user daemon-reload
- कंटेनर start करना और उसकी स्थिति देखना systemd और Podman दोनों से किया जा सकता है
systemctl --user start test-dbsystemctl --user status test-dbpodman ps
- default container name, service file name के आगे
systemd-लगाकर बनता हैtest-db.containerका default container namesystemd-test-dbहै- यह naming rule conflict से बचाने के लिए है
- इसे
[Container]section केContainerNameoption से सीधे तय किया जा सकता है
Quadlet के संचालन संबंधी फायदे
- Quadlet container service settings को एक ही फ़ाइल में manage करने देता है
- पुराने तरीके की तरह service file generate करने वाली script और generated service file को अलग-अलग संभालना नहीं पड़ता
- systemd के
[Unit]और[Service]sections में उपलब्ध options इस्तेमाल किए जा सकते हैं- उदाहरण के लिए, कंटेनर शुरू होने से पहले चलने वाला command
StartExecPreसे दिया जा सकता है - बाद में generated file को manually बदलने की ज़रूरत कम हो जाती है
- उदाहरण के लिए, कंटेनर शुरू होने से पहले चलने वाला command
- shell script लिखने और debug करने के बजाय configuration file-केंद्रित तरीके से कंटेनर चलाए जा सकते हैं
- कंटेनरों के बीच dependencies को systemd तरीके से व्यक्त करना आसान हो जाता है
कंटेनरों के बीच dependencies व्यक्त करना
- अगर app container किसी database container पर निर्भर हो, तो systemd के
[Unit]section से यह संबंध बताया जा सकता है - OxiTraffic container,
test-dbcontainer पर निर्भर रहने वाला उदाहरण है[Unit]मेंRequires=test-db.serviceसेट करने पर app केवल database शुरू होने पर ही शुरू होगाAfter=test-db.serviceसेट करने पर दोनों कंटेनर parallel में शुरू नहीं होंगे
- reference देते समय
.containerफ़ाइल नाम नहीं, बल्कि service name इस्तेमाल होता हैtest-db.container: फ़ाइल नामtest-db.service: service namesystemd-test-db: default container name
- app को database से बात करनी हो, तो दोनों कंटेनरों के
[Container]section मेंNetworkoption जोड़ना होगा, लेकिन networking यहाँ शामिल नहीं है
कई फ़ाइलें और grouping
- Quadlet को इस तरह व्यवस्थित किया जा सकता है कि हर कंटेनर की अलग
.containerफ़ाइल हो - multi-container app को एक ही Docker Compose फ़ाइल में रखने की तुलना में, container-wise files cognitive load कम कर सकती हैं
- अगर Docker Compose फ़ाइल सैकड़ों लाइनों और दर्जनों कंटेनरों तक पहुँच जाए, तो उसे maintain करना मुश्किल हो सकता है
- Mailcow की Docker Compose फ़ाइल ऐसे बड़े Compose file का उदाहरण है
- Docker Compose में भी कई फ़ाइलों में बाँटने की सुविधा है
- Quadlet
~/.config/containers/systemdके भीतर directories में unit files रखने की सुविधा देता है- उदाहरण में
oxitrafficdirectory बनाकर app और database files को साथ रखा जा सकता है
- उदाहरण में
image updates
AutoUpdate=registryसेट करने परpodman auto-updateसे image updates जाँची जा सकती हैं- अगर registry में उपयोग किए जा रहे tag के compatible कोई नई image हो, तो Podman image pull करके कंटेनर restart कर देता है
- Docker में इसके लिए Watchtower जैसे tool की ज़रूरत पड़ सकती है, लेकिन Podman यह सुविधा built-in देता है
latestजैसे tags जोखिम भरे हो सकते हैं- OxiTraffic में
latestअगले version की breaking changes ला सकता है - PostgreSQL में
latestइस्तेमाल करने पर नया major version आ सकता है, और PostgreSQL major upgrade में हमेशा manual migration चाहिए होती है
- OxiTraffic में
- production में ऐसे tags इस्तेमाल करने चाहिए जो breaking change तक न ले जाएँ
- एक तरीका यह भी है कि
podman auto-updateको हर कुछ दिनों में manually चलाकर देखा जाए कि क्या update हुआ, और फिर कंटेनर ठीक चल रहा है या नहीं
podman-compose और migration tools
podman-composeएक Python script है जो Compose files को Podman के साथ चलाती है- इसे लंबे समय के Docker Compose alternative के रूप में देखना मुश्किल है, वजहें ये हैं
- यह Compose spec और Podman·systemd के बीच translation layer है, इसलिए systemd की सारी capabilities उपलब्ध नहीं कराता
- आधिकारिक Podman project Rust या Go जैसी compiled languages में लिखा जाता है
- आख़िरी commit 5 महीने पहले का है, इसलिए इसका maintenance बहुत सक्रिय नहीं दिखता
- Quadlet, Podman के rootless·daemonless design के साथ ज़्यादा स्वाभाविक रूप से मेल खाता है
- Compose file से Quadlet आज़माने के लिए podlet इस्तेमाल किया जा सकता है
- यह एक Rust tool है जो Podman commands या Docker Compose files से Quadlet files बना सकता है
आगे पढ़ने के लिए
- Quadlet को गहराई से समझने के लिए
podman-systemd.unitman page उपयोगी है - Quadlet केवल container ही नहीं, बल्कि pod, network, और volume भी manage कर सकता है
- अगर systemd unit files लिखने की आदत नहीं है, तो
systemd.unitऔरsystemd.serviceman pages देखी जा सकती हैं - एक दूसरा दृष्टिकोण और दूसरा उदाहरण blog.while-true-do की मिलती-जुलती पोस्ट में देखा जा सकता है
1 टिप्पणियां
Hacker News की राय
Quadlet Podman से निकली सबसे अच्छी चीज़ों में से एक है, और जो लोग Podman को लेकर उत्सुक हैं या container-based workloads पर शिफ्ट होना चाहते हैं, उन्हें मैं इसकी जोरदार सिफारिश करता हूं
Containers को सामान्य system services की तरह जोड़कर संभाला जा सकता है, और उन्हें साथ में चलाने के लिए अलग orchestration layer सीखने या non-container resources पर निर्भर रहने की जरूरत नहीं पड़ती
आप बस वही systemd units लिखते हैं जो आप पहले से लिखते आए हैं, और automatic updates या failure पर service restart/notifications बोनस हैं
Docker से ऐसा ही करने की कोशिश में अक्सर विशाल
runcommand के जरिए Docker daemon को bypass करना पड़ता था और ghost services व containers बचे रह जाते थे, जबकि Quadlet कहीं ज्यादा साफ-सुथरा है और configuration भी/etc/systemd/,.config/systemd,/usr/local/lib/systemdजैसी systemd unit locations में साथ रहता है, इसलिए backup लेना आसान हैहालांकि local development में यह docker-compose का जवाब नहीं है, और Podman team भी उस क्षेत्र में बहुत रुचि लेती नहीं दिखती
User containers background database जैसे long-running local test infrastructure के लिए अच्छे हैं, लेकिन आम compile →
docker compose up→ test →docker compose downloop के लिए बहुत झंझट वाले हैंव्यावहारिक जवाब या तो
.kubeQuadlet (Kubernetes play) है, या Podman socket के साथdocker composeइस्तेमाल करनायह मुझे इतना पसंद आया कि मैं कई महीनों से खाली समय में Quadlet manage करने वाला GitOps tool बना रहा हूं, और यह containerized servers manage करने का सही तरीका लगता है
[0]का podman-compose न होना महत्वपूर्ण है। लेख में भी बताया गया था कि podman-compose खास अच्छा नहीं है और उसका development कम है। Podman compose spec का अधिकांश हिस्सा implement करता है, इसलिए ज्यादातर स्थितियों में आपdocker composeइस्तेमाल कर सकते हैंजब RH ने पहली बार Podman को push करना शुरू किया था, तब जिन लोगों ने इसे try किया था वे शायद Podman 3 की अस्पष्टता और podman-compose के खराब अनुभव की वजह से दूर हो गए
कई flags बदलना, versions upgrade करना, और podlet खुद ही किसी दूसरे tool पर जाने की सलाह देने वाली flow को follow करते-करते यह एक अंतहीन rabbit hole बन गया
आखिर में मेरा systemd बस
podman compose upचलाता हैcompose को अपना काम करने देने की तुलना में Quadlet का फायदा क्या है, यह जानने की उत्सुकता है
संदर्भ के लिए, Podman मेरे user के रूप में चलता है, और कोई daemon बिल्कुल नहीं है
docker-composeइस्तेमाल करेंpodman composeही बचता हैहाल ही में Quadlet खोजा और atomic OS व rootless Quadlet के आधार पर पूरा homelab बनाया; इसकी जोरदार सिफारिश करता हूं
systemd socket activation भी संभव है, यानी उदाहरण के लिए systemd http/https sockets बनाकर, जैसे
ssh.socketऔरpodman.socketक्रमशःsshd.service,podman.serviceको activate करते हैं, वैसे ही Traefik को auto-activate किया जा सकता हैrootless setup में original IP preserve करने का यह व्यावहारिक रूप से इकलौता तरीका है, इसलिए यह लगभग lifesaver है। Rootless Podman/Docker आम तौर पर बिना बड़े drawbacks के original IP preservation को आसानी से allow नहीं करते
https://github.com/savely-krasovsky/homelab
Quadlet “प्रोडक्शन जैसे माहौल में आपस में निर्भर सभी containers चलाने” वाले docker compose use case के लिए अच्छा विकल्प है
लेकिन docker compose का दूसरा use case, यानी development वाला, अगर बेहतर होता तो अच्छा होता
docker compose के साथ database, Redis, OpenSearch, बाकी dependencies, nginx proxy, और
.:/appको volume के रूप में mount किए हुए development container को साथ में start किया जा सकता है, साथ में हटाया जा सकता है, औरdocker-compose.ymlको repository में रखा जा सकता हैQuadlet सभी files को
~/.config/containers/systemdमें रखने को कहता है, इसलिए यह अब project में isolated नहीं रहता, और दूसरे developers के साथ check-in करके share करना भी सुविधाजनक नहीं है। ऊपर से उन्हें भी Podman इस्तेमाल करना पड़ेगाज़्यादातर लोग अभी भी Docker इस्तेमाल करते हैं, और Codespaces जैसे hosted development environments में भी Docker ही मिलता है
इसलिए check-in की गई YAML file के साथ docker compose इस्तेमाल किया जाता है। मैं Podman इस्तेमाल करता हूं, इसलिए सभी volumes में manually
:Zलगाना पड़ता है, लेकिन सामान्य Docker उसे handle नहीं कर पाताdevelopment के लिए docker compose का कोई विकल्प हो तो अच्छा होगा, लेकिन Quadlet उसके लिए ठीक fit नहीं लगता
podman-compose --in-pod=1 systemd -a create-unitइस्तेमाल करने परpodman-compose@service बनाई जा सकती है, और बाद मेंpodman-compose systemd -a registerसेcompose.ymlfile को$nameके साथ register किया जा सकता हैफिर
podman-compose@$name.serviceसे compose file आधारित pod को manage किया जा सकता है, और यह पूरी तरह rootless तरीके से भी चलता हैsystemd-runarbitrary command के आधार पर temporary systemd service चलाने देता हैज़रूरत हो तो timer तक शामिल करके systemd scope rules का पालन करने वाली साफ-सुथरी temporary unit बना देता है
[1] https://www.freedesktop.org/software/systemd/man/systemd-run...
इसमें Kubernetes जैसी format है और container build जैसी कुछ convenience features जोड़ी गई हैं
kube play file को project root में रखकर
podman kube play project.yaml --buildचलाएं, तो pod, volumes आदि साथ में चलने लगते हैंQuadlet files deployment stage में उपयोगी हैं। अगर project को VPS पर डालना चाहते हैं, तो आपके पास पहले से मौजूद
project.yamlके साथ Kube Quadlet[2] इस्तेमाल कर सकते हैं[1] https://docs.podman.io/en/latest/markdown/podman-kube-play.1...
[2] https://docs.podman.io/en/latest/markdown/podman-systemd.uni...
docker-compose.ymlइस्तेमाल करती है, इसलिए दर्द समझ आता हैकुल मिलाकर यह बहुत अच्छी तरह काम करता है, लेकिन OSX पर उस घटिया intermediate VM की वजह से कभी-कभी अजीब behave करता है
कभी-कभी Podman compatibility check करता हूं, लेकिन अब मान लिया है कि rootless philosophy इतनी अलग है कि full compatibility संभव नहीं है
फिर भी यह tool production के लिए शानदार है। कुछ hobby projects bare-metal node पर हाथ से बनाए systemd services के रूप में चला रहा हूं, और अभी user-mode containerd है
समय मिला तो migrate करके देख सकता हूं
यह बात मज़ेदार है कि यह लेख Podman-Compose को “actively maintained नहीं है” कहता है और बताता है कि आख़िरी commit 5 महीने पहले था, और तुरंत विकल्प के तौर पर Podlet की सिफ़ारिश करता है, जिसका आख़िरी commit भी 5 महीने पहले ही था
Podlet उपयोगी हो सकता है, लेकिन यह Docker Compose की कई सुविधाएँ support नहीं करता और हमेशा साफ़-सुथरा conversion भी नहीं करता
खासकर
-f docker-compose.yml -f docker-compose.override.ymlकी तरह कई YAML files को stack करने वाली सुविधा support नहीं करतालगता है compose CLI socket के ज़रिए engine को control करता है, और Podman व Docker engine की API लगभग एक जैसी है
podman-compose उम्मीद के मुताबिक काम नहीं कर रहा था, इसलिए मैं यही तरीका इस्तेमाल कर रहा हूँ
Docker-compose आम तौर पर docker client plugin के रूप में install होता है, लेकिन मैं इसे Podman के साथ इस्तेमाल करने के लिए standalone application के रूप में चलाता हूँ
साथ ही integration setup के लिए मैं
DOCKER_HOSTenvironment variable के बजाय dockercontextsको तरजीह देता हूँअगर सिर्फ़ Quadlet पर्याप्त powerful न हो, तो Quadlet[3] और सामान्य Podman[4] भी सीमित Kubernetes manifests चलाने को support करते हैं
अभी तक यह नहीं समझ पाया कि compose file के
restartoption को Podman कैसे handle करता है, क्योंकि Podman में कोई supervising daemon नहीं हैवहीं
healthcheckoption systemd timers पर निर्भर करता है, यह मुझे पता हैGentoo जैसे non-systemd distribution पर Podman इस्तेमाल करते समय automatic healthcheck काम नहीं करता था, लेकिन manually healthcheck चलाने पर बाकी setup अंत तक पूरा हो गया
[1] https://github.com/docker/compose
[2] https://docs.podman.io/en/latest/markdown/podman-system-serv...
[3] https://docs.podman.io/en/latest/markdown/podman-systemd.uni...
[4] https://docs.podman.io/en/latest/markdown/podman-kube-play.1...
Podlet एक सहायक tool है, और लंबे समय में Quadlet के साथ काम करना बेहतर है
5 महीने का मतलब unmaintained नहीं होता; लगभग 2 साल होने चाहिए
फिर भी यह चिंता बढ़ाता है। लेकिन 5 महीने maintenance में होने का सबूत बिल्कुल नहीं है
unmaintained repositories को भी update होने की कई वजहें हो सकती हैं, और GitHub की हाल की कमज़ोर archive functionality ही इसे रोकती है
कुछ साल पहले self-hosting setup को reset करते समय कुछ अलग आज़माना चाहता था, इसलिए openSUSE MicroOS चुना, और आखिरकार systemd/Quadlet के तहत Podman containers चलाने लगा; मौजूदा setup से मैं काफ़ी संतुष्ट हूँ
containers Podman के built-in tools से automatically update होते हैं, और logs देखना व monitoring सामान्य systemd tools से करता हूँ
जब कुछ बदलना हो, तब configuration file की location भूल भी जाऊँ तो उसे ढूँढना आसान है, और पढ़ना व edit करना भी आसान है
rootless और daemonless होना भी अच्छा है
बीच में कुछ चीज़ें आज़माईं, लेकिन podman compose भारी-भरकम लगा, उसके deprecated होने से खुशी है, और साफ़ है कि Quadlet ही आगे का रास्ता है
learning curve है और Docker की तुलना में resources कम हैं, यह ध्यान में रखना होगा
local development में कई service stacks को up/down करने के लिए मैं अब भी Docker और docker compose ही चुनूँगा
setup मिलाने में थोड़ा समय लगा, लेकिन इस बात से बहुत प्रभावित हूँ कि maintenance लगभग चाहिए ही नहीं। अब तक तो बिल्कुल नहीं
जो लोग कुछ ऐसा ही करना चाहते हैं, वे मेरा setup देख सकते हैं
https://github.com/jeppester/coreos-nextcloud
मैं अपने सभी nodes को धीरे-धीरे MicroOS पर ले जा रहा हूँ, और कंपनी में भी MicroOS या उससे मिलती-जुलती चीज़ को push कर रहा हूँ
base OS का automatic rollback और declarative container configuration व automatic updates का combination एक-दूसरे में बिल्कुल फिट बैठता महसूस होता है
format
podman generate systemdया Kubernetes YAML से ज़्यादा स्पष्ट है, और systemd integration भी शानदार हैपरेशान करने वाली बात यह है कि Podman upstream Debian/Ubuntu के लिए repository provide नहीं करता
Debian stable पर 4.3.1 में अटके रहने से कई नए features छूट गए, और अंततः Docker compose पर वापस लौटने का फैसला किया
सुझाए गए workaround थे Podman को खुद compile करना या
debian/testingइस्तेमाल करनामैं सच में उम्मीद करता/करती हूँ कि यह नया तरीका लोगों को Docker से Podman पर शिफ्ट होने में मदद करेगा
Docker-Compose ही वह वजह है जिसके चलते कई लोग स्विच करने से हिचकते हैं, और मेरे साथ भी ऐसा ही था
मानना पड़ेगा कि Quadlet से पहले Podman के पास इसका कोई सही जवाब नहीं था
अगर Docker-Compose की वजह से आप Docker छोड़ने में हिचक रहे थे, तो Quadlet के साथ Podman कहीं ज़्यादा मुकाबले लायक विकल्प है
आपको शायद Docker उतना याद नहीं आएगा जितना सोचा था, और rootless containers चलाने से security में सुधार भी मिलेगा
सब कुछ
~/.config/quadlet/systemdमें डालने वाला तरीका काम नहीं करेगाdevelopment और testing के लिए यह ज़रूरी है, और अभी Quadlet सख्ती से deployment solution है
Quadlet मुझे वाकई पसंद है क्योंकि यह containers को सामान्य system services की तरह इस्तेमाल करने देता है
लेकिन rootless containers का user experience इस conceptualization से अच्छी तरह मेल नहीं खाता
आम तौर पर system services, systemd के system session में system user के रूप में चलती हैं, लेकिन rootless container की services, system user के user systemd session में मौजूद होती हैं
अच्छा होगा अगर system session के अंदर rootless Quadlet चलाया जा सके
user-lingerenable करके user systemd के जरिए rootless चलाने से व्यावहारिक तौर पर कोई फर्क है क्यामैंने हमेशा यही किया है
साथ ही, अच्छा होगा अगर
DynamicUser=option के साथ rootless Quadlet चलाया जा सकेDynamicUser=system service permissions को सीमित करने का शानदार तरीका था, लेकिन अभी Podman के साथ अच्छी तरह फिट नहीं बैठताHacker News के front page पर Quadlet देखना दिलचस्प है। मुझे लगता है इसे पर्याप्त attention नहीं मिला
project के Ygal और Valentin ने inlets tunnel client चलाने के तरीके पर एक guest post भेजी थी। यह Ngrok/Cloudflared जैसा है, लेकिन SaaS limitations के बिना self-hosted तरीके से
https://inlets.dev/blog/2023/10/03/client-quadlet.html
उन्होंने
[container]की जगह[kube]इस्तेमाल किया, जिससे standard Kubernetes YAML लिया जा सका, और portability काफी बेहतर हो गईजिनकी रुचि हो, उनके लिए मैंने हाल ही में एक Ansible template बनाया है, जो दिखाता है कि Quadlet deployment कितना आसान है
GH: https://github.com/Mati365/hetzner-podman-bunjs-deploy
site.example.orgके बजायexample.site.orgइस्तेमाल हो रहा हैhttps://en.wikipedia.org/wiki/Example.com