Podman adalah platform containerisasi yang sesuai dengan OCI yang sering digunakan sebagai pengganti Docker. Model tanpa daemon dan set fitur yang luas menjadikannya pesaing yang hebat untuk digunakan dalam pengembangan dan produksi.
Dalam artikel ini kami akan menunjukkan cara menggunakan sistem pembaruan otomatis Podman untuk memulai ulang container Anda saat gambar baru dirilis. Podman dapat dikonfigurasi untuk memeriksa pembaruan secara berkala, menarik gambar terbaru, dan membuat ulang wadah yang terpengaruh dengan pengaturannya saat ini.
Mengapa Kontainer Pembaruan Otomatis?
Wadah sering berumur pendek tetapi masih perlu dirawat secara teratur. Kerentanan kritis dalam gambar dapat memberi penyerang pijakan pada aplikasi Anda yang dieksploitasi dalam beberapa jam setelah ditemukan.
Teknologi container paling populer mengharuskan Anda memperbarui container secara manual. Hal ini membebani tim operasi untuk berlangganan pengumuman rilis dan membuat alat yang merilis perubahan baru.
Sistem pembaruan kontainer bawaan Podman mengatasi tantangan ini dan terus memperbarui beban kerja. Penampung dapat diperbarui segera setelah Anda mendorong versi gambar baru, memberikan ketenangan pikiran bahwa penerapan Anda menjalankan tambalan terbaru dan perbaikan bug.
Aktifkan Pembaruan Otomatis
Pembaruan otomatis diaktifkan untuk wadah dengan mengatur io.containers.autoupdate
label ketika Anda melakukannya.
$ podman run -d -p 8080:80 \ --name nginx-container \ --label io.containers.autoupdate=registry \ docker.io/library/nginx:latest
Label dapat memiliki dua kemungkinan nilai:
registry
– Selama pemeriksaan pembaruan, Podman akan menghubungi registri gambar untuk memeriksa apakah tag yang digunakan oleh penampung Anda memiliki versi baru yang tersedia. Gambar akan diambil dan penampung Anda akan dimulai ulang saat hal ini terjadi. Pembaruan registri hanya berfungsi saat Anda menggunakan jalur registri yang sepenuhnya memenuhi syarat – thedocker.io/library/nginx:latest
referensi yang ditunjukkan di atas dimaksudkan, sebagainginx:latest
terlalu kabur.local
– Metode pembaruan ini membatasi Podman untuk melihat gambar kontainer yang sudah ada di sistem file host Anda. Penampung akan dimulai ulang jika versi lokal dari tag gambar berbeda dari versi yang berjalan di penampung. Ini dapat berguna saat merekonstruksi gambar selama pengembangan.
Memiliki label memenuhi syarat wadah sampel NGINX ini untuk pembaruan otomatis. Namun lebih banyak pekerjaan diperlukan sebelum pembaruan benar-benar dapat diterapkan.
Membuat Layanan Systemd
Mekanisme pembaruan Podman mengharuskan container Anda berjalan di dalam layanan systemd. Karena Podman tidak memiliki daemon, ia tidak memiliki pengontrol pusat yang dapat memulai dan menghentikan container Anda. Membungkusnya dalam layanan systemd memberikan kemampuan manajemen siklus hidup dan opsi untuk memulai ulang sebagai respons terhadap peristiwa tertentu.
CLI Podman menyertakan perintah yang membuat definisi unit systemd dari sebuah wadah:
$ podman generate systemd --name nginx-container > /etc/systemd/system/nginx-container.service
Perintah di atas membuat wadah NGINX baru dengan layanan systemd di lokasi yang benar.
Selanjutnya muat ulang systemd untuk mendaftarkan definisi layanan, lalu aktifkan dan mulai layanan:
$ systemctl daemon-reload $ systemctl enable nginx-container.service $ systemctl start nginx-container.service
Wadah NGINX Anda sekarang menjadi layanan systemd yang dimulai secara otomatis saat host Anda melakukan booting. Anda dapat menggunakannya systemctl
perintah untuk memulai dan menghentikan wadah, alih-alih CLI Podman:
$ systemctl start nginx-container.service $ systemctl stop nginx-container.service
Untuk menghapus penampung di masa mendatang, Anda harus menghentikan, menonaktifkan, dan menghapus file unit layanan. Mulai ulang systemd setelahnya untuk menerapkan perubahan sepenuhnya.
$ systemctl stop nginx-container.service $ systemctl disable nginx-container.service $ rm /etc/systemd/system/nginx-container.service $ systemctl daemon-reload
Melakukan Pembaruan
Sekarang semuanya sudah diatur untuk secara otomatis memperbarui wadah NGINX Anda dengan sukses. Anda dapat menjalankan pemeriksaan pembaruan sesuai permintaan dengan Podman’s auto-update
memerintah:
$ podman auto-update Trying to pull docker.io/library/nginx:latest... Getting image source signatures ... UNIT CONTAINER IMAGE POLICY UPDATED nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry true
Ini memperbarui wadah dalam layanan systemd yang dapat diakses oleh pengguna yang menjalankan perintah. Anda mungkin perlu menggunakan sudo
ikuti contoh di atas; jika demikian, jalankan auto-update
perintah sebagai root juga:
$ sudo podman auto-update
Itu registry
pendekatan pembaruan digunakan dalam contoh ini sehingga Podman terhubung ke registri gambar, memeriksa perubahan, dan kemudian menarik gambar baru jika sesuai. Keluaran perintah menunjukkan apakah wadah setiap layanan telah diperbarui.
Karena container dikelola oleh systemd, Podman dapat menentukan apakah container baru telah berhasil dijalankan. Podman akan secara otomatis mengembalikan ke versi gambar sebelumnya jika kegagalan pembaruan terdeteksi. Agar ini berfungsi dengan andal, aplikasi di dalam wadah harus memberi tahu systemd ketika telah berhasil dimulai. Hal ini dapat dilakukan dengan menjalankan systemd-notify --ready
.
Memeriksa Pembaruan
Terkadang, Anda mungkin perlu memeriksa apakah armada kontainer Anda memiliki pembaruan yang tersedia tanpa segera menerapkannya. Menggunakan auto-update
perintah dengan --dry-run
tandai untuk mendapatkan daftar layanan tempat gambar yang diperbarui telah diterbitkan:
$ podman auto-update --dry-run ... UNIT CONTAINER IMAGE POLICY UPDATED nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry pending
Layanan ditampilkan sebagai pending
pembaruan tersedia.
Menerapkan Pembaruan pada Jadwal
Sekarang kami telah berhasil menyiapkan pembaruan penampung sesuai permintaan. Anda tidak perlu mengambil gambar baru secara manual atau memulai ulang wadah Anda. Langkah terakhir adalah mengatur jadwal agar Podman menerapkan pembaruan secara berkala, tanpa Anda menjalankan auto-update
memesan
Sebagian besar distribusi Podman menyertakan timer systemd untuk tujuan ini. Anda dapat mengaktifkan timer menggunakan systemctl
:
$ systemctl enable podman-auto-update.timer
Timer dikonfigurasi untuk memeriksa pembaruan setiap hari. Anda dapat menyesuaikan jadwal dengan membuka file pengatur waktu dengan systemctl edit
dan mengubah nilai OnCalendar
bidang:
$ systemctl edit podman-auto-update.timer [Timer] OnCalendar=Fri *-*-* 18:00
Ekspresi waktu yang ditunjukkan di atas akan menjalankan tes pembaruan setiap hari Jumat pukul 6 sore. Sintaks didokumentasikan dalam manual systemd.
Sekarang penghitung waktu diaktifkan, Anda dapat mulai menggunakan wadah Anda dengan io.containers.autoupdate
label. Mereka akan memperbarui dan memulai ulang secara berkala, mengotomatiskan prosedur pemeliharaan Anda.
Anda tidak perlu menggunakan pengatur waktu systemd Podman untuk membuat jadwal pembaruan. Anda bisa lari podman auto-update
dalam perkakas Anda yang ada atau penjadwal pekerjaan lain seperti: cron
.
Ringkasan
Pembaruan otomatis Podman memungkinkan Anda memindahkan wadah ke versi gambar baru tanpa memulai ulang secara manual atau menggunakan alat eksternal. Ini akan membantu Anda mempertahankan armada kontainer Anda saat gambar merilis perbaikan bug dan patch keamanan.
Meskipun pembaruan otomatis adalah alat yang berguna, pembaruan tidak boleh digunakan secara sembarangan. Mengizinkan pembaruan otomatis dapat menimbulkan masalah sendiri jika gambar yang rusak dilepaskan secara tidak sengaja. Kontainer yang memulai ulang sendiri juga dapat menyebabkan waktu henti atau mengganggu layanan yang bergantung.
Karena itu, Anda harus memeriksa kesesuaian aplikasi Anda sendiri sebelum menerapkan solusi ini. Strategi perantara adalah menjalankan auto-update --dry-run
secara berkala dan mengirimkan hasilnya ke layanan pelacakan. Ini memberi tahu Anda tentang pembaruan yang tersedia tanpa menjalankan risiko menerapkannya tanpa persetujuan.