動態調整docker容器cpu資源

目的:動態調整系統cpu核數後,如何在不停止容器服務的情況下,docker動態使用最新的CPU資源

事件由來:

    1、在ucloud上購買了一臺可以熱升級的機器,熱升級指的是動態更改系統cpu和內存資源

    2、隨着業務的擴展,發現cpu、內存負載過高,需要在不停止業務的情況下動態擴容,因此使用了ucloud提供的熱升級服務,從4核12G擴容爲8核16G

    3、熱升級了cpu和內存後,使用docker info,發現docker已經成功識別到8核16G資源

    4、容器中內存可以立馬正常使用,但是容器中的所有進程還是跑在0-3cpu上,即沒有使用到最新的cpu(4-7)

環境

 

 失敗方案:

     1、docker container update --cpuset-cpus功能。發現調整後,容器中進程還是跑在舊cpu上

     2、taskset -pc 0-7 containerpid。發現調整後,顯示還是使用0-3cpu

原因:

    1、/sys/fs/cgroup/cpuset/docker/cpuset.cpus限制了docker所創建的容器能夠使用的cpu資源,該文件內容爲0-3,

    2、容器資源受限於docker資源:使用taskset方式設置容器在宿主機上的pid資源,還是隻能使用0-3,因爲容器資源受docker資源影響

解決方案

    1、更改docker能夠使用的cpu資源

    2、更改容器能夠使用的cpu資源

具體操作步驟:

[root@br_node3 ~] cd /sys/fs/cgroup/cpuset/docker/

[root@br_node3 docker]# cat cpuset.cpus

0-3

#更改docker能夠使用的cpu資源,因爲容器的cpuset依賴於docker的cpuset內容
[root@br_node3 docker]# echo 0-7 cpuset.cpus

0-7 cpuset.cpus

[root@br_node3 docker]# echo 0-7 > cpuset.cpus

[root@br_node3 docker]# cat cpuset.cpus

0-7

[root@br_node3 docker]# docker ps

CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS               NAMES

98d89fd476bf        server_game_ver:20190412b   "/start/run.sh"     7 hours ago         Up 7 hours          22/tcp              tt_server_game2_1

c6c5e3eb4e68        server_game_ver:20190412b   "/start/run.sh"     47 hours ago        Up 47 hours         22/tcp              wx_server_game1_1

[root@br_node3 ~]# cd /sys/fs/cgroup/cpuset/docker/98d89fd476bf2d495234398de50199fe48d8e6c6ee2ee67cf38c20133ef0f40c/

[root@br_node3 98d89fd476bf2d495234398de50199fe48d8e6c6ee2ee67cf38c20133ef0f40c] cat cpuset.cpus

0-3

#更改容器能夠使用的cpu資源

[root@br_node3 98d89fd476bf2d495234398de50199fe48d8e6c6ee2ee67cf38c20133ef0f40c]# echo 0-7> cpuset.cpus

[root@br_node3 98d89fd476bf2d495234398de50199fe48d8e6c6ee2ee67cf38c20133ef0f40c]# cat cpuset.cpus

0-7


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章