K8s、CRI与container

本文探讨K8s、CRI(Container Runtime Interface)和container之间的关系。K8s通过apiserver、controllerManager和kubeScheduler进行工作。CRI作为kubelet与container runtime之间的桥梁,允许不同runtime的集成。文中详细介绍了CRI的组成部分,包括Sandbox、Container和Image接口,以及PodSandbox的概念。最后提到了shim v2,旨在解决不同low-level runtime之间的兼容性问题,以提高性能。

本篇文章梳理一下 K8s 与 CRI(Container Runtime Interface)、contaier 之间的关系。首先,我们需要知道 K8s 大体的工作流程原理。

K8s 如何工作

在 K8s 中,存在一个控制面板,也就是我们所说的 master node, 上面运行着 apiserver、controllerManager、kubeScheduler、kubedns 等组件。当我们想要创建一个应用(deployment、statefulset)时,主要流程如下:

  1. 通过 kubectl 命令向 apiserver 提交, apiserver 将资源保存在 etcd 中
  2. controllermanager 通过控制循环,获取新创建的资源,并创建 pod 信息。注意这里只创建pod,并未调度和创建容器
  3. kube-scheduler 也会循环获取新创建但未调度的pod,并在执行一系列调度算法后,将 pod 绑定到一个 node上,并更新 etcd 中的信息。具体方式是在 pod 的 spec 中加入 nodeName 字段。
  4. Kubelet监视所有Pod对象的更改。当发现Pod已绑定到Node,并且绑定的Node本身时,Kubelet会接管所有后续任务,包括创建 pod 网络,container等。
  5. kubelet 会通过 CRI 调用 container runtime 创建 pod 中的 container。

下图中 containerd 作为 high-level runtime,并调用 runC 创建 namespace 隔离和 cgroup 资源限制。

Container Run

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值