首页 > 其他分享 >k8s 深入篇———— docker 是什么[一]

k8s 深入篇———— docker 是什么[一]

时间:2023-06-17 19:44:10浏览次数:40  
标签:容器 限制 CPU 深入 Linux 进程 docker k8s cpu

前言

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

正文

简单运行一个容器:

创建一个容器:

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 核数、可用
    内存等信息都是宿主机上的数据,这会给应用的运行带来非常大的困惑和风险。这也是在企
    业中,容器化应用碰到的一个常见问题,也是容器相较于虚拟机另一个不尽如人意的地方。

标签:容器,限制,CPU,深入,Linux,进程,docker,k8s,cpu
From: https://www.cnblogs.com/aoximin/p/17488096.html

相关文章

  • 小tips:docker 配置国内镜像地址
    在配置文件daemon.json中添加国内镜像,让其下载加速。vi/etc/docker/daemon.json如下国内镜像:{"registry-mirrors":["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]d......
  • How to enable auto restart of a docker container on system reboot ?
    Howtoenableautorestartofadockercontaineronsystemreboot ?https://amalgjose.com/2021/02/12/how-to-enable-auto-restart-of-a-docker-container-on-system-reboot/#:~:text=How%20to%20enable%20auto%20restart%20of%20a%20docker,Ensure%20the%20docker%20co......
  • 06. centos7使用docker方式安装gitlab
    gitlab初体验,使用docker进行快速安装,遇到了端口修改不生效的问题,在此记录一下。在正式环境中,gitlab的容器版,应该使用postgresql,redis,gitlab三个组件,使用标准的80端口,提供稳定且有性能的企业服务。但如果是在测试环境,或是想在一个机器上运行多个服务,则gitlab不一定能......
  • 保障网络安全与提升爬虫效率:深入探究IP代理技术
    在当今数字化时代,网络安全和数据获取效率是互联网应用中至关重要的两个方面。为了满足这些需求,IP代理技术应运而生。本文将着重介绍socks5和HTTP代理协议,以及如何编写高效的爬虫程序来保障网络安全和提升爬虫效率。IP代理是一种中间服务器,它允许用户通过代理服务器访问互联网资源,同......
  • 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器
    专栏简介本专栏将带领您进入Docker的世界。您是否对Docker有所耳闻?那么,您是否知道使用Docker可以带来什么样的好处呢?如果您还不了解Docker,不用担心,让我们一起探索这个神奇的世界吧!DockerDocker最初是dotCloud公司内部项目,由SolomonHykes在法国创立。它基于dotCloud公司多年......
  • 使用Docker将Vite Vue项目部署到Nginx二级目录
    Vue项目配置使用Vite创建一个Vue项目,点我查看如何创建配置打包路径在Nginx中如果是二级目录,例如/web时,需要设置线上的打包路径在项目跟路径下创建两个文件:.env.production、.env.development,写入一下内容:##生产环境NODE_ENV='production'VITE_BASE_PATH=/form-design......
  • linux环境安装docker
    卸载Dockeryumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate......
  • 深入解析代理IP技术:保障网络安全与爬虫效率
    本文将深入探讨代理IP技术在网络安全和爬虫效率方面的应用。我们将介绍代理IP的基本概念、常见类型(包括socks5和HTTP代理),以及如何编写高效的爬虫程序。通过了解和应用这些技术,我们能够更好地保护我们的网络安全,并提高爬虫工作的效率。在当今数字化时代,互联网已经成为人们生活中不可......
  • Docker 安装 MySQL8 数据库
    创建数据卷mkdir-p/usr/mysql/conf/usr/mysql/datachmod-R755/usr/mysql/创建配置文件vim/usr/mysql/conf/my.cnf:[client]#socket=/usr/mysql/mysqld.sockdefault-character-set=utf8mb4[mysqld]#pid-file=/var/run/mysqld/mysqld.pid#socket......
  • Docker 安装与升级
    卸载旧版本sudoyumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine/var/lib/docker/的内容,包括image、container、volumes,andnetworks,将被保留。Docker引擎包现在被......