k8s 深入篇———— docker 是什么[一]
前言
简单的整理一下一些基本概念。
正文
简单运行一个容器:
创建一个容器:
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 容器化优势不多说,用的自然知道,节约能源,方便使用。
弊端:
- 在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的,最典型的例子就
是:时间。 - 众所周知,Linux 下的 /proc 目录存储的是记录当前内核运行状态的一系列特殊文件,用户
可以通过访问这些文件,查看系统以及当前正在运行的进程的信息,比如 CPU 使用情况、
内存占用率等,这些文件也是 top 指令查看系统信息的主要数据来源。
但是,你如果在容器里执行 top 指令,就会发现,它显示的信息居然是宿主机的 CPU 和内
存数据,而不是当前容器的数据。
造成这个问题的原因就是,/proc 文件系统并不知道用户通过 Cgroups 给这个容器做了什
么样的资源限制,即:/proc 文件系统不了解 Cgroups 限制的存在。
在生产环境中,这个问题必须进行修正,否则应用程序在容器里读取到的 CPU 核数、可用
内存等信息都是宿主机上的数据,这会给应用的运行带来非常大的困惑和风险。这也是在企
业中,容器化应用碰到的一个常见问题,也是容器相较于虚拟机另一个不尽如人意的地方。
k8s 深入篇———— docker 是什么[一]的更多相关文章
- docker+k8s基础篇五
Docker+K8s基础篇(五) service资源介绍 A:service资源的工作特性 service的使用 A:service字段介绍 B:ClusterIP的简单使用 C:NodePort的简 ...
- docker+k8s基础篇四
Docker+K8s基础篇(四) pod控制器 A:pod控制器类型 ReplicaSet控制器 A:ReplicaSet控制器介绍 B:ReplicaSet控制器的使用 Deployment控制器 ...
- docker+k8s基础篇三
Docker+K8s基础篇(三) kubernetes上的资源 A:k8s上的常用资源 Pod的配置清单 A:Pod上的清单定义 B:Pod创建资源的方法 C:spec下其它字段的介绍 Pod的生命周 ...
- docker+k8s基础篇二
Docker+K8s基础篇(二) docker的资源控制 A:docker的资源限制 Kubernetes的基础篇 A:DevOps的介绍 B:Kubernetes的架构概述 C:Kubernetes ...
- docker+k8s基础篇一
Docker+K8s基础篇(一) docker的介绍 A:为什么是docker B:k8s介绍 docker的使用 A:docker的安装 B:docker的常用命令 C:docker容器的启动和操作 ...
- 【Docker】第一篇 Docker的初始化安装部署
一.Docker基础 Dacker倡导的理念:一个容器一个进程 Docker的版本了解: Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人 ...
- 国内不fq安装K8S一: 安装docker
目录 1.安装docker 1.1 准备工作 1.2 安装docker 1.3 修改cgroup 国内不fq安装K8S一: 安装docker 国内不fq安装K8S二: 安装kubernet 国内不fq ...
- devops-4:Jenkins基于k8s cloud和docker cloud动态增减节点
Jenkins管理动态节点 上文介绍Jenkins增加静态agent的步骤,除了静态增加外,还有动态管理的功能,两者最大的差异在于动态可以在有job运行时,临时加入一个agent到jenkins ma ...
- 微服务探索之路03篇-docker私有仓库Harbor搭建+Kubernetes(k8s)部署私有仓库的镜像
❝ 目录: 微服务探索之路01篇.net6.0项目本地win10系统docker到服务器liunx系统docker的贯通 微服务探索之路02篇liunx ubuntu服务器部署k8s(kubernet ...
- 【K8S】基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境(环境搭建篇)
写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 服务器规划 IP 主机名 节点 操作 ...
随机推荐
- C++ //list容器 构造函数 //list赋值和交换 //list容器大小操作 //list插入和删除,移除 //清空 //list数据存取back(); front() //list 反转和排序
1 //list容器 构造函数 //list赋值和交换 //list容器大小操作 2 //list插入和删除,移除 //清空 //list数据存取back(); front() 3 //list 反转 ...
- 出海业务如何搭建国内也能快速访问的https网站与接口(无需备案)
背景信息 由于最近在搭建我的出海网站 https://www.idatariver.com/zh-cn , 感兴趣的可以看看. 其中一个环节便是给后端API接口加上ssl,毕竟http看着不如http ...
- 如何下载RTMP/http直播源直播视频(比尔下载器使用完整教程)
之前已经介绍了如何抓取各种app直播源及在线视频地址,本节内容将详细介绍如何下载rtmp/http直播源的直播视频,请注意,rtmp/http指协议,不针对任何app,凡是使用了以上协议的基本原理一样 ...
- 3DCAD图纸转2D(DXF)图纸通用解决方案文稿
本文地址:https://gitee.com/dvaloveu/lovedva/issues/I6B5YC 视频演示(1.25倍速&原速):Acfun Bilibili 脚本地址:https: ...
- SyntaxError: invalid property id(就是不支持ES6) (浏览器不支持对象...展开)
SyntaxError: invalid property id(就是不支持ES6) (浏览器不支持对象...展开) 火狐55以后支持
- tapable - webpack 的 hooks - getAc - 异步流程控制
tapable - webpack 的 hooks,类似自己的 getAc 官方地址 https://www.npmjs.com/package/tapable 随便找了篇文章:聊聊 Webpack ...
- 后端基础PHP-PHP简介及基本函数
后端基础PHP-PHP简介及基本函数 1.PHP简单介绍 2.PHP基本语法 一.PHP简单介绍 PHP(超文本预处理器),是一种通用的开源脚本语言,标准的后端语言 比较常见的后端语言,ASP|ASP ...
- 基于Rust的Tile-Based游戏开发杂记(01)导入
什么是Tile-Based游戏? Tile-based游戏是一种使用tile(译为:瓦片,瓷砖)作为基本构建单位来设计游戏关卡.地图或其他视觉元素的游戏类型.在这样的游戏中,游戏世界的背景.地形.环境 ...
- 3DCAT为3D应用在云端构筑一个可靠的家
保护知识产权,一直是数字化长期关注的议题,如何保护应用内的数字化资产(文字.图片.音频.视频.模型)等,是当今行业的难题,只要运行在Windows环境的三维应用,都可能面临被破解提取出资产,为原创版权 ...
- Linux快速入门(五)Linux系统管理
top top命令相当于任务管理器.在top命令中,可以使用M,将进程列表按内存使用排序,使用P将进程列表按照CPU的使用情况排序,输入q退出. (1)第一行是任务队列信息,显示系统时间.运行时间.当 ...