zoukankan      html  css  js  c++  java
  • 深入剖析Kubernetes学习笔记:容器基础(05-06)

    05 :从进程说起

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

    2、什么是进程?

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

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

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

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

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

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

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

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

    [root@luoahong ~]# docker run -it busybox /bin/sh
    Unable to find image 'busybox:latest' locally
    latest: Pulling from library/busybox
    57c14dd66db0: Pull complete
    Digest: sha256:7964ad52e396a6e045c39b5a44438424ac52e12e4d5a25d94895f2058cb863a0
    Status: Downloaded newer image for busybox:latest
    / # ps
    PID USER TIME COMMAND
    1 root 0:00 /bin/sh
    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、内存、磁盘、网络带宽等等

    [root@luoahong container]# pwd
    /sys/fs/cgroup/cpu/container
    [root@luoahong container]# while : ; do : ; done &
    [1] 1447
    [root@luoahong container]# cat /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us 
    -1
    [root@luoahong container]# cat /sys/fs/cgroup/cpu/container/cpu.cfs_period_us 
    100000
    [root@luoahong container]# echo 20000 > /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us
    [root@luoahong container]# echo 1447 > /sys/fs/cgroup/cpu/container/tasks

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

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

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

    [root@k8s-master ~]# docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash 
    root@beac9236771e:/# cd /sys/fs/cgroup/cpu/
    root@beac9236771e:/sys/fs/cgroup/cpu# ls
    cgroup.clone_children cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat cpuacct.usage notify_on_release
    cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares cpuacct.stat cpuacct.usage_percpu tasks
    root@beac9236771e:/sys/fs/cgroup/cpu# cat cpu.cfs_period_us 
    100000
    root@beac9236771e:/sys/fs/cgroup/cpu# cat cpu.cfs_quota_us
    20000
    root@beac9236771e:/sys/fs/cgroup/cpu# pwd
    /sys/fs/cgroup/cpu
    
    $ mount -l | grep tmpfs
    none on /tmp type tmpfs (rw,relatime)
    
    [root@k8s-master cpu]# mount -l | grep tmpfs
    devtmpfs on /dev type devtmpfs (rw,nosuid,size=1006112k,nr_inodes=251528,mode=755)
    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
    tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
    tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
    tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=203192k,mode=700)

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

  • 相关阅读:
    JAVA语法之小结
    JAVA之经典Student问题1
    Android之动画1
    Android之屏幕测试
    Android之点击切换图片
    Android之标签选项卡
    Android简单计算器
    Javascript之相册拖动管理
    Javascript之改变盒子颜色
    CSS之照片翻转
  • 原文地址:https://www.cnblogs.com/luoahong/p/10407061.html
Copyright © 2011-2022 走看看