前言

简单的整理一下一些基本概念。

正文

简单运行一个容器:

创建一个容器:

docker run -it busybox /bin/bash

然后看下进程:

ps -ef

做了一个障眼法,使用的是pid namespace方式,让容器内部只能看到由容器创建的进程。

linux 还有一些其他的机制:

比如,Mount Namespace,用于让被隔离进程只看到当前 Namespace 里的挂载点信

息;Network Namespace,用于让被隔离进程看到当前 Namespace 里的网络设备和配

置。

现在隔离了一些资源,似乎能让新启动的进程,只能使用被容器规范起来的资源。

但是有一个问题,那就是把资源分配出去了,到底分配多少资源。

主要是几大块吧,内存、cpu、磁盘。

Linux Cgroups 就是 Linux 内核中用来为进程设置资源限制的一个重要功能。

Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程

组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。

举个例子

查看cgroup 限制:

mount -t cgroup

有这些限制:

举个限制cpu的例子:

进入限制cpu的目录下:

创建一个组,比如mkdir container:

改下两个参数:

echo 20000 > cpu.cfs_quota_us

限制100ms 内只能使用20ms。

现在运行一个进程:

看下cpu:

100% 了,现在限制一下这个进程的cpu。

echo 3121 > tasks

再看下cpu:

现在kill 3121

除 CPU 子系统外,Cgroups 的每一项子系统都有其独有的资源限制能力,比如:

blkio,为 块 设 备 设 定 I/O 限 制,一般用于磁盘等设备;

cpuset,为进程分配单独的 CPU 核和对应的内存节点;

memory,为进程设定内存使用的限制。

Linux Cgroups 的设计还是比较易用的,简单粗暴地理解呢,它就是一个子系统目录加上

一组资源限制文件的组合。而对于 Docker 等 Linux 容器项目来说,它们只需要在每个子

系统下面,为每个容器创建一个控制组(即创建一个新目录),然后在启动容器进程之后,

把这个进程的 PID 填写到对应控制组的 tasks 文件中就可以了。

例如:

 docker run -it --cpu-period=100000 --cpu-quota=20000 busybox /bin/sh

这样就限制了。

来看下限制:

进去查看:

大概就是这么回事了。

linux 容器化优势不多说,用的自然知道,节约能源,方便使用。

弊端:

  1. 在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的,最典型的例子就

    是:时间。
  2. 众所周知,Linux 下的 /proc 目录存储的是记录当前内核运行状态的一系列特殊文件,用户

    可以通过访问这些文件,查看系统以及当前正在运行的进程的信息,比如 CPU 使用情况、

    内存占用率等,这些文件也是 top 指令查看系统信息的主要数据来源。

    但是,你如果在容器里执行 top 指令,就会发现,它显示的信息居然是宿主机的 CPU 和内

    存数据,而不是当前容器的数据。

    造成这个问题的原因就是,/proc 文件系统并不知道用户通过 Cgroups 给这个容器做了什

    么样的资源限制,即:/proc 文件系统不了解 Cgroups 限制的存在。

    在生产环境中,这个问题必须进行修正,否则应用程序在容器里读取到的 CPU 核数、可用

    内存等信息都是宿主机上的数据,这会给应用的运行带来非常大的困惑和风险。这也是在企

    业中,容器化应用碰到的一个常见问题,也是容器相较于虚拟机另一个不尽如人意的地方。

k8s 深入篇———— docker 是什么[一]的更多相关文章

  1. docker+k8s基础篇五

    Docker+K8s基础篇(五) service资源介绍 A:service资源的工作特性 service的使用 A:service字段介绍 B:ClusterIP的简单使用 C:NodePort的简 ...

  2. docker+k8s基础篇四

    Docker+K8s基础篇(四) pod控制器 A:pod控制器类型 ReplicaSet控制器 A:ReplicaSet控制器介绍 B:ReplicaSet控制器的使用 Deployment控制器 ...

  3. docker+k8s基础篇三

    Docker+K8s基础篇(三) kubernetes上的资源 A:k8s上的常用资源 Pod的配置清单 A:Pod上的清单定义 B:Pod创建资源的方法 C:spec下其它字段的介绍 Pod的生命周 ...

  4. docker+k8s基础篇二

    Docker+K8s基础篇(二) docker的资源控制 A:docker的资源限制 Kubernetes的基础篇 A:DevOps的介绍 B:Kubernetes的架构概述 C:Kubernetes ...

  5. docker+k8s基础篇一

    Docker+K8s基础篇(一) docker的介绍 A:为什么是docker B:k8s介绍 docker的使用 A:docker的安装 B:docker的常用命令 C:docker容器的启动和操作 ...

  6. 【Docker】第一篇 Docker的初始化安装部署

    一.Docker基础 Dacker倡导的理念:一个容器一个进程 Docker的版本了解: Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人 ...

  7. 国内不fq安装K8S一: 安装docker

    目录 1.安装docker 1.1 准备工作 1.2 安装docker 1.3 修改cgroup 国内不fq安装K8S一: 安装docker 国内不fq安装K8S二: 安装kubernet 国内不fq ...

  8. devops-4:Jenkins基于k8s cloud和docker cloud动态增减节点

    Jenkins管理动态节点 上文介绍Jenkins增加静态agent的步骤,除了静态增加外,还有动态管理的功能,两者最大的差异在于动态可以在有job运行时,临时加入一个agent到jenkins ma ...

  9. 微服务探索之路03篇-docker私有仓库Harbor搭建+Kubernetes(k8s)部署私有仓库的镜像

    ❝ 目录: 微服务探索之路01篇.net6.0项目本地win10系统docker到服务器liunx系统docker的贯通 微服务探索之路02篇liunx ubuntu服务器部署k8s(kubernet ...

  10. 【K8S】基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境(环境搭建篇)

    写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 服务器规划 IP 主机名 节点 操作 ...

随机推荐

  1. 新零售SaaS架构:订单履约系统架构设计(万字图文总结)

    什么是订单履约系统? 订单履约系统用来管理从接收客户订单到将商品送达客户手中的全过程. 它连接了上游交易(客户在销售平台下单环)和下游仓储配送(如库存管理.物流配送),确保信息流顺畅.操作协同,提升整 ...

  2. redis---面经

    redis 偏应用的总结:redis 应用 Redis是什么? Redis是什么 对象 字符串 自增,键值对. SDS数据结构记录长度,已经使用,和总共长度,并且提前多余出容量,防止一直扩容缩容. 字 ...

  3. Python面向对象之面向对象编程

    [一]什么是面向过程 [1]面向过程介绍 面向过程,核心在于 "过程" 二字 过程的终极奥义就是将程序 "流程化" 过程是 "流水线" ,用 ...

  4. win10 vscode 设置 快捷键 ctrl + , ctrl + COMMA 与搜狗输入法 切换方法快捷键 冲突

    win10 vscode 快捷键 ctrl + , ctrl + COMMA 与搜狗输入法 切换方法快捷键 冲突 没想到是在系统里面 Step. 1: 选择切换语音 Step. 2: 选择 键盘 St ...

  5. C++数值类型与string、CString之间的转换

    目录 数值范围 数值类型与string互相转换 数值类型转换为string 使用函数模板+ostringstream 使用标准库函数std::to_string() string转换为数值类型 使用函 ...

  6. 基于ads1299神经信号采集之调试总结和备忘

    前记  ads129x系列芯片在生理信号采集这块应用十分广泛,也是一个不可或缺的芯片.最近几个项目用到它,算是从一个陌生到熟悉的过程吧,这个过程踩过不少坑,中间经历过很多比较大的问题困扰和折磨,花费了 ...

  7. 从null-ls归档再看nvim的代码格式化与lint方案

    由于null-lsp的归档和暂停更新,我们需要重新审视并思考还有哪些架构简单易于理解的插件配置方案.本文将介绍脱离null-ls插件体系下的代码格式化和lint的插件配置方案. 在之前的文章中< ...

  8. 【个人笔记】VirtualBox7+Debian11基础环境搭建

    本文主要是对在最新的VirtualBox7上搭建Debian11的笔记记录,方便后续个人回顾,同时搭配对配置的浅析. sudoers配置 非root用户想要使用sudo命令,需要两个条件: 系统安装了 ...

  9. 3DCAT荣获2021金陀螺“年度XR行业技术创新奖”“年度优秀VR行业应用奖”两项大奖

    作为年度行业影响力大奖,第六届金陀螺颁奖典礼与2021未来商业生态链接大会(简称"FBEC2021")同期举办.金陀螺奖金陀螺奖旨在对优质作品/项目及优秀企业做出嘉奖,鼓励创业者. ...

  10. LiveData详细分析

    目录介绍 01.LiveData是什么东西 02.使用LiveData的优势 03.使用LiveData的步骤 04.简单使用LiveData 05.observe()和observerForever ...