Pendekatan apa yang disarankan untuk memperbarui wadah layanan yang berjalan di Amazon ECS?
The dokumentasi AWS mengatakan: "Jika Anda telah memperbarui Docker gambar aplikasi Anda, Anda dapat membuat definisi tugas baru dengan gambar itu dan menyebarkan ke layanan Anda, salah satu tugas pada satu waktu." Ini adalah hampir semua yang saat ini tersedia dalam dokumentasi saat ini (13 April 2015).
Apakah saya mengerti dengan benar, bahwa satu-satunya cara untuk memperbarui wadah aplikasi saya di Amazon ECS adalah membuat tugas baru, lalu menghentikan tugas lama dan memulai tugas baru?
Saya telah berhasil menggunakan tag "terbaru" dengan Core OS & Fleetctl. Ini bermanfaat karena tidak perlu mengubah tag gambar Docker untuk pembaruan baru, karena memuat ulang layanan akan melihat perubahan baru dan memperbarui wadah (menggunakan tag yang sama "terbaru").
Pendekatan apa yang telah Anda gunakan untuk memperbarui layanan Anda dengan gambar buruh pelabuhan yang diperbarui di Amazon ECS?
sumber
Jawaban:
Tidak yakin apakah ini dianggap sebagai pertanyaan yang diabaikan - menemukan ini saat memecahkan masalah saya dan sekarang menambahkan solusi saya sekarang setelah diselesaikan.
Untuk memperbarui layanan dengan wadah baru, Anda perlu:
Jika tugas layanan tidak diperbarui ke versi terbaru, periksa tab "peristiwa" untuk kesalahan. Misalnya, mungkin ECS tidak dapat memulai versi baru dari layanan Anda: Anda hanya memiliki satu contoh EC2 di kluster dan port aplikasi sudah digunakan pada host. Dalam hal ini, setel batasan "min health / max health" ke "0%, 100%" - dengan cara ini, ECS akan memilih untuk membunuh kontainer lama sebelum menggunakan yang baru. Ini juga terjadi selama beberapa menit - jangan terburu-buru jika Anda tidak melihat umpan balik segera.
Di bawah ini adalah contoh skrip penyebaran untuk memperbarui wadah dalam klaster dan layanan yang telah dikonfigurasi sebelumnya. Perhatikan tidak perlu menentukan versi jika Anda hanya bermaksud "menggunakan terbaru dari keluarga".
sumber
set "min health/max health" limits to "0%, 100%"
adalah emas. Terima kasih banyak!min
untuk0%
, ketika Anda mengubah definisi tugas yang digunakan layanan Anda, Anda pada dasarnya memberikan otoritas penuh untuk menjatuhkan semua tugas pada saat yang sama untuk penyebaran itu.Untuk memperbarui aplikasi Anda, perbarui definisi tugas dan kemudian perbarui layanan. Lihat http://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service.html
sumber
Saya menggunakan beberapa bagian dari script ecs-deploy dengan peningkatan saya (mengambil gambar dari setiap deskripsi wadah, dan mengganti bagian tag-nya dengan $ TAG_PURE): https://gist.github.com/Forever-Young/e939d9cc41bc7a105cdcf8cd7ab9d714
sumber
Setelah mengunggah gambar Docker baru, meskipun memiliki tag yang sama dengan yang digunakan oleh Tugas, seseorang harus menyalin tugas terbaru, dan kemudian mengonfigurasi Layanan untuk menggunakan Tugas baru itu. Secara opsional, seseorang dapat dengan mudah memiliki 2 tugas duplikat dan mengonfigurasi Layanan untuk bertukar di antara mereka setiap kali Gambar Docker diperbarui.
Pada dasarnya, untuk menyebabkan Docker Container baru dibuat oleh ECS, pembaruan ke Layanan harus memicunya, dan satu-satunya cara untuk membuat pemicu Layanan adalah dengan memperbaruinya dalam beberapa cara - seperti dengan mengatakannya untuk menggunakan nomor tugas yang berbeda.
Perhatikan bahwa Kontainer yang sedang berjalan mungkin tidak berhenti secara otomatis hanya karena Layanan telah diperbarui - Anda mungkin perlu melihat daftar Tugas Anda dan menghentikannya secara manual.
sumber
tag
Pendekatan yang bekerja untuk saya mirip dengan yang di atas. Setelah membuat layanan dan tugas Anda, dan memulai segalanya, edit Grup Penskalaan Otomatis dan pastikan min , maks , dan yang diinginkan diatur ke 1 .
Grup mungkin adalah grup default; jika Anda tidak yakin maka Anda bisa mencapainya dengan memilih tab ECS Instances di cluster Anda, lalu dari drop-down Actions pilih Cluster Resources dan klik tautan di dekat bagian bawah kotak dialog yang terbuka.
Ketika itu semua di tempat, setiap kali Anda ingin menyebarkan update gambar wadah pergi ke Task area cluster dan Berhenti tugas . Anda akan mendapatkan peringatan, tetapi asalkan penskalaan otomatis diatur, layanan akan memulainya lagi dengan dorongan terbaru.
Tidak perlu membuat versi baru dari layanan atau tugas.
Perhatikan bahwa layanan / tugas memperbarui diri dari mana saja secara instan menjadi sekitar satu menit atau lebih. Jika Anda menunggu dengan putus asa, Anda bisa Menjalankan Tugas Baru secara manual. Layanan tidak akan memilikinya, jadi itu tidak ideal, tetapi masih akan berputar yang baru jika mati.
sumber
Saya tahu ini adalah utas lama, tetapi solusinya jauh lebih mudah daripada sebagian besar jawaban di sini.
Cara memperbarui wadah yang sedang berjalan dalam dua langkah:
Di bawah ini mengasumsikan Anda memiliki layanan yang menjalankan tugas yang mereferensikan penandaan kontainer
latest
(atau penandaan statis lainnya yang tidak mengubah pembaruan lintas penampung).Jika tujuannya adalah agar kita mendapatkan bangunan baru di alam bebas, kita tidak benar-benar perlu bergantung pada layanan kita untuk itu (dan saya berpendapat, kita tidak seharusnya bergantung pada itu). Jika Anda mematikan tugas Anda, layanan akan mengenalinya tidak memiliki
Desired Count
tugas yang sedang berjalan, dan hanya memutar yang baru. Ini akan memicu penarikan kembali wadah Anda, berdasarkan tag yang sama.Layanan ECS adalah jaring keamanan HA, bukan pengganti untuk pipa CD / CI Anda.
Bonus: Jika tujuannya adalah agar layanan mengenali wadah baru telah didorong (terlepas dari tag), kami perlu mempertimbangkan implikasinya. Apakah kita benar-benar menginginkan layanan dasar yang mengendalikan pipa penempatan kita? Mungkin tidak. Idealnya, Anda akan mendorong wadah Anda dengan tag yang berbeda (berdasarkan versi rilis atau sesuatu). Dalam hal ini, penghalang untuk penyebaran adalah bahwa layanan harus diberi tahu tentang sesuatu yang baru - sekali lagi, ini merupakan jaring pengaman untuk layanan tersebut, dan tidak lebih.
Cara menyebarkan tag baru dalam tiga langkah:
container:tag
ke repositoritag
minimum healthy
mengatur untuk0%
beberapa jawaban lain menyarankan, Anda memberi AWS wewenang penuh untuk membunuh seluruh layanan Anda untuk menyebarkan definisi tugas baru. Jika Anda lebih suka penyebaran bergulir / bertahap, atur minimum Anda menjadi sesuatu>0%
.minimum healthy
ke100%
danmaximum healthy
ke sesuatu>100%
untuk memungkinkan layanan Anda menyebarkan tugas baru sebelum mematikan yang lama (meminimalkan dampaknya bagi pengguna Anda).Dari titik ini, layanan Anda akan secara otomatis mengenali bahwa Anda telah menentukan tugas baru, dan bekerja menyebarkannya berdasarkan
minimum
/maximum
ambang batas sehat yang telah Anda konfigurasi.sumber