cgroup

mesos学习之cgroup

99封情书 提交于 2019-12-04 12:32:42
最近在啃mesos源码,mesos用cgroup做资源隔离,由于之前没有接触linux container,所以写了一些小代码做了一些小试验来学习一下cgroup。 /proc/mounts文件是以/etc/mtab文件的格式给出当前系统所挂载的文件系统信息,这个文件也能反映出任何手工安装从而在/etc/mtab文件中没有包含的文件系统。当挂载cgroups后,cgroups的挂载点的信息也出现在/proc/mounts中,在我机器上/proc/mounts的条目信息如下: 从左至右的信息是:文件系统name,挂载点绝对路径,文件系统类型,选项,dump的频率和fsck的检查次数。 我在/home/test_dir/cgroups目录下挂载了cgroup的cpu和memory子系统,在/home/test_dir/cgroups2目录下挂载cgroup的net_cls子系统。 输入如下两行命令: 以在/proc/mounts中显示分别显示出了这两个目录。 /proc/cgroups记录着所有cgroup子系统的状态: 从左到右的条目分别是子系统name,hierarchy ID,子系统的cgroup控制组数目,子系统是否可用(1可用,0不可用) 那么这两个文件可以用来干嘛呢? 我们可以通过查看/proc/cgroups是否存在来判断cgroup在机器上是否可用。可以通过解析

fdisk命令手工分区

孤街浪徒 提交于 2019-12-03 23:07:34
1. fdisk -l   查看系统所有的磁盘和分区 2. fdisk /dev/sdb  进行磁盘分区 命令 说明 a 设置可引导标记 b 编辑bsd磁盘标签 c 设置DOS操作系统兼容标记 d 删除一个分区 l 显示已知的文件系统类型。82为Linux swap分区,83为Linux分区 m 显示帮助菜单 n 新建分区 o 建立空白DOS分区表 p 显示分区列表 q 不保存退出 s 新建空白SUN磁盘标签 t 改变一个分区的系统ID u 改变显示记录单位 v 验证分区表 w 保存退出 x 附加功能(仅专家)   n---p主----1分区号----1起始柱面-----分区大小+100M------w   n---e扩展----2分区号---124起始柱面----1024柱面(所有剩余空间都分配给扩展分区)   n---1逻辑---不用指定分区号---124起始柱面----+100M(指定大小)------w   有时因为系统的分区表正忙,则需要重新启动系统之后才能使新的分区表生效。 3. 格式化    建立文件系统  mkfs -t ext4 /dev/sdb1 mkfs -t ext4 /dev/sdb2 mkfs -t ext4 /dev/sdb5 mkfs命令非常简单易用,不过是不能调整分区的默认参数的(如块大小是4096),这些默认参数除非特殊情况,否则不需要调整

kubelet fails to get cgroup stats for docker and kubelet services

匿名 (未验证) 提交于 2019-12-03 01:48:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I'm running kubernetes on bare-metal Debian (3 masters, 2 workers, PoC for now). I followed k8s-the-hard-way, and I'm running into the following problem on my kubelet: Failed to get system container stats for "/system.slice/docker.service": failed to get cgroup stats for "/system.slice/docker.service": failed to get cgroup stats for "/system.slice/docker.service": failed to get container info for "/system.slice/docker.service": unknown container "/system.slice/docker.service" And I have the same message for kubelet.service. I have some files

cpu子系统的组调度

匿名 (未验证) 提交于 2019-12-03 00:21:02
组调度属于 cgroup 中的 cpu 子系统 cpu 子系统的所有操作都在 cpu_cgrp_subsys 中有定义 struct cgroup_subsys cpu_cgrp_subsys = { . css_alloc = cpu_cgroup_css_alloc , . css_online = cpu_cgroup_css_online , . css_released = cpu_cgroup_css_released , . css_free = cpu_cgroup_css_free , . css_extra_stat_show = cpu_extra_stat_show , . fork = cpu_cgroup_fork , . can_attach = cpu_cgroup_can_attach , . attach = cpu_cgroup_attach , . legacy_cftypes = cpu_legacy_files , . dfl_cftypes = cpu_files , . early_init = true , . threaded = true , }; 我们这里以 css_alloc 为例 static struct cgroup_subsys_state * cpu_cgroup_css_alloc ( struct cgroup

Docker之NameSpace与Cgroup

匿名 (未验证) 提交于 2019-12-03 00:14:01
Docker容器技术是一个与传统的虚拟化技术有些本质上的差别,传统的虚拟化技术,是站硬件物理资源的基础上,虚拟出多个OS,然后在OS的基础上构建相对独立的程序运行环境,而Docker则是在OS的基础上进行虚拟,所以,Docker轻量很多,因此其资源占用、性能消耗相比传统虚拟化都有很大的优势。 docker容器很快,启动和停止可以在秒级实现,比传统的虚拟化技术要快很多,docker核心解决的问题是利用容器来实现类似VM的功能,从而节省更多的硬件资源,docker容器除了运行其中的应用之外,基本不消耗额外的系统资源,从而在保证性能的同时,减小系统开销,同时,它还可以达到“一次封装,到处运行”的目的。 Docker和传统虚拟化的区别如下: docker和传统虚拟化的架构上的区别如下: 二、NameSpace和Cgroup的概念与作用 Docker中有三个核心概念,分别是镜像、容器、仓库。而镜像的概念主要就是把运行环境和业务代码进行镜像打包,每个镜像都会存在多个“层”,镜像层都是只读的,不能往里写数据,如果想要写,就需要在其基础之上启动成一个容器, 在容器层,我们是可写的。 在镜像的多个“层”中,有一个busybox的概念,我将它理解为欺骗层。 虚拟化的技术就是来解决宿主机与虚拟机之间的耦合问题(简称“解耦”),传统虚拟化是属于完全解耦的,而docker是属于半解耦的。关于“耦合、解耦

docker学习-docker容器运行

匿名 (未验证) 提交于 2019-12-03 00:03:02
docker run是启动容器的方法,可以用三种指定的方式指定容器启动时执行的命令。 (1)CMD指令 (2)ENTRYPOINT指令 (3)在docker run中命令行中指定 但是docker run并不能长期保持running状态,我们经常需要进入到容器中去做一些工作,比如查看日志、调试、启动其他进程等。有两种进入容器的方式:attach和exec。 docker attach 首先启动一个容器,保持后台长期运行 docker run - d ubuntu / bin / bash - c "while true; do sleep 1; echo i_am_a_container;done 首先检查容器的ID docker ps - a CONTAINER ID就是容器的编号,其实就是容器ID前12个字符,又叫短ID IMAGE就是base IMAGE NAMES是容器的名称,在启动容器的时候可以通过 --name参数显式的为容器命名。 通过docker attach可以attach到容器启动命令的终端。 docker attach 1e5cc7e3b22b 通过短ID attach到了容器的启动命令终端,之后看到的是echo每秒输出一次打印信息 可以通过ctl+p,然后ctl+q退出attach终端 docker exec 通过docker exec进入相同的容器

Failed to get D-Bus connection: Operation not permitted

匿名 (未验证) 提交于 2019-12-02 23:57:01
在容器中使用systemctl报Failed to get D-Bus connection: Operation not permitted的错误,则在启动的时候把sys/fs/cgroup映射到docker容器中。 docker run --privileged --name=test --hostname=test -v /sys/fs/cgroup:/sys/fs/cgroup image /usr/sbin/init 来源:博客园 作者: 滴滴滴 链接:https://www.cnblogs.com/gaoyuechen/p/11441975.html

Set systemd as Cgroup Driver

匿名 (未验证) 提交于 2019-12-02 23:06:17
We want to use systemd as cgroup driver for docker and kubelet, let's see how to achieve that. Configure docker After you install and start docker, by default it will use cgroupfs as the cgroup driver, check by running: docker info | grep Cgroup Cgroup Driver: cgroupfs Edit /usr/lib/systemd/system/docker.service file: ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd Then reload daemon and restart docker systemctl daemon-reload systemctl restart docker Verify the change docker info | grep Cgroup Cgroup Driver: systemd Configure kubelet Currently, the kubelet cannot

(转载)Android/Linux下CGroup框架分析及其使用

匿名 (未验证) 提交于 2019-12-02 21:59:42
CGroup是control group的简称,它为Linux kernel提供一种任务聚集和划分的机制,可以限制、记录、隔离进程组(process groups)所使用的资源(cpu、memory、I/O等)。CGroup也是LXC为实现虚拟化所使用的资源管理手段。CGroup本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O或内存的分配控制等具体的资源管理功能是通过这个功能来实现的。这些具体的资源管理功能称为CGroup子系统。 CGroup子系统包含如下: 子系统 主要功能 blkio 设置限制每个块设备的输入输出控制。 cpu 使用调度程序为CGroup任务提供CPU的访问。 cpuacct 产生CGroup任务的CPU资源报告,CPU Accounting Controller。 cpuset 如果是多核CPU,这个子系统就会为CGroup任务分配单独的CPU和内存。 devices 允许或拒绝CGroup任务对设备的访问。 freezer 暂停或恢复CGroup任务。 hugetlb 允许限制CGroup 的HubeTLB使用 memory 设置每个CGroup的内存限制以及产生内存资源报告。 net_cls 标记每个网络包以供CGroup方便使用。 net_prio 提供接口以供动态调节程序的网络传输优先级。 perf_event

关于容器技术

不羁的心 提交于 2019-12-02 16:12:53
容器技术主要包括Namespace和Cgroup这两个内核特性 Namespace又称为命名空间(也可翻译为名字空间),它主要做访问隔离,其原理是针对一类资源进行抽象,并将其封装在一起提供一个容器使用,对于这类资源,因为每个容器都有自己的抽象,而它们彼此之间是不可见的,所以就可以做到访问隔离。 Cgroup是contrl group简称,又称为控制组,它主是要做资源控制,其原理是将一组进程放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的。 容器组成 容器=cgroup+namespace+rootfs+容器引擎(用户太工具) Cgroup:资源控制 Namesapce:访问隔离 rootfs:文件系统隔离 容器引擎:生命令周期控制 Cgroup介绍 Cgroup中实现的子系统及其作用如下 devices:设备权限控制 cpuset:分配指定的CPU和内存节点 cpu:控制CPU占用率 cpuacct:统计CPU使用情况 memory:限制内存的使用上限 freezer:冻结(暂停)Cgroup中的进程 net_cls:配合tc(traffic controller)限制网络带宽 net_prio:设置进程的网络流量优先级 huge_tlb:限HugeTLB的使用 perf_event:允许Perf工具基于Cgroup分组做性能监测