buruh pelabuhan berkerumun dengan node heterogen: dibatasi oleh sumber daya yang tersedia?

0

Saya memiliki gerombolan buruh pelabuhan kecil yang berjalan di kantor saya: satu 40-core (128GB RAM) dan dua 8-core (masing-masing 16GB RAM). Ketika saya menggunakan layanan di segerombolan, pekerjaan sedang berjalan, tetapi mereka tersebar secara merata tanpa memperhatikan kapasitas per-mesin.

Saya memulai kawanan pada manajer dengan:

docker swarm init
docker swarm update --task-history-limit 2

dan pada setiap node:

docker swarm join --token <token-string> <ipaddr:port>

Lalu saya memulai layanan dengan:

docker service create --detach \
     --mount type=bind,src=/s/mypath,dst=/home/mypath \
     --entrypoint "/home/mypath/myscript.sh arg1 arg2" \
     --name "mystuff" -w /home/mypath myregistry.me.com:5433/myimage

Prosesnya bekerja secara individual. Saya belum menemukan indikasi bobot tugas atau afinitas berdasarkan kekuatan simpul.

Idealnya, saya ingin bisa mengatakan sesuatu seperti ini:

  1. bergabung dengan gerombolan, tidak lebih dari ntugas (agak naif)
  2. bergabung dengan segerombolan, timbangkan kapasitas saya (cpu-) sebagai 0.2(atau 5yang lebih besar)
  3. mulai layanan ini, tetapkan tidak lebih dari satu tugas per inti yang tersedia

Saya mengatur sendiri keseluruhan skala layanan docker service scale, tetapi itu tidak memberikan rincian. Apakah mungkin untuk mengatur layanan gerombolan buruh pelabuhan per node oleh sumber daya yang tersedia?

(Ini mungkin bahkan lebih insentif untuk beralih ke k8, yang saya asumsikan menyediakan fungsionalitas di sepanjang garis-garis ini. Ada rasa sakit yang tumbuh dengan pembelajaran dan transisi yang telah saya lakukan dengan kaku.)

r2evans
sumber

Jawaban:

1

Semua itu memang mungkin ketika Anda membuat atau memperbarui layanan Swarm.

Ini berada di bawah opsi "penempatan kontainer" dalam perintah-perintah itu. Jika hanya reservasi sumber daya yang Anda khawatirkan, lihat --reserve-cpudan --reserve-memory. Itu akan memastikan node memiliki cpu gratis atau memori tersedia pada node sebelum menugaskan masing-masing wadah.

Contoh: Jika Anda memerlukan layanan segerombolan untuk menyebarkan dua replika php, dan masing-masing perlu memastikan itu pada node dengan 1GB memori dan 1 CPU, maka service create --reserve-cpu 1 --reserve-memory 1GB phphanya akan menjadwalkan wadah pada node yang tahu penjadwal Swarm tahu memiliki jumlah perangkat keras tersedia. Jika sebuah node hanya memiliki 2 CPU logis, maka ia tidak akan pernah menggunakan lebih dari 2 replika layanan pada node itu.

Bret Fisher
sumber
Ada banyak cara lain untuk mengontrol penempatan tugas, termasuk membatasi cpu / memori, "mode" (global / diganti), kendala layanan (label matching), preferensi penempatan, dan ketersediaan node, tetapi yang saya sebutkan kemungkinan jawaban Anda.
Bret Fisher
Itu lebih mudah dari yang saya harapkan, tidak yakin bagaimana saya melewatkannya. Terima kasih, Bret!
r2evans
Akan ada pertanyaan lain jika Anda lebih suka: apakah ada cara mudah untuk membatasi jumlah total instance yang dimulai? Yaitu, "jalankan tugas ini 100 kali" (dan sebarkan dengan tepat ke seluruh pekerja yang heterogen) "dan kemudian berhenti"?
r2evans
tidak terintegrasi. Swarm menganggap Layanan sudah berjalan lama. Dua opsi: coba dan retas bersama sesuatu dengan layanan buat opsi cari untuk memulai kembali tetapi biasanya bukan pengalaman yang baik. Pilihan terbaik adalah untuk memeriksa JaaS (Pekerjaan sebagai Layanan) Oleh Alex Ellis github.com/alexellis/jaas yang berjalan di atas kawanan dan dapat menjalankan hal-hal 1-off.
Bret Fisher
1
Ya, Swarm memiliki hal-hal bawaan yang tidak dimiliki K8, dan K8 memiliki hal yang sama. Itulah sebabnya ada banyak orkestra sukses (nomad, mesos, swarm, k8s, dll.)
Bret Fisher