• K8S:容器隔离


    容器与虚拟化

    • Namespace 技术实际上修改了应用进程看待整个计算机“视图”,即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容。但对于宿主机来说,这些被“隔离”了的进程跟其他进程并没有太大区别
    • 容器并不像 Hypervisor 那样对应用进程的隔离环境负责,也不会创建任何实体的“容器”,真正对隔离环境负责的是宿主机操作系统本身。
    • 使用虚拟化技术作为应用沙盒,就必须要由 Hypervisor 来负责创建虚拟机,这个虚拟机是真实存在的,并且它里面必须运行一个完整的 Guest OS 才能执行用户的应用进程。这就不可避免地带来了额外的资源消耗和占用。
    • 容器化后的用户应用,却依然还是一个宿主机上的普通进程,这就意味着这些因为虚拟化而带来的性能损耗都是不存在的;而另一方面,使用 Namespace 作为隔离手段的容器并不需要单独的 Guest OS,这就使得容器额外的资源占用几乎可以忽略不计
    • “敏捷”和“高性能”是容器相较于虚拟机最大的优势

    隔离不彻底

    • 多个容器之间使用的就还是同一个宿主机的操作系统内核
    • 在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的,最典型的例子就是:时间。
    • 如果你的容器中的程序使用 settimeofday(2) 系统调用修改了时间,整个宿主机的时间都会被随之修改,这显然不符合用户的预期
    • 宿主机资源会被容器进程吃满。

    Cgroups

    • Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等
    • cpu-period时长(单位微秒),cpu-quota资源占比
    • $ docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash
    • 这就意味着这个 Docker 容器,只能使用到 20% 的 CPU 带宽。
  • 相关阅读:
    acwing算法基础之数据结构--栈和队列
    高清图片、视频素材免费下载
    【从零开始学习深度学习】7.自己动手实现softmax回归的训练与预测
    3、IO流之字节流和字符流
    Xcode打包ipa文件,查看app包内文件
    Kotlin或将超越Go?
    Python、PHP和Java下的反序列化漏洞复现实例
    U盘有病毒插上电脑会感染吗?了解下U盘的病毒传播机制
    视频编解码 — SVC可伸缩性
    【多线程&并发篇】(01)
  • 原文地址:https://blog.csdn.net/weixin_40108561/article/details/125502675