• Kubernetes lxcfs


    容器实现的基础是NameSpace和Cgroups。

    NameSpace实现了对容器(进程)的隔离,NameSpace技术实际上修改了应用进程看待整个计算机“视图”,也就是作用域,即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容,实现方式类似于将全局变量修改为了局部变量。

    Cgroup实现了对容器(进程)资源的限制,但是在容器内部依然缺省挂载了宿主机的procfs的/proc目录,其中包含:meminfo,cpuinfo,stat,uptime等资源信息。一些监控工具如 free/top 会依赖上述文件获取资源配置和使用情况。

    示例:

    为容器配置了128m内存,使用free显示8G内存(宿主机的实际内存)

    [root@node01 proc]# docker run -it -m 128m busybox /bin/sh
    / # free
                 total       used       free     shared    buffers     cached
    Mem:       7992312    5954012    2038300          0       2104    3140452
    -/+ buffers/cache:    2811456    5180856
    Swap:            0          0          0

    LXCFS介绍

    社区中常用的做法是利用lxcfs来提供容器中的资源可见性。lxcfs是一个开源的FUSE(用户态文件系统)实现来支持LXC容器。

    LXCFS通过用户态文件系统,在容器中提供下列 procfs 的文件:

    /proc/cpuinfo
    /proc/diskstats
    /proc/meminfo
    /proc/stat
    /proc/swaps
    /proc/uptime

    比如,把宿主机的 /var/lib/lxcfs/proc/memoinfo 文件挂载到Docker容器的/proc/meminfo位置后。容器中进程读取相应文件内容时,LXCFS的FUSE实现会从容器对应的Cgroup中读取正确的内存限制。从而使得应用获得正确的资源约束设定。

    Docker环境下LXCFS使用

    安装 lxcfs 的RPM包

    wget https://copr-be.cloud.fedoraproject.org/results/ganto/lxd/epel-7-x86_64/00486278-lxcfs/lxcfs-2.0.5-3.el7.centos.x86_64.rpm
    yum install lxcfs-2.0.5-3.el7.centos.x86_64.rpm  

    启动lxcfs

    lxcfs /var/lib/lxcfs &

    在Docker中测试

    [root@node01]# docker run -it -m 256m 
    > -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw 
    > -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw 
    > -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw 
    > -v /var/lib/lxcfs/proc/stat:/proc/stat:rw 
    > -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw 
    > -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw 
    > debian:jessie /bin/sh
    # 
    # free
                 total       used       free     shared    buffers     cached
    Mem:        262144        224     261920      21748          0        224
    -/+ buffers/cache:          0     262144
    Swap:       262144          0     262144
    # 

    参考文章:https://www.centos.bz/2018/04/kubernetes%E4%B9%8B%E8%B7%AF-2-%E5%88%A9%E7%94%A8lxcfs%E6%8F%90%E5%8D%87%E5%AE%B9%E5%99%A8%E8%B5%84%E6%BA%90%E5%8F%AF%E8%A7%81%E6%80%A7/

  • 相关阅读:
    Android开发——嘀咕客户端Demo版
    Android开发——对sdcard扩展卡文件操作
    Android开发——数据存储之ContentProvider(1)
    Android开发——应用程序生命周期
    Android开发——多媒体开发之MediaPlayer
    Android开发——Intent
    Windows环境下Apache的reverse proxy报OS 10048的原因和解决办法
    windows下,Unable to load dynamic library php_mcrypt
    一些Arduino 测试代码
    字符串转化为16进制内容
  • 原文地址:https://www.cnblogs.com/vincenshen/p/9595618.html
Copyright © 2020-2023  润新知