每日一问系列

为什么 kubelet 不使用容器化部署?

通过脚本(shell/ansible 等)在节点上部署 kubelet 服务时,涉及 kubelet 进程 service 启动配置、证书等,为什么不使用容器化部署 kubelet 呢?直接 docker run ... 一键部署多简单?

这里的主要原因是 kubelet 除了需要调用容器运行时,还需要直接操作宿主机以配置目标业务容器的网络、数据卷等

假设 kubelet 在容器中运行

容器运行时如 docker 可以通过挂载 docker sock 实现

网络问题可以通过共享宿主机 net namespace 实现,如 docker 的 --net host

对于目标业务容器的卷挂载问题就会比较麻烦,kubelet 隔着容器的 Mount Namespace 和文件系统不能直接操作宿主机的文件系统

比如,如果用户想要使用 NFS 做容器的持久化数据卷,那么 kubelet 就需要在容器进行绑定挂载前,在宿主机的指定目录上,先挂载 NFS 的远程目录

可是,这时候问题来了。由于现在 kubelet 是运行在容器里的,mount namespace 是直接开启的,这就意味着它要做的这个“mount -t nfs”命令,被隔离在了一个单独的 mount namespace 中,即 kubelet 做的挂载操作,不能被“传播”到宿主机上

正常情况容器数据卷的挂载流程

kubelet 直接运行在宿主机时容器数据卷的挂载流程是怎么样的呢?例如将宿主机的 /home 目录挂载到容器的 /test 目录

准备容器的 rootfs:kubelet 通过容器运行时下载镜像并通过指定的 storage driver 在宿主机上联合挂载出 rootfs,如 overlay2 的 MergedDir /var/lib/docker/overlay2/{id}/merged

创建 init 进程:kubelet 通过容器运行时创建出一个 init 进程,如 dockerinit 并为 init 进程开启 cgroup 和 namespace,此时 mount namespace 开启了,但是默认继承了宿主句的 mount namespace 视图,所以 init 进程可以看到上述宿主机准备的 rootfs 和在宿主机上要被挂载到容器的目录

执行 bind 挂载操作:bind 挂载即绑定挂载,可以将一个目录或者文件挂载到另一个目录。由于此时的 init 进程可以看到宿主机文件系统,所以 bind 挂载的 src 就是宿主机目录 /home,dst 就是 /var/lib/docker/overlay2/[可读写层 ID]/test

挂载 rootfs:在容器的 mount namespace 视图下,执行 chroot 或者 pivot_root,这样 init 进程看到的 rootfs 就切换成了前面准备好的 rootfs

启动业务进程:init 进程使用 execv 系统调用将用户定义的 ENTRYPOOINT+CMD 取代自己为 1 号进程

值得注意的是:执行 bind 挂载动作在容器 mount namespace 视图下执行,因此宿主机看不到挂载信息,保证容器的隔离性不会被 Volume 打破

为什么 kubelet 不使用容器化部署?的更多相关文章

  1. .NET Core+MySql+Nginx 容器化部署

    .NET Core容器化@Docker .NET Core容器化之多容器应用部署@Docker-Compose .NET Core+MySql+Nginx 容器化部署 GitHub-Demo:Dock ...

  2. 浅谈surging服务引擎中的rabbitmq组件和容器化部署

    1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...

  3. 谈谈surging引擎的tcp、http、ws协议和如何容器化部署

    1.前言 分布式已经成为了当前最热门的话题,分布式框架也百花齐放,群雄逐鹿.从中心化服务治理框架,到去中心化分布式服务框架,再到分布式微服务引擎,这都是通过技术不断积累改进而形成的结果.esb,网关, ...

  4. 1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))

    容器化部署一套云服务系列 1. 容器化部署一套云服务之Jenkins 一.购买服务器 服务器

  5. angular应用容器化部署

    angular 应用容器化部署 Intro 我自己有做一个个人主页,虽然效果不怎么样(不懂设计的典型程序猿...),但是记录了我对于前端框架及工具的一些实践, 从开始只有一个 angularjs 制作 ...

  6. Flask容器化部署原理与实现

    本文将介绍Flask的部署方案:Flask + Nginx + uWSGI,并使用docker进行容器化部署,部署的实例来源 Flask开发初探,操作系统为ubuntu. Flask系列文章: Fla ...

  7. Ubuntu系统下容器化部署gitlab

    容器化部署gitlab 获取镜像文件 1. 下载镜像文件 docker pull beginor/gitlab-ce:-ce. 2. 创建GitLab 的配置 (etc) . 日志 (log) .数据 ...

  8. spring boot本地开发与docker容器化部署的差异

    spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...

  9. Jaeger容器化部署

    概述 Jaeger是由Uber开源的分布式追踪系统,一套完整的Jager追踪系统包括Jaeger-client.Jaeger-agent.Jaeger-collector.Database和Jaege ...

  10. Gogs的Docker容器化部署流程遇到的问题

    Gogs的Docker容器化部署流程遇到的问题   最近在学习CI/CD的一些方案,个人比较青睐容器化轻量级.CI方面一开始是想使用gitlab的,但是发现我自己买的服务器配置太低,内存根本不够(大写 ...

随机推荐

  1. 在idea中将一个javase项目转成ee项目

    在idea中将java项目转成web项目 1.创建一个java项目,new一个directory名为web(与src同级) 2. 为web指定根目录:ctrl+shift+alt+s,在module中 ...

  2. STM32新建模板【HAL库】

    看到这篇笔记的小伙伴可能会觉得我在做无用功,明明可以通过 STM32CubeMx 软件直接生成的,还在这里慢慢的创建项目.我觉得在学习的时候最好少借助工具,当我们过度依赖工具的时候,决绝问题的能力可能 ...

  3. python选出一定数量的随机文件到某个文件夹

    import os import random import shutil def move_file(target_path, save_path, number): file_list = os. ...

  4. PHP利用 JSON 将XML转换为数组

    在很多开发项目中,我们都会遇到将XML文件转换为数组使用,因此在本篇 PHP教程 中,UncleToo和大家一起学习 如何转换XML为数组 . 现在有一个uncletoo.xml的配置文件,格式如下: ...

  5. 记一次python写爬虫爬取学校官网的文章

    有一位老师想要把官网上有关数字化的文章全部下载下来,于是找到我,使用python来达到目的 首先先查看了文章的网址 获取了网页的源代码发现一个问题,源代码里面没有url,这里的话就需要用到抓包了,因为 ...

  6. 部署prometheus、grafana、alertmanager

    简介:由于资源有限,本实验用了两台机器 监控端:部署prometheus.grafana.alertmanager 被监控端:node_exporter.mysqld_exporter 一. 部署pr ...

  7. python:冒泡排序(Bubble Sort)超详细教程!

    关于排序,真的非常的重要.数据可以从小到大排序,也可以从大到小排序.这样对于一个有序的数据,我们处理起来就很方便,这对于我们的工作帮助是很大的. 那么你拿到一组无序的数据,你将要如何去处理它呢? 冒泡 ...

  8. Xxl-job安装部署以及SpringBoot集成Xxl-job使用

    1.安装Xxl-job: 可以使用docker拉取镜像部署和源码编译两种方式,这里选择源码编译安装. 代码拉取地址: https://github.com/xuxueli/xxl-job/tree/2 ...

  9. vue中使用svg并设置大小

    1.安装依赖 npm install --save-dev svg-sprite-loader 2. 新建svg资源文件夹     src/assets/svg 将svg资源放入此目录,接下来会在配置 ...

  10. [Pytorch框架] 4.2.2 使用Tensorboard在 PyTorch 中进行可视化

    文章目录 4.2.2 使用Tensorboard在 PyTorch 中进行可视化 Tensorboard 简介 Tensorboard 安装 页面 SCALAR IMAGES GRAPHS HISTO ...