当前位置: 首页 > Linux

企业级微服务实战(一)

时间:2023-04-07 01:20:08 Linux

关于Linuxnamespace和ControlGroups(cgroup)1.关于Namespace(即命名空间)Namespace是Linux中对全局系统资源的一种封装和隔离,使得进程在不同命名空间具有独立的系统资源,更改命名空间中的系统资源只会影响当前命名空间中的进程,而不会影响其他命名空间中的进程。同样,当一个命名空间中的进程由于某种原因大量占用系统资源时,只会影响该命名空间中的进程,而不会影响其他命名空间中的进程。每个命名空间都是相对透明的,互不干扰。2.Linux内核支持的命名空间根据目前发布的内核,支持的命名空间如下:也可以参考这篇文章《Namespace in Operation》。关于Cgroupnamesapce在4.6内核才实现,现在普及度不高,docker还没有用到。从上面的内核支持可以看出,要想完整运行docker,必须使用Linux3.8以上内核,而CentOS6最新内核是2.6.32,所以我们至少要使用CentOS7(Kernel3.10)作为运行docker的主机。近日,CentOS社区推出了CentOS7.7和CentOS8两个版本。由于很多新手在升级到CentOS7.7后都“一头雾水”,所以我们在后面的实验中都会使用这个版本,保证大家在操作的时候能够和视频课程保持一致,遇到问题的时候自己解决。3、在CentOS7中,namespace显示系统中的每个进程都有一个类似/proc/[pid]/ns/的目录,里面包含了该进程所属的namespace的信息,如下:[root@docker-server~]#ls-l/proc/1/ns总使用量0lrwxrwxrwx1rootroot0Oct1710:22ipc->ipc:[4026531839]lrwxrwxrwx1rootroot0Oct1710:22mnt->mnt:[4026531840]lrwxrwxrwx1rootroot0Oct1710:22net->net:[4026531956]lrwxrwxrwx1rootroot0Oct1710:22pid->pid:[4026531836]lrwxrwxrwx1rootroot0Oct1710:22user->user:[4026531837]lrwxrwxrwx1rootroot0October1710:22uts->uts:[4026531838]因为Cgroup是在kernel4.6之后引入的,所以在CentOS73.10.0-1062.el7.x86_64namespace上只有六个。注意:ipc:[4026531839]后面的数字是inode号。如果两个进程的ipcnamespace的inode号相同,说明属于同一个namespace,如下:[root@docker-server~]#ls-l/proc/2/nstotalusage0lrwxrwxrwx1rootroot010月17日10:22ipc->ipc:[4026531839]lrwxrwxrwx1rootroot010月17日10:22mnt->mnt:[4026531840]lrwxrwxrwx110rootmonthroot01710:22net->net:[4026531956]lrwxrwxrwx1rootroot0Oct1710:22pid->pid:[4026531836]lrwxrwxrwx1rootroot0Oct1710:22user->user:[4026531837]lrwxrwxrwx1rootroot010月17日10:22uts->uts:[4026531838]这里注意一下,后面学习docker后,会检查不同docker程序的namespace是否一致。4、关于LinuxCgroup其实cgroup类似于namespace,也是对进程进行分组,只是其用途与namespace不同。Namespace是实现进程组之间的资源隔离,而cgroup是统一对一组进程的资源监控和限制。Linux通过namesapce+cgroup完成资源分离和资源限制。查看当前系统支持的子系统类型,即资源控制器类型:[root@docker-server~]#cat/proc/cgroups#subsys_namehierarchynum_cgroupsenabledcpuset511cpu211cpuacct211memory911devices811freezer411net_cls611blkio711perf_event1011hugetlb311pids1111net_prio611其中:cpuset:绑定cgroup到指定的CPU和NUMA节点。cpu:用于限制cgroup的CPU使用率。cpuacct:统计cgroupCPU使用率。memory:统计和限制cgroup的内存使用情况,包括进程内存、内核内存、swap。设备:限制cgroup创建(mknod)和对设备的访问。Freezer:用于挂起suspend和恢复一个cgroup中的所有进程。net_cls:为tc和iptables的cgroup中的进程创建的所有网络数据包添加classid标记。它只对传出的网络数据包有效,对接收的网络数据包无效。blkio:限制cgroup访问块设备的IO速度。perf_event:监控cgroups的性能。hugetlb:限制cgroup大页面的使用。pids:限制一个cgroup及其后代cgroup的进程总数。net_prio:为每个网络接口设置cgroup访问优先级。5、虚拟机和docker的区别虚拟机是主机级别的虚拟化。每个虚拟实例都有一个独立的操作系统,即图中的HostOS和kernel,底层硬件由Hypervisor统一。一类)使用底层操作系统和内核,通过内核级技术完成资源隔离和限制,也就是说每个容器都有相同的底层操作系统和内核。所以虚拟机的隔离性比容器要高很多,但是容器的资源占用和速度要好于虚拟机。注:更多技术博客,请关注字节教育官网。如果您在学习或自己实验的过程中遇到问题,请及时与作者沟通。[QQ群374106486]