Linux dan Docker: Bagaimana untuk melaksanakan penjadualan dinamik dan pengurusan sumber kontena?
Abstrak:
Dengan perkembangan pesat dan aplikasi teknologi kontena yang meluas, cara untuk melaksanakan penjadualan dinamik dan pengurusan sumber kontena dengan lebih baik telah menjadi topik penting. Artikel ini akan menumpukan pada beberapa mekanisme dan kaedah biasa dalam Linux dan Docker, serta kod sampel, untuk membantu pembaca memahami dengan lebih baik penjadualan dinamik dan pengurusan sumber kontena.
Pengenalan:
Peningkatan teknologi kontena telah membawa perubahan revolusioner kepada penggunaan dan pengendalian aplikasi. Teknologi virtualisasi tradisional memerlukan hypervisor, manakala teknologi kontena boleh menjalankan aplikasi secara langsung pada mesin hos tanpa memerlukan hypervisor tambahan.
Inti teknologi kontena ialah enjin kontena, yang paling terkenal ialah Docker. Docker menyediakan penyelesaian kontena yang ringan dan mudah digunakan dan telah menjadi wakil teknologi kontena. Artikel ini akan mengambil Docker sebagai contoh dan menggabungkannya dengan mekanisme sistem Linux untuk memperkenalkan cara melaksanakan penjadualan dinamik dan pengurusan sumber kontena.
1. Teknologi kontena dalam Linux
Dalam sistem Linux, teknologi kontena bergantung terutamanya pada dua fungsi penting, iaitu cgroup dan ruang nama. cgroups (kumpulan kawalan) boleh mengehadkan dan mengurus sumber sistem, manakala ruang nama boleh mengasingkan proses dan sistem fail.
cgroup ialah konfigurasi sumber yang berkuasa dan mekanisme sekatan yang boleh menetapkan had sumber untuk kumpulan proses yang berbeza. Dengan menggunakan cgroups, kami boleh menentukan had sumber yang berbeza, seperti kuota CPU, kuota memori, dsb., untuk proses dalam bekas dan proses luaran. Dalam sistem Linux, cgroup digunakan secara meluas untuk melaksanakan pengurusan sumber kontena.
Berikut ialah contoh kod yang menggunakan cgroups untuk mengehadkan penggunaan CPU proses dalam bekas:
#!/bin/bash # 创建cgroup cgcreate -g cpu:/docker_container # 设置CPU配额为50% cgset -r cpu.cfs_quota_us=50000 /docker_container # 启动容器 docker run -d -it --name=my_container --cgroup-parent=/docker_container ubuntu /bin/bash
Dalam contoh di atas, kami menggunakan arahan cgcreate untuk mencipta cgroup bernama docker_container, dan menggunakan cgset untuk menetapkan kuota CPU bagi cgroup ialah 50%. Kemudian kami menggunakan arahan docker untuk memulakan bekas bernama my_container dan mengaitkannya kepada docker_container cgroup. Dengan cara ini, penggunaan CPU bagi proses dalam bekas akan dihadkan kepada 50%.
ruang nama boleh menyediakan persekitaran berjalan bebas untuk proses, termasuk sistem fail dan ruang proses. Dengan menggunakan ruang nama, kita boleh mencapai pengasingan antara bekas dan hos.
Berikut ialah contoh kod yang menggunakan ruang nama untuk mengasingkan sistem fail dalam bekas:
#define _GNU_SOURCE #include <sched.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { // 创建一个新的namespace int ret = unshare(CLONE_NEWNS); if (ret) { perror("unshare"); exit(EXIT_FAILURE); } // 在新的namespace中挂载一个文件系统 ret = mount("rootfs", "/mnt", "ext4", MS_MGC_VAL, NULL); if (ret) { perror("mount"); exit(EXIT_FAILURE); } // 执行容器需要的命令 system("/bin/bash"); return 0; }
Dalam contoh di atas, kami menggunakan fungsi nyahkongsi untuk mencipta ruang nama baharu dan memasang sistem fail rootfs di dalamnya. Seterusnya, kami melaksanakan perintah /bin/bash Perintah yang dilaksanakan ini akan dijalankan dalam ruang nama baharu, dengan itu mencapai pengasingan sistem fail.
2. Penjadualan kontena dan pengurusan sumber dalam Docker
Selain menyediakan bekas, Docker juga menyediakan beberapa fungsi lanjutan, seperti penjadualan dinamik dan pengurusan sumber kontena. Ciri-ciri ini menjadikan Docker sebagai platform pengurusan kontena yang berkuasa.
Docker melaksanakan penjadualan dinamik kontena dengan menggunakan penjadual. Penjadual boleh menetapkan bekas secara automatik kepada hos berdasarkan dasar penjadualan yang berbeza. Strategi penjadualan yang biasa digunakan ialah:
#!/bin/bash # 使用负载均衡调度器 docker run -d -p 8080:80 --name=mynginx --scheduler=random nginx
Dalam contoh di atas, kami menggunakan penjadual pengimbangan beban untuk menetapkan bekas bernama mynginx kepada hos. Bekas akan mendengar pada port 8080 hos dan memajukan permintaan ke port 80 dalam bekas.
Pengurusan SumberBerikut ialah contoh kod yang menggunakan arahan Docker untuk melihat penggunaan sumber bekas:
#!/bin/bash # 查看容器的CPU使用情况 docker stats --format "table {{.Container}} {{.CPUPerc}} {{.MemUsage}}" my_container
Dalam contoh di atas, kami menggunakan arahan statistik docker untuk melihat penggunaan CPU dan penggunaan memori bagi bekas bernama my_container.
Kesimpulan:
Artikel ini memperkenalkan beberapa kaedah biasa dan kod sampel untuk melaksanakan penjadualan dinamik dan pengurusan sumber kontena dalam Linux dan Docker. Dengan menggunakan cgroups untuk melaksanakan sekatan sumber dan ruang nama untuk melaksanakan pengasingan persekitaran, kami boleh mengurus dan mengendalikan kontena dengan lebih baik. Docker seterusnya menyediakan ciri lanjutan, seperti penjadualan dinamik dan pengurusan sumber, untuk membantu kami menggunakan teknologi kontena dengan lebih baik. Saya berharap melalui pengenalan artikel ini, pembaca dapat memahami dengan lebih mendalam tentang penjadualan dinamik dan pengurusan sumber kontena.Atas ialah kandungan terperinci Linux dan Docker: Bagaimana untuk melaksanakan penjadualan dinamik dan pengurusan sumber kontena?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!