作者回复: 感谢你的肯定。
作者回复: @那时刻, 这种情况,如果A1/A2, B1/B2 都运行在自己的cgroup limit之内,那么需要先从两个宿主机的整体情况先做一个比较,从硬件类型开始,OS版本, 宿主机上的其他负载的情况,如果这些都一样,那么可以对A1/A2, B1/B2做perf看看热点函数。
作者回复: containerd 启动当容器的时候先会启动一个shim, 然后由shim运行runc去创建container. 这样相当于一个shim来管理一个container. shim作为container的“父进程”, 接管了容器的stdin/stdout, containerd服务出问题,不会影响到用户的container。
作者回复: containerd会先向容器中的init进程发送SIGTERM,如果init进程注册了SIGTERM handler(并且handler让进程退出了)那么整个容器就退出了,如果容器的init进程没有注册SIGTERM, 那么过30秒, containerd再向容器的init进程发送SIGKILL.
作者回复: @MYG, 你的系统上应该还是Cgroup V1. 试试这样找一下: # docker inspect 4d3cf63512a2 | grep \"Pid\" "Pid": 4384, # cat /proc/4384/cgroup | grep memory 5:memory:/system.slice/docker-4d3cf63512a2b89c0982724a6c12cb9b69781676aa93ab4fb2060f47908c6b94.scope
作者回复: @上邪忘川, 请问一下, 你是否是通过systemd来启动dockerd的? 容器在cgroup下的目录树结构会受容器管理平台的影响。
作者回复: containerd是宿主机上的一个守护进程,用来建立容器。每建立一个容器,就会有一个shim进程,它是容器中init进程的父进程。
作者回复: 1. 把容器当成虚拟机使用,可以是容器化过程中的一个过渡方案,但是长期的方向是native的方式来使用容器。 2. 我不清楚你具体修改的是哪个kernel参数,不过对于资源的限制比如cgroup, 或者xfs quota, 这些都是Linux 内核中的特性,所以有时候就需要在grub中对内核的启动参数做修改。 3. 这个没有什么问题。 4. 这个就需要用cgroup做限制了, 我在后面的课程里有很多这方面的介绍。
作者回复: docker base image, 拿centos为例子,可以建一个目录,让后把需要的rpm 安装在这个目录下面,然后把目录打成一个tarball, 用docker import成为一个base image. https://github.com/moby/moby/blob/master/contrib/mkimage-yum.sh
作者回复: @思维,请看一下你的内核版本号。比如time namespace是Linux kernel 5.6之后才有的。