博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cgroup, docker,和kubernetes
阅读量:6448 次
发布时间:2019-06-23

本文共 3909 字,大约阅读时间需要 13 分钟。

hot3.png

0. cgroups

跑一个耗cpu的脚本

x=0while [ True ];do    x=$x+1done;

top可以看到这个脚本基本占了100%的cpu资源

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND          30142 root      20   0  104m 2520 1024 R 99.7  0.1  14:38.97 sh

下面用cgroups控制这个进程的cpu资源

mkdir -p /cgroup/cpu/foo/ #新建一个控制组foo

echo 50000 > /cgroup/cpu/foo/cpu.cfs_quota_us  #将cpu.cfs_quota_us设为50000,相对于cpu.cfs_period_us的100000是50%echo 30142 > /cgroup/cpu/foo/tasks

然后top的实时统计数据如下,cpu占用率将近50%,看来cgroups关于cpu的控制起了效果

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                         30142 root      20   0  105m 2884 1024 R 49.4  0.2  23:32.53 sh

cpu控制组foo下面还有其他的控制,还可以做更多其他的关于cpu的控制

[root@localhost ~]# ls /cgroup/cpu/foo/cgroup.event_control  cgroup.procs  cpu.cfs_period_us  cpu.cfs_quota_us  cpu.rt_period_us  cpu.rt_runtime_us  cpu.shares  cpu.stat  notify_on_release  tasks

1. docker

docker run --help | grep cgroup       --cgroup-parent string                  Optional parent cgroup for the container

这个参数指定的cgroup的配置文件的位置,指定位置run后

# docker run --cgroup-parent "/" nginxlocalhost:/sys/fs/cgroup/cpu # lscgroup.clone_children  cpuacct.stat          cpu.cfs_quota_us   cpu.stat                                                          notify_on_release  user.slicecgroup.event_control   cpuacct.usage         cpu.rt_period_us   docker                                                            release_agentcgroup.procs           cpuacct.usage_percpu  cpu.rt_runtime_us  f296b0316c259262e78110174f3b4a7329b026af99a14730f11cc0f215be9741  system.slicecgroup.sane_behavior   cpu.cfs_period_us     cpu.shares         foo                                                               taskslocalhost:/sys/fs/cgroup/cpu # docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMESf296b0316c25        nginx               "/entrypoint.sh"    2 minutes ago       Up 2 minutes                            berserk_mclean

其中 f296b0316c25这个目录就是创建的这个容器的cgroup控制目录

如果--cgroup-parent没有设置为/, 那么控制目录应该在 /sys/fs/cgroup/cpu/docker/

2. kubernetes控制

kubelet也提供了这个参数,用于定义pod的容器启动的cgroup控制

定义pod

localhost:/tmp/manifest # cat aa.manifest # Copy of pod.yaml without file extension for testapiVersion: v1kind: Podmetadata:  name: nginx  labels:    name: nginxspec:  containers:  - name: nginx    image: nginx    ports:    - containerPort: 80

用kubelet裸启动

kubelet --cgroup-root=/ --config /tmp/manifest/localhost:/sys/fs/cgroup/cpu/docker # docker psCONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS                  PORTS               NAMES1adc2179227f        nginx                                      "nginx -g 'daemon off"   1 seconds ago       Up Less than a second                       k8s_nginx.156efd59_nginx-localhost_default_0539f3e7389c317750cd6a23a5509685_8a29cc5d902c8aa23657        gcr.io/google_containers/pause-amd64:3.0   "/pause"                 4 seconds ago       Up 3 seconds                                k8s_POD.b2390301_nginx-localhost_default_0539f3e7389c317750cd6a23a5509685_24406b11

观察cgroup的根目录位置

localhost:/sys/fs/cgroup/cpu # ls1adc2179227fa461ac349357b7fde73fdd47636b868aa5403875d79ca33d584b  cgroup.procs          cpuacct.usage_percpu  cpu.rt_runtime_us  foo                tasks902c8aa236578d11bc8d97f4a7cfb72465fad1fdca0a6752735191d5638b5460  cgroup.sane_behavior  cpu.cfs_period_us     cpu.shares         notify_on_release  user.slicecgroup.clone_children                                             cpuacct.stat          cpu.cfs_quota_us      cpu.stat           release_agentcgroup.event_control                                              cpuacct.usage         cpu.rt_period_us      docker             system.slice

看到1adc了,同时也可以 pause容器的ID, 证明了这个选项起作用了。

转载于:https://my.oschina.net/HardySimpson/blog/868186

你可能感兴趣的文章
云计算固然好 但挑战依然存在
查看>>
云服务器 ECS 最佳实践:借助于实例 RAM 角色访问其它云产品 API
查看>>
《软件需求工程(第2版)》一2.3 需求工程在软件开发中的地位
查看>>
海思全力部署智能城市NB-IoT应用
查看>>
微软将于8月15日发布新版Authenticator应用 统一用户和企业入口
查看>>
DELL推出Openrating System 10,进击的开放网络
查看>>
Maven多模块项目
查看>>
Oracle、PostgreSQL与Mysql数据写入性能对比
查看>>
整理Java基础知识--选择与判断
查看>>
Linux查看程序端口占用情况
查看>>
jar包冲突案例分析.md
查看>>
控制圈复杂度的9种重构技术总结
查看>>
当软件项目全部能靠自己搞定了,也能接几万元的软件项目时,未必适合创业...
查看>>
数据分析--数字找朋友
查看>>
推荐好用的开源库或软件
查看>>
18年selenium3+python3+unittest自动化测试教程(下)
查看>>
Redis集群中删除/修改节点(master、slave)(实验)
查看>>
memcache数据库和redis数据库的区别(理论)
查看>>
我的友情链接
查看>>
HTML 应用 多列浮动等高处理
查看>>