容器相关基础知识

目录

1 隔离相关

2  容器存储

3 容器引擎

containerd start流程

containerd exec流程


1 隔离相关

主要通过设置namespaces以及control Group (Cgroup)控制组进行隔离,其他还涉及到Capability、Seccomp、AppArmor、Selinux

其中namespaces涉及到几个方面

Namespace

系统调用参数

隔离内容

Cgroup

CLONE_NEWCGROUP(创建新的cgroup命名空间)

Cgroup 根目录

IPC

CLONE_NEWIPC(创建新的IPC命名空间)

System V IPC, POSIX 消息队列等

Network

CLONE_NEWNET(创建新的网络名称空间)

网络设备,协议栈、端口等

Mount

CLONE_NEWNS(创建新的装载命名空间)

挂载点

PID

CLONE_NEWPID(创建新的PID命名空间)

进程ID

User

CLONE_NEWUSER(创建新的USR命名空间)

用户和group ID

UTS

CLONE_NEWUTS(创建新的UTS命名空间)

Hostname和NIS域名

 linux下namespase的创建

通过unshare创建,查看unshare的描述和用法

通过unshare创建一个pid namespace

cgroup

容器场景下常用的cgroup

cgroup名主要作用
cpu cpu share 和 cupset,控制 CPU 的使用率
memory控制进程内存的使用量
devicedevice 控制了你可以在容器中看到的 device 设备
freezer它和第三个 cgroup(device)都是为了安全的。当你停止容器的时候,freezer 会把当前的进程全部都写入 cgroup,然后把所有的进程都冻结掉,这样做的目的是,防止你在停止的时候,有进程会去做 fork。这样的话就相当于防止进程逃逸到宿主机上面去,是为安全考虑
blkioblkio 主要是限制容器用到的磁盘的一些 IOPS 还有 bps 的速率限制
pidpid cgroup 限制的是容器里面可以用到的最大进程数量

2  容器存储

docker对镜像的存储,底层基于不同操作系统,涉及到 AUFS、btrfs、devicemapper 还有 overlay

以overlay为例子:

 更多容器系统相关参考Linux overlay文件系统解析 - 简书

3 容器引擎

在k8s创建pod的时候,首先通过apiserver接受用户创建请求,apiserver讲信息持久化到etcd,此时调度器Scheduler会watch到etcd中的变化,Scheduler主要承载有调度算法,根据算法将pod Bind到Node节点;Node节点运行的kubelet讲watch到的etcd变化进行pod创建,kubelet通过CRI调用dockershim,之后调用containerd,执行runc启动容器,借用一张图(pod启动过程 - 简书

 

containerd start流程

containerd exec流程

start和exec的主要区别:

  • exec 的时候,需要把这个进程加入到一个已有的 namespace 里面;
  • start 的时候,容器进程的 namespace 是需要去专门创建。

参考:CNCF × Alibaba 云原生技术公开课 - 阿里云全球培训中心 - 官方网站,云生态下的创新人才工场

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值