Container Redeploy
Mayoritas solusi berbasis Docker (termasuk stacks yang di-manage oleh platform) terus dikembangkan, menghadirkan versi produk serta perbaikan baru. Oleh karena itu, disarankan untuk memperbarui template Anda secara teratur ke tag terbaru mereka, yaitu rilis terbaru.
Operasi seperti itu disebut redeploy dan memiliki spesifik berikut ketika dikelola di platform:
- data pengguna custom dan file sistem sensitif dipertahankan selama update:
- konten dari volumes (baik yang default maupun custom)
- file yang tercantum dalam /etc/jelastic/redeploy.conf (konfigurasi khusus dari stacks), yang diperlukan untuk memastikan operabilitas container
- konfigurasi terkait AutoFS dan NFS (/etc/autofs.jelastic , /etc/auto.master , /etc/exports)
- firewall configurations (/etc/sysconfig/iptables-custom , /etc/sysconfig/iptables4-jelastic , /etc/sysconfig/iptables6-jelastic , /etc/iptables/rules.v4)
- SSH access data (/root/.ssh/authorized_keys , /root/.ssh/authorized_keys2 , /root/.ssh/id_rsa)
- semua custom configurations yang telah ditentukan sebelumnya (seperti run commands , links , variables , dll.) tidak akan terpengaruh
- jika beroperasi dengan multiple (instances yang diskalakan secara horizontal), update dapat dilakukan pada containers satu per satu, yaitu secara implisit tanpa downtime
Dengan cara ini, Anda dapat memperbarui container berbasis Docker Anda ke tag (versi) baru tanpa mempengaruhi aplikasi di dalamnya. Dengan platform ini, redeployment container dapat dilakukan hanya dalam beberapa klik melalui dashboard UI atau dengan mudah diotomatisasi via API.
Catatan: Saat bekerja dengan database MySQL, MariaDB, atau Percona, downgrading (yaitu melakukan redeploy ke versi yang lebih rendah) tidak didukung. Jika operasi ini diperlukan, kami merekomendasikan membuat cadangan dan memulihkan database setelah redeploy (atau secara keseluruhan di container terpisah).
Untuk mempelajari tentang menyimpan atau membuat cadangan data custom selama redeploy, lihat bagian yang sesuai di bawah.
Update Container via Dashboard
Cara paling langsung dan ramah pengguna untuk melakukan redeploy tag template adalah dengan menggunakan platform dashboard. Instruksi di bawah ini akan memandu Anda melalui langkah-langkah yang diperlukan:
1. Bingkai dialog redeployment khusus dapat diakses dengan dua cara berbeda:
- pilih tombol Redeploy Container(s) di sebelah node atau layer yang diperlukan (untuk memperbarui semua container yang terdiri sekaligus)
- klik ikon pensil di sebelah versi tag layer di topology wizard (ketika Changing Environment Topology dari environment yang ada)
2. Sebagai hasilnya, bingkai Redeploy containers akan terbuka, di mana Anda dapat memilih Tag baru untuk container Anda.
Anda juga dapat menyesuaikan beberapa opsi tambahan:
- Keep volumes data - jika diaktifkan, data dalam volumes akan terlindungi dari penghapusan dan akan tetap tersedia setelah redeploy
- untuk horizontally scaled containers, Anda dapat memilih antara dua opsi deployment:
- Simultaneous deployment - redeploy semua nodes sekaligus, lebih cepat tetapi menyebabkan downtime aplikasi singkat
- Sequential deployment with delay - redeploy instances satu per satu dengan delay tertentu di antara operasi. Opsi ini memastikan bahwa selalu ada node running untuk memproses permintaan yang masuk (i.e. no downtime)
Setelah semua konfigurasi diatur, klik tombol Redeploy dan konfirmasikan dalam pop-up.
3. Setelah update selesai, Anda akan melihat notifikasi yang sesuai di sudut kanan atas dashboard.
Klik tombol Show Logs untuk membuka tab yang sesuai dengan informasi tentang container yang diperbarui - Node ID , name:tag , dan Duration.
Sekarang, Anda tahu cara melakukan redeploy container melalui platform dashboard.
Update Container via Platform API/CS/CLI
Proses update dapat diotomatiskan menggunakan platform API, Cloud Scripting, dan CLI (command-line interface).
Contoh mendetail tentang redeploy container via CLI disediakan dalam panduan yang terhubung.
Redeploy container dilakukan dengan metode environment.Control.RedeployContainers, yang diatur dengan parameter berikut:
-
envName - nama dari lingkungan di mana container(s) perlu diredeploy
-
session - user session (atau token) identifier, digunakan untuk autentikasi
-
nodeGroup - identifier dari environment layer untuk di-update (optional)
-
nodeId - nomor identifikasi dari container tertentu untuk diredeploy (optional)
Catatan: Anda perlu menyatakan parameter nodeGroup atau nodeId untuk menentukan target operasi. Metode ini mengabaikan nodeGroup jika keduanya disediakan dan gagal jika tidak ada yang ditentukan.
-
tag - versi image untuk diterapkan
-
useExistingVolumes - atur ke true untuk mempertahankan data dalam volumes yang dipasang di dalam container yang diperbarui (optional)
-
login dan password - kredensial untuk mengakses image dari registry privat (optional)
Konstruk berikut dapat digunakan untuk mendefinisikan update container dalam automation scripts Anda:
1. Redeploy seluruh layer dari containers.
api: environment.control.RedeployContainers
nodeGroup: {nodeGroup}
tag: {myImage}:{newTag}
Di sini:
- {nodeGroup} - environment layer (or node group) di mana semua containers harus diupdate
- {myImage} - nama dari image yang akan diterapkan
- {newTag} - versi yang dibutuhkan dari image di atas
2. Memperbarui container tertentu.
api: environment.control.RedeployContainers
nodeId: {nodeId}
tag: {myImage}:{newTag}
Di sini, nilai {nodeId} harus diganti dengan nomor ID dari node yang dibutuhkan (placeholder lainnya sama seperti contoh di atas).
Saving Custom Data during Container Redeploy
Setiap platform-managed container dilengkapi dengan file khusus /etc/jelastic/redeploy.conf, yang menyimpan daftar konfigurasi container yang kritis. Pengaturan ini secara otomatis dipertahankan oleh platform selama redeploy container. File ini dapat dengan mudah diakses melalui embedded file manager melalui shortcut Favorites.
File redeploy.conf dibagi menjadi dua bagian system dan custom dan dapat digunakan untuk membuat cadangan file sistem.
System Files and Folders
Catatan: Jangan mengedit daftar “ system files and folders ” kecuali Anda tahu persis apa yang Anda lakukan.
Di sini, konfigurasi spesifik container yang diperlukan untuk operasi redeploy yang benar terdaftar. Beberapa file umum disediakan di semua stacks:
- /etc/jelastic/redeploy.conf - konfigurasi redeployment saat ini sendiri (untuk menyimpan daftar file dan direktori yang diperlukan untuk disimpan selama setiap redeploy container selanjutnya)
- ${home}/.bash_profile - berisi pengaturan shell SSH default (misalnya, pesan pengantar shell, file konfigurasi yang harus diambil, dll.)
- /etc/sysconfig/iptables - menyimpan aturan firewall default
- /etc/sysconfig/iptables-custom - berisi custom firewall rules
- /var/lib/jelastic/keys - menyimpan SSH private keys yang diunggah, yang diperlukan untuk mengakses container via SSH dan untuk berinteraksi dengan containers lainnya
Juga, redeploy.conf untuk tiap jenis node tertentu mencakup file-file spesifik stack yang berbeda.
Stack | Path |
---|---|
Tomcat | /opt/tomcat/conf/jelastic-ha.xml |
/opt/tomcat/conf/jelastic-ssl.xml | |
/opt/tomcat/conf/tomcat-env.sh | |
/opt/tomcat/conf/variables.conf | |
/opt/tomcat/temp/ | |
/var/spool/cron/tomcat | |
TomEE | /opt/tomcat/temp/ |
/var/spool/cron/tomcat | |
GlassFish | /home/jelastic/.ssh |
/home/jelastic/.ssh2 | |
/opt/glassfish/glassfish/domains/domain1/applications | |
/opt/glassfish/glassfish/domains/domain1/config/admin-keyfile | |
/opt/glassfish/glassfish/domains/domain1/config/domain.xml | |
/opt/glassfish/hazelcast.xml | |
/opt/glassfish/glassfish/domains/domain1/config/variables.conf | |
/opt/glassfish/glassfish/domains/domain1/docroot | |
/opt/glassfish/glassfish/nodes | |
/root/contexturl | |
/var/spool/cron/glassfish | |
/var/lib/jelastic/hooks | |
Golang | /home/jelastic |
/var/lib/jelastic/app.info | |
/var/lib/jelastic/keys | |
/var/lib/jelastic/vcs | |
/var/spool/cron/golang | |
Payara | /home/jelastic/.ssh |
/home/jelastic/.ssh2 | |
/opt/payara/glassfish/domains/domain1/applications | |
/opt/payara/glassfish/domains/domain1/config/admin-keyfile | |
/opt/payara/glassfish/domains/domain1/config/domain.xml | |
/opt/payara/hazelcast.xml | |
/opt/payara/glassfish/domains/domain1/config/variables.conf | |
/opt/payara/glassfish/domains/domain1/docroot | |
/opt/payara/glassfish/nodes | |
/root/contexturl | |
/var/spool/cron/payara | |
/var/lib/jelastic/hooks | |
Spring Boot | /home/jelastic/conf |
/home/jelastic/APP | |
/var/lib/jelastic/keys | |
/var/spool/cron/jvm | |
Apache PHP | backup:/etc/php.ini |
/etc/php.d/ | |
/var/spool/cron/apache | |
/var/www/.ssh/ | |
Apache Ruby | /var/lib/jelastic/env |
/var/spool/cron/apache | |
Couchbase | /opt//etc/ |
MariaDB | /etc/my.cnf |
/etc/php.ini | |
/var/lib/mysql/.ssh/ | |
/var/spool/cron/mysql | |
Maven | /opt/maven/.ssh/ |
/var/spool/cron | |
Memcached | /etc/sysconfig/memcached |
MySQL | /etc/my.cnf |
/etc/php.ini | |
/var/lib/mysql/.ssh/ | |
/var/spool/cron/mysql | |
NGINX (load balancer) | /etc/dhcp/dhcpd.conf |
/etc/nginx/conf.d | |
/etc/nginx/neighbors | |
/etc/nginx/nginx-jelastic.conf | |
/etc/nginx/tcpmaps/mappings.xml | |
/etc/nginx/upstreams | |
/var/lib/nginx/.ssh/ | |
/var/spool/cron/nginx | |
/var/lib/jelastic/SSL | |
NGINX PHP | backup:/etc/php-fpm.conf |
backup:/etc/php.ini | |
/etc/php.d/ | |
/etc/sysconfig/php-fpm | |
/var/lib/nginx/.ssh/ | |
/var/spool/cron/nginx | |
NGINX Ruby | /var/lib/jelastic/env |
/var/spool/cron/nginx | |
NodeJS | /home/jelastic//.ssh/ |
home/jelastic//.ssh2/ | |
var/spool/cron/nodejs | |
/home/jelastic/ROOT | |
PerconaDB | /etc/my.cnf |
/etc/php.ini | |
/var/spool/cron/mysql | |
PostgreSQL | /etc/php.ini |
/var/lib/pgsql/.ssh/ | |
/var/spool/cron/postgres | |
${home}/lib/ | |
${home}/share/ | |
Varnish | /etc/nginx |
/etc/varnish | |
/etc/sysconfig/varnish | |
/var/lib/varnish | |
/var/spool/cron/varnish | |
WildFly | /opt/contexturl |
/home/jelastic/.ssh/ | |
/var/spool/cron/wildfly | |
/opt/wildfly/domain | |
/opt/wildfly/standalone | |
/opt/wildfly/welcome-content/index.html | |
/var/lib/jelastic/hooks |
Custom Files and Folders
Catatan: Ketika menyediakan “ custom files and folder ”, hanya tambahkan file konfigurasi sistem yang diperlukan untuk memastikan operabilitas container selama redeployment. Gunakan container volumes untuk kasus lain (misalnya untuk mempertahankan data aplikasi Anda).
Anda dapat menambahkan daftar konfigurasi “ system files and folders ” default dengan custom files dan folders Anda (jika diperlukan). Buka file redeploy.conf dan tambahkan entri dengan jalur penuh ke item yang diperlukan (setiap entri harus dinyatakan dalam baris terpisah).
Creating File Backup Copy Upon Image Redeployment
Platform menyediakan cara yang nyaman dan sederhana untuk membuat cadangan file konfigurasi selama update container. Artinya, ketika mengganti konfigurasi yang ditentukan dengan versi baru dari tag baru, salinan file dari sebelum redeploy akan dipertahankan.
Untuk membuat cadangan, Anda perlu menentukan jalur ke file yang diperlukan di redeploy.conf dan tambahkan prefix “ backup: ” pada catatannya:
backup: {path_to_file}
Catatan: Operasi ini hanya tersedia untuk file (bukan direktori).
Setelah redeploy, konfigurasi dari container lama dapat dengan mudah dikenali oleh ekstensi “ backup ” atau “ time stamp ” yang sesuai. Mereka dapat digunakan untuk rollback instan berdasarkan inkompatibilitas dengan konfigurasi baru atau untuk analisis perubahan.
Misalnya, semua platform-managed PHP application servers secara default membuat cadangan untuk konfigurasi /etc/php.ini.
Setelah update container, Anda akan melihat versi baru dan sebelumnya dari php.ini atau file lain yang dicadangkan:
- {file_name} - file dari image target redeployment (dari tag baru)
- {file_name}.{time_stamp} - versi cadangan dari file yang dibuat tepat sebelum operasi redeploy (file terpisah untuk setiap redeployment ke tag yang berbeda)
- {file_name}.backup - cadangan terbaru dari file (secara otomatis menggantikan cadangan sebelumnya dengan nama yang sama)
Dengan cara ini, Anda dapat dengan mudah beralih ke pengaturan yang digunakan sebelumnya dengan menggantikan file php.ini dengan cadangannya (misalnya melalui penggantian nama atau penyalinan konten).
Sekarang, Anda tahu cara mengelola versi template (Docker tags) dari containers di dalam platform.