05 :从进程说起

1、容器本身没有价值,有价值的是"容器编排"

2、什么是进程?

一旦"程序"被执行起来,它就从磁盘上的二进制文件,变成

  1. 1、计算机内存中的数据
  2. 2、寄存器里的值
  3. 3、堆栈中的指令
  4. 4、被打开的文件
  5. 5、以及各种设备的状态信息的一个集合。

像这样一个程序运行起来后的计算机执行环境的综合,就是我们今天的主角:进程

3、容器技术的核心功能:

1、就是通过约束和修改进程的动态表现,从而为其创造出一个"边界"

2、Cgroups 技术是用来制造约束的主要手段

3、Namespace 技术则是用来修改进程视图的主要方法。

4、Linux容器最基本的实现原理了

  1. [root@luoahong ~]# docker run -it busybox /bin/sh
  2. Unable to find image 'busybox:latest' locally
  3. latest: Pulling from library/busybox
  4. 57c14dd66db0: Pull complete
  5. Digest: sha256:7964ad52e396a6e045c39b5a44438424ac52e12e4d5a25d94895f2058cb863a0
  6. Status: Downloaded newer image for busybox:latest
  7. / # ps
  8. PID USER TIME COMMAND
  9. 1 root 0:00 /bin/sh
  10. 6 root 0:00 ps

请帮我启动一个容器,在容器里执行 /bin/sh,并且给我分配一个命令行终端跟这个容器交互

本来,每当我们在宿主机上运行了一个 /bin/sh 程序,操作系统都会给他分配一个进程编号,比如PID=100
这个编号是进程的唯一标识,就像员工的工牌一样,所以PID=100,可以粗略地理解为这个/bin/sh是我们公司里的第
100号员工,而第1号员工就自然是比尔 · 盖茨这样统领全局的人物。

而除了我们刚刚用到的 PID Namespace,Linux操作系统还提供了 Mount、UTS、IPC、
Network 和 User 这些 Namespace用来对各种不同的进程上下文进行“障眼法”操作

5、容器,其实是一种特殊的进程而已

实际上是在创建容器进程时,指定了这个进程所需要启用的一组 Namespace 参数。这样,容器就只能“看”到当前
Namespace 所限定的资源、文件、设备、状态,或者配置而对于宿主机以及其他不相关的程序,它就完全看不到了。

6、容器和虚拟机的比较

这时,这些进程就会觉得自己是各自 PID Namespace,里的第 1 号进程,只能看到各自 Mount Namespace里挂载

用来对各种不同的进程上下文进行“障眼法”操作

06 :隔离与限制

Namespace 技术实际上修改了应用进程看待整个计算机"视图"被操作系统做了限制,只能"看到"某些指定的内容

1、容器相对于虚拟机最大的优势是?

“敏捷”和“高性能”是容器相较于虚拟机最大的优势,也是它能够在 PaaS 这种更细粒度的资源管理平台上大行其道的重要原因

优点:“敏捷”和“高性能”
缺点:隔离的不彻底

不能被Namespace 化的资源和对象 比如时间

2、限制

1、Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等

  1. [root@luoahong container]# pwd
  2. /sys/fs/cgroup/cpu/container
  3. [root@luoahong container]# while : ; do : ; done &
  4. [1] 1447
  5. [root@luoahong container]# cat /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us
  6. -1
  7. [root@luoahong container]# cat /sys/fs/cgroup/cpu/container/cpu.cfs_period_us
  8. 100000
  9. [root@luoahong container]# echo 20000 > /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us
  10. [root@luoahong container]# echo 1447 > /sys/fs/cgroup/cpu/container/tasks

2、Linux Cgroups 的设计还是比较易用的,简单粗暴地理解呢,它就是一个子系统目录加上一组资源限制文件的组合

  1. docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash
  2.  
  3. $ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_period_us
  4. 100000
  5. $ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_quota_us
  6. 20000

3、容器是一个单进程模型

  1. [root@k8s-master ~]# docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash
  2. root@beac9236771e:/# cd /sys/fs/cgroup/cpu/
  3. root@beac9236771e:/sys/fs/cgroup/cpu# ls
  4. cgroup.clone_children cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat cpuacct.usage notify_on_release
  5. cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares cpuacct.stat cpuacct.usage_percpu tasks
  6. root@beac9236771e:/sys/fs/cgroup/cpu# cat cpu.cfs_period_us
  7. 100000
  8. root@beac9236771e:/sys/fs/cgroup/cpu# cat cpu.cfs_quota_us
  9. 20000
  10. root@beac9236771e:/sys/fs/cgroup/cpu# pwd
  11. /sys/fs/cgroup/cpu
  12.  
  13. $ mount -l | grep tmpfs
  14. none on /tmp type tmpfs (rw,relatime)
  15.  
  16. [root@k8s-master cpu]# mount -l | grep tmpfs
  17. devtmpfs on /dev type devtmpfs (rw,nosuid,size=1006112k,nr_inodes=251528,mode=755)
  18. tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
  19. tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
  20. tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
  21. tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=203192k,mode=700)

这就意味着这个 Docker 容器,只能使用到 20% 的cpu带宽

深入剖析Kubernetes学习笔记:容器基础(05-06)的更多相关文章

  1. 深入剖析Kubernetes学习笔记:开篇词(00)

    一.关于Kubernetes初学的疑惑 就在这场因"容器"而起的技术变革中,kubernetes项目已经成为容器技术的事实标准,重新定义了基础设置领域对应用编排与管理的种种可能 1 ...

  2. 深入剖析Kubernetes学习笔记:预习篇(01-04)

    01 初出茅庐 1.PaaS 项目被大家接纳的一个主要原因? 就是它提供了一种名叫"应用托管". 2.像 Cloud Foundry 这样的 PaaS 项目,最核心的组件是? 一套 ...

  3. 深入剖析Kubernetes学习笔记:深入理解镜像(08)

    一.Python 应用案例环境 [root@k8s-node1 Flask]# pwd /opt/Dockerfile/Flask [root@k8s-node1 Flask]# ll total 1 ...

  4. 深入剖析Kubernetes学习笔记:深入理解镜像(07)

    一.容器里的进程看到的文件系统又是什么样子呢? 1.你会看到好多宿主机的文件 [root@k8s-master ~]# vim ns.c [root@k8s-master ~]# gcc -o nl ...

  5. Kubernetes 学习笔记(一):基础概念

    个人笔记,仅本人查阅使用,不保证正确. 零.微服务 微服务架构专注于应用解耦合,通过将应用彻底地组件化和服务化,每个微服务只包含一个非常小的功能,比如权限管理.日志收集等等.由这一组微服务组合起来,提 ...

  6. Kubernetes学习笔记(八):Deployment--声明式的升级应用

    概述 本文核心问题是:如何升级应用. 对于Pod的更新有两种策略: 一是删除全部旧Pod之后再创建新Pod.好处是,同一时间只会有一个版本的应用存在:缺点是,应用有一段时间不可用. 二是先创建新Pod ...

  7. bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111

    基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...

  8. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  9. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

随机推荐

  1. Retrofit+MVP框架封装记录篇

    当下最流行的网络请求组合,retrofit2+okhttp+rxjava+mvp 这里是封装记录篇 首先分模块,比如登录 先来说封装后的使用 package com.fragmentapp.login ...

  2. 使用免费 mongodb数据库 + 免费node.js服务器搭建小程序接口

    由于微信的小程序只支持不带端口的域名接口,不支持IP地址和接口,所以我们需要映射到80端口并绑定备案过的域名才能被微信小程序访问到.简单点就是接口需要 https 协议才行,找了许久的免费的数据库与n ...

  3. windows下vagrant的安装使用

    vagrant是简便虚拟机操作的一个软件,而使用虚拟机有几个好处: 1.为了开发环境与生产环境一致(很多开发环境为windows而生产环境为linux),不至于出现在开发环境正常而移步到正式生产环境时 ...

  4. 简单概括下MongoDB 4.0 新特性

    (1)跨文档事务支持 (ACID) 首个支持跨文档事务的NoSQL云数据库,将文档模型的速度,灵活性和功能与ACID保证相结合.现在,使用MongoDB解决各种用例变得更加容易. (2)40%迁移速度 ...

  5. 运算符和Scanner的使用

    一 1.运算符:对常量或者变量进行操作的符号 2.算术运算符: 1)四则运算:+ - * / 2)取模运算:%(只看余数) 3)字符串连接:任何数据类型和字符串连在一起,都是字符串结果(+来连接) 4 ...

  6. Ubuntu 16.04 安装垃圾清理工具 BleachBit

    BleachBit 可以清理系统缓存文件, 清理磁盘垃圾. 首先下载最新版 deb安装包,默认下载到Downloads 中, 下载链接: https://www.bleachbit.org/downl ...

  7. pytorch中文文档-torch.nn常用函数-待添加-明天继续

    https://pytorch.org/docs/stable/nn.html 1)卷积层 class torch.nn.Conv2d(in_channels, out_channels, kerne ...

  8. 有关CSS的overflow和border-radius的那些事,你的圆角被覆盖了吗?

    事件起因 最初是网友的一个提问,来自于我的知识星球社区: 说实话,不得不佩服这个网友的眼力,这么小的细节都能发现.不过这也正是 FineUI 一直前进的动力,来自社区的监督和促进. 从截图上看,貌似圆 ...

  9. html简单的知识

    分布式版本控制git       pwd查询当前目录 ls ls -la   git config --global user.name xxx   git config --global user. ...

  10. VisualStudio 快捷键

    ctrl + o : 打开当前文件所在文件目录 ctrl + 鼠标左键 : 转到方法或者字段定义