cgroups

《Docker容器与容器云》读书笔记

谁都会走 提交于 2020-04-26 23:38:19
云计算平台 云计算是一种资源的服务模式,该模式可以实现随时随地、便捷按需地从可配置计算资源共享池中获取所需资源(如网络、服务器、存储、应用及服务),资源能够快速供应并释放,大大减少了资源管理工作开销。 Docker Docker 是以 Docker 容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。它是一个跨平台、可移植并且简单易用的容器解决方案。 Docker 的源代码托管在 GitHub 上,基于 Go 语言开发并遵从 Apache 2.0 协议。 Docker 可在容器内部快速自动化地部署应用,并通过操作系统内核技术( namespace 、 cgroups 等)为容器提供资源隔离与安全保障。 持续部署与测试:开发人员使用镜像镜像实现标准开发环境的构建,开发完成后通过封装着完整环境和应用的镜像进行迁移。 跨平台支持 环境标准化和版本控制 高资源利用率与隔离:容器没有管理程序的额外开销,与底层共享操作系统,系统负载更低 容器跨平台性与镜像:构建一次,到处运行 易于理解且易用 应用镜像仓库 容器云 容器云以容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员提供用于构建、发布和运行分布式应用的平台。当容器云专注于资源共享与隔离、容器编排与部署时,它更接近传统的 IaaS

Docker底层基石namespace与cgroup

有些话、适合烂在心里 提交于 2020-04-26 23:36:10
容器本质上是把系统中为同一个业务目标服务的相关进程合成一组,放在一个叫做namespace的空间中,同一个namespace中的进程能够互相通信,但看不见其他namespace中的进程。每个namespace可以拥有自己独立的主机名、进程ID系统、IPC、网络、文件系统、用户等等资源。在某种程度上,实现了一个简单的虚拟:让一个主机上可以同时运行多个互不感知的系统。 此外,为了限制namespace对物理资源的使用,对进程能使用的CPU、内存等资源需要做一定的限制。这就是Cgroup技术,Cgroup是Control group的意思。比如我们常说的4c4g的容器,实际上是限制这个容器namespace中所用的进程,最多能够使用4核的计算资源和4GB的内存。 简而言之,Linux内核提供namespace完成隔离,Cgroup完成资源限制。namespace+Cgroup构成了容器的底层技术(rootfs是容器文件系统层技术)。 namespace 一个namespace把一些全局系统资源封装成一个抽象体,该抽象体对于本namespace中的进程来说有它们自己的隔离的全局资源实例。改变这些全局资源对于该namespace中的进程是可见的,而对其他进程来说是不可见的。 Linux 提供一下几种 namespaces: Namespace Constant Isolates - IPC

第一章:云原生基础

℡╲_俬逩灬. 提交于 2020-04-26 23:11:05
目录 第一章:云原生基础 1,云原生技术发展简史 2,发展现状 3,云原生的技术范畴 5,云原生关键技术点 1,云原生技术发展简史 2004 年— 2007 年,Google 已在内部大规模地使用像 Cgroups 这样的容器技术; 2008 年,Google 将 Cgroups 合并进入了 Linux 内核主干; 2013 年,Docker 项目正式发布。 2014 年,Kubernetes 项目也正式发布。这样的原因也非常容易理解,因为有了容器和 Docker 之后,就需要有一种方式去帮助大家方便、快速、优雅地管理这些容器,这就是 Kubernetes 项目的初衷。在 Google 和 Redhat 发布了 Kubernetes 之后,这个项目的发展速度非常之快。 2015 年,由Google、Redhat 以及微软等大型云计算厂商以及一些开源公司共同牵头成立了 CNCF 云原生基金会。CNCF 成立之初,就有 22 个创始会员,而且 Kubernetes 也成为了 CNCF 托管的第一个开源项目。在这之后,CNCF 的发展速度非常迅猛; 2017 年,CNCF 达到 170 个成员和 14 个基金项目; 2018 年,CNCF 成立三周年有了 195 个成员,19 个基金会项目和 11 个孵化项目,如此之快的发展速度在整个云计算领域都是非常罕见的。 2,发展现状 CNCF

docker深入学习

纵饮孤独 提交于 2020-04-20 07:07:19
docker深入学习 一、容器的介绍和容器的发展史 为什么要学习容器? 在openstack之后,目前互联网最火热的技术莫过于docker容器了,早在2015年,京东技术备战双11就是使用了10万+Docker,这两年docker更是如日中天。docker只是容器的一种,在学习docker之前,我有必要先了解一下什么是容器?有助于我们更好的了解docker。 什么是容器: 容器是在隔离的环境里面运行的一个进程,这个隔离的环境有自己的系统目录文件,有自己的ip地址,主机名等。 也有人称:容器是一种轻量级虚拟化的技术。 容器相对于kvm虚拟机的优势: 1:容器能提供接近宿主机的性能,而kvm虚拟机会损害一部分宿主机的性能; 2:同样硬件配置的宿主机最多能启动10虚拟机,那么它可以启动100+容器; 3:启动一台kvm虚拟机,可以能需要20秒,启动一个容器只需要1秒; 4:kvm需要硬件cpu的支持,容器不需要; linux开机启动流程: bios开机硬件自检 根据bios设置的优先启动项 读取mbr引导 加载内核 启动第一个进程/sbin/init 执行系统初始化脚本/etc/rc.d/rc.sysinit 完成系统初始化 运行想要的服务sshd 总结:kvm虚拟机运行一个sshd服务需要完整的开机启动流程,容器是直接启动sshd服务,中间的流程全部精简。(docker共用宿主机内核。

docker深入学习

丶灬走出姿态 提交于 2020-04-19 17:42:22
docker深入学习 一、容器的介绍和容器的发展史 为什么要学习容器? 在openstack之后,目前互联网最火热的技术莫过于docker容器了,早在2015年,京东技术备战双11就是使用了10万+Docker,这两年docker更是如日中天。docker只是容器的一种,在学习docker之前,我有必要先了解一下什么是容器?有助于我们更好的了解docker。 什么是容器: 容器是在隔离的环境里面运行的一个进程,这个隔离的环境有自己的系统目录文件,有自己的ip地址,主机名等。 也有人称:容器是一种轻量级虚拟化的技术。 容器相对于kvm虚拟机的优势: 1:容器能提供接近宿主机的性能,而kvm虚拟机会损害一部分宿主机的性能; 2:同样硬件配置的宿主机最多能启动10虚拟机,那么它可以启动100+容器; 3:启动一台kvm虚拟机,可以能需要20秒,启动一个容器只需要1秒; 4:kvm需要硬件cpu的支持,容器不需要; linux开机启动流程: bios开机硬件自检 根据bios设置的优先启动项 读取mbr引导 加载内核 启动第一个进程/sbin/init 执行系统初始化脚本/etc/rc.d/rc.sysinit 完成系统初始化 运行想要的服务sshd 总结:kvm虚拟机运行一个sshd服务需要完整的开机启动流程,容器是直接启动sshd服务,中间的流程全部精简。(docker共用宿主机内核。

Linux性能之CPU优化

廉价感情. 提交于 2020-04-09 18:14:43
CPU优化 我们接下来从应用程序和系统的角度,分别来看看如何才能降低 CPU 使用率,提高 CPU 的并行处理能力。 应用程序优化 首先,从应用程序的角度来说,降低 CPU 使用率的最好方法当然是,排除所有不必要的工作,只保留最核心的逻辑。比如减少循环的层次、减少递归、减少动态内存分配等等。除此之外,应用程序的性能优化也包括很多种方法,我在这里列出了最常见的几种,你可以记下来。 编译器优化:很多编译器都会提供优化选项,适当开启它们,在编译阶段你就可以获得编译器的帮助,来提升性能。比如, gcc 就提供了优化选项 -O2,开启后会自动对应用程序的代码进行优化。 算法优化:使用复杂度更低的算法,可以显著加快处理速度。比如,在数据比较大的情况下,可以用 O(nlogn) 的排序算法(如快排、归并排序等),代替 O(n^2) 的排序算法(如冒泡、插入排序等)。 异步处理:使用异步处理,可以避免程序因为等待某个资源而一直阻塞,从而提升程序的并发处理能力。比如,把轮询替换为事件通知,就可以避免轮询耗费 CPU 的问题。 多线程代替多进程:前面讲过,相对于进程的上下文切换,线程的上下文切换并不切换进程地址空间,因此可以降低上下文切换的成本。 善用缓存:经常访问的数据或者计算过程中的步骤,可以放到内存中缓存起来,这样在下次用时就能直接从内存中获取,加快程序的处理速度。 系统优化 从系统的角度来说

利用 cgroup 的 cpuset 控制器限制进程的 CPU 使用

十年热恋 提交于 2020-04-06 21:29:32
最近在做一些性能测试的事情,首要前提是控制住 CPU 的使用量。最直观的方法无疑是安装 Docker,在每个 配置 了参数的容器里运行基准程序。 对于计算密集型任务,在只限制 CPU 的需求下,直接用 Linux 原生的 cgroup 功能来限制 CPU 使用无疑是最方便的。 本文简要说明如何使用 cgroup 的 cpuset 控制器限制进程只使用某几个 CPU,更准确的说是某个几个逻辑核。 1. 查看 CPU 配置 常用的配置可以用如下 BASH 命令查看。 1 2 3 cat /proc/cpuinfo | grep "physical id" | sort | uniq # 查看物理 CPU 数量 cat /proc/cpuinfo | grep "cores" | uniq # 查看每块 CPU 的核心数 cat /proc/cpuinfo | grep "processor" | wc -l # 查看主机总的逻辑线程数 特别地,启用了超线程的话,每个 CPU 物理核心会模拟出 2 个线程,也叫逻辑核。判断方式如下: 1 是否开启超线程 = 物理 CPU 数量 * 每块 CPU 核心数 / 总逻辑线程数 == 2 2. 什么是 NUMA 这里提到一个概念叫 NUMA ,主机板上如果插有多块 CPU 的话,那么就是 NUMA 架构。每块 CPU 独占一块面积

Docker 运行时的用户与组管理的方法

微笑、不失礼 提交于 2020-04-06 20:51:21
docker 以进程为核心, 对系统资源进行隔离使用的管理工具. 隔离是通过 cgroups (control groups 进程控制组) 这个操作系统内核特性来实现的. 包括用户的参数限制、 帐户管理、 资源(CPU,内存,磁盘I/O,网络)使用的隔离等. docker 在运行时可以为容器内进程指定用户和组. 没有指定时默认是 root .但因为隔离的原因, 并不会因此丧失安全性. 传统上, 特定的应用都以特定的用户来运行, 在容器内进程指定运行程序的所属用户或组并不需要在 host 中事先创建. 进程控制组cgroups主要可能做以下几件事: 资源限制 组可以设置为不超过配置的内存限制, 其中还包括文件系统缓存 优先级 某些组可能会获得更大的 CPU 利用率份额或磁盘 i/o 吞吐量 帐号会计 度量组的资源使用情况, 例如, 用于计费的目的 控制 冻结组进程, 设置进程的检查点和重新启动 与 cgroups(控制进程组) 相关联的概念是 namespaces (命令空间). 命名空间主要有六种名称隔离类型: PID 命名空间为进程标识符 (PIDs) 的分配、进程列表及其详细信息提供了隔离。 虽然新命名空间与其他同级对象隔离, 但其 "父 " 命名空间中的进程仍会看到子命名空间中的所有进程 (尽管具有不同的 PID 编号)。 网络命名空间隔离网络接口控制器 (物理或虚拟)

kubernetes集群安装指南:docker-ce部署

半世苍凉 提交于 2020-04-06 18:18:29
docker是POD基本运行环境,kubernetes默认以dockerd作为runtime运行引擎,在安装docker-ce前必须先升级内核到最新lts版,这是因为为了让docker-ce支持数据存储类型overlay2,这里将会以二进制文件方式部署在所有的worker节点上部署docker-ce。 1. 准备工作 #################### Variable parameter setting ###################### DOCKER_INSTALL_PATH=/data/apps/k8s/docker SOFTWARE=/root/software VERSION=18.09.6 PACKAGE=docker-${VERSION}.tgz DOWNLOAD_URL=https://download.docker.com/linux/static/stable/x86_64/$PACKAGE MIRRORS1=https://docker.mirrors.ustc.edu.cn MIRRORS2=https://registry-mirrors.mo9.com USER=docker 2. 安装docker 准备docker-ce安装环境 # 1.Uninstall the original docker installation package