Rumah >Operasi dan penyelenggaraan >Docker >Bagaimana untuk melaksanakan kuota pengehadan dan sumber dalam bekas Docker?
Melaksanakan kadar pengehadangan dan kuota sumber dalam bekas Docker melibatkan memanfaatkan mekanisme kawalan sumber terbina dalam Docker dan alat yang berpotensi luaran. Docker terutamanya menggunakan cgroup (kumpulan kawalan) untuk menguruskan penggunaan sumber. Kumpulan ini membolehkan anda mengehadkan CPU, memori, blok I/O, dan rangkaian I/O untuk bekas individu.
Had CPU: Anda boleh mengehadkan penggunaan CPU bekas menggunakan bendera --cpus
semasa penciptaan kontena. Sebagai contoh, docker run --cpus=1 my-image
Hadkan bekas ke teras CPU tunggal. Anda juga boleh menentukan saham CPU pecahan menggunakan nilai perpuluhan (misalnya, --cpus=0.5
untuk setengah teras). Ini adalah had lembut; Bekas mungkin mendapat lebih banyak CPU jika bekas lain tidak menggunakannya, tetapi ia tidak akan mendapat lebih daripada had yang ditentukan. Kuota CPU (had keras) boleh diuruskan dengan lebih tepat melalui konfigurasi cgroup secara langsung, yang lebih maju.
Had memori: Sama seperti had CPU, had memori ditetapkan menggunakan bendera --memory
. Sebagai contoh, docker run --memory=1g my-image
Hadkan bekas kepada 1 Gigabyte RAM. Anda juga boleh menetapkan had swap memori menggunakan --memory-swap
. Melebihi had memori boleh menyebabkan bekas yang dibunuh oleh daemon docker.
Had Blok I/O: Blok Had I/O kurang biasa digunakan tetapi boleh menjadi penting untuk mencegah bekas I/O-intensif daripada kelaparan yang lain. Ini dilakukan melalui konfigurasi cgroup secara langsung, memberi tumpuan kepada subsistem blkio
. Anda perlu menentukan parameter seperti membaca dan menulis IOPS (operasi input/output sesaat) atau had lebar jalur.
Rangkaian I/O Had: Ini ditangani dengan lebih terperinci dalam bahagian kemudian, tetapi secara amnya melibatkan penggunaan alat seperti tc
(Kawalan Lalu Lintas) di luar fungsi teras Docker untuk membentuk trafik rangkaian. Docker sendiri tidak secara langsung menawarkan pengehadangan kadar rangkaian halus.
Mencegah keletihan sumber kontena memerlukan pendekatan pelbagai aspek yang merangkumi peruntukan sumber, pemantauan, dan pengurusan proaktif yang teliti. Berikut adalah beberapa amalan terbaik:
--memory-reservation
dan Bendera Permintaan yang sama berguna, sentiasa menetapkan had keras menggunakan --memory
dan --cpus
untuk menguatkuasakan sempadan. Permintaan hanya menyatakan keutamaan, sementara had menguatkuasakan kekangan. Docker sendiri tidak secara langsung menawarkan kadar rangkaian yang halus untuk bekas. Anda perlu menggunakan alat dan teknik luaran untuk mencapai matlamat ini. Pendekatan yang paling biasa adalah menggunakan tc
(kawalan lalu lintas) pada mesin tuan rumah. tc
membolehkan anda membuat peraturan pembentukan lalu lintas berdasarkan pelbagai kriteria, seperti alamat IP sumber/destinasi, pelabuhan, atau ID kontena.
Menggunakan tc
: Anda perlu mengenal pasti antara muka rangkaian yang digunakan oleh bekas Docker anda (misalnya, eth0
, docker0
), dan kemudian gunakan arahan tc
untuk membuat disiplin beratur (seperti baldi token htb
- hierarki) dan kelas untuk menghadkan jalur lebar. Ini melibatkan konfigurasi kompleks, dan memerlukan pemahaman ruang nama rangkaian dan bagaimana Docker memberikan antara muka rangkaian ke bekas. Adalah penting untuk mengkonfigurasi tc
dengan teliti untuk mengelakkan mengganggu lalu lintas rangkaian yang lain.
Alat Alternatif: Alat lain dapat memudahkan pengehadangan kadar rangkaian. Sesetengah penyelesaian ruang nama rangkaian dan platform orkestrasi kontena (seperti Kubernetes) menyediakan dasar rangkaian berasaskan terbina dalam atau plugin untuk menguruskan jalur lebar. Alat ini sering abstrak dari kerumitan secara langsung menggunakan tc
.
Contoh (Konsep tc
Penggunaan - Memerlukan pemahaman terperinci tentang tc
dan konfigurasi rangkaian anda):
<code class="bash"># This is a simplified example and needs adaptation to your specific setup sudo tc qdisc add dev eth0 root tbf rate 10mbit burst 10kb latency 50ms sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit sudo tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 172.17.0.2 flowid 1:1</code>
Ini (hipotesis) mengehadkan bekas dengan alamat IP 172.17.0.2 hingga 10 Mbps. Ini adalah contoh yang sangat mudah dan memerlukan konfigurasi yang teliti. Konfigurasi yang salah boleh memberi kesan yang teruk kepada rangkaian anda.
Beberapa alat dan teknik membantu pemantauan dan menguruskan penggunaan sumber Docker dan had kadar:
docker stats
menawarkan maklumat masa nyata mengenai penggunaan sumber kontena. Ia berguna untuk pemeriksaan cepat, tetapi kurang sesuai untuk pemantauan jangka panjang. Dengan menggabungkan had sumber yang sesuai, alat pemantauan, dan konfigurasi yang berhati -hati terhadap pengehadangan kadar rangkaian (menggunakan alat seperti tc
), anda dapat mengurus penggunaan sumber secara berkesan dan mencegah keletihan sumber kontena dalam persekitaran Docker anda. Ingatlah untuk sentiasa menguji konfigurasi anda dan memantau penggunaan sumber dengan teliti.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan kuota pengehadan dan sumber dalam bekas Docker?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!