为什么 kubelet 不使用容器化部署?
每日一问系列
为什么 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 不使用容器化部署?的更多相关文章
- .NET Core+MySql+Nginx 容器化部署
.NET Core容器化@Docker .NET Core容器化之多容器应用部署@Docker-Compose .NET Core+MySql+Nginx 容器化部署 GitHub-Demo:Dock ...
- 浅谈surging服务引擎中的rabbitmq组件和容器化部署
1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...
- 谈谈surging引擎的tcp、http、ws协议和如何容器化部署
1.前言 分布式已经成为了当前最热门的话题,分布式框架也百花齐放,群雄逐鹿.从中心化服务治理框架,到去中心化分布式服务框架,再到分布式微服务引擎,这都是通过技术不断积累改进而形成的结果.esb,网关, ...
- 1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))
容器化部署一套云服务系列 1. 容器化部署一套云服务之Jenkins 一.购买服务器 服务器
- angular应用容器化部署
angular 应用容器化部署 Intro 我自己有做一个个人主页,虽然效果不怎么样(不懂设计的典型程序猿...),但是记录了我对于前端框架及工具的一些实践, 从开始只有一个 angularjs 制作 ...
- Flask容器化部署原理与实现
本文将介绍Flask的部署方案:Flask + Nginx + uWSGI,并使用docker进行容器化部署,部署的实例来源 Flask开发初探,操作系统为ubuntu. Flask系列文章: Fla ...
- Ubuntu系统下容器化部署gitlab
容器化部署gitlab 获取镜像文件 1. 下载镜像文件 docker pull beginor/gitlab-ce:-ce. 2. 创建GitLab 的配置 (etc) . 日志 (log) .数据 ...
- spring boot本地开发与docker容器化部署的差异
spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...
- Jaeger容器化部署
概述 Jaeger是由Uber开源的分布式追踪系统,一套完整的Jager追踪系统包括Jaeger-client.Jaeger-agent.Jaeger-collector.Database和Jaege ...
- Gogs的Docker容器化部署流程遇到的问题
Gogs的Docker容器化部署流程遇到的问题 最近在学习CI/CD的一些方案,个人比较青睐容器化轻量级.CI方面一开始是想使用gitlab的,但是发现我自己买的服务器配置太低,内存根本不够(大写 ...
随机推荐
- kettle从入门到精通 第十一课 kettle javascript 解析json数组
1.json步骤虽然可以解析json数组,但是不够灵活.通过javascript步骤来解析json数组比较灵活,且可以按照需要组装数据流转到下个步骤. 1)步骤名称:可以自定义 2)Transform ...
- RDIFramework.NET代码生成器全新V5.0版本发布
RDIFramework.NET代码生成器介绍 RDIFramework.NET代码生成器,代码.文档一键生成. RDIFramework.NET代码生成器集代码生成.各数据库对象文档生成.数据库常用 ...
- sklearn数据预处理中fit(),transform()与fit_transform()的区别
1 概述 注意这是数据预处理中的方法: Fit(): Method calculates the parameters μ and σ and saves them as internal objec ...
- OpenCV-Python 中文教程
OpenCV-Python 中文教程 目录 I 走进 OpenCV 关于 OpenCV-Python 教程 在 Windows 上安装 OpenCV-Python 在 Fedora 上安装 OpenC ...
- CF1477F Nezzar and Chocolate Bars 题解
题意: 有一根长为 \(1\) 的巧克力,已经被切了 \(m-1\) 刀被分成 \(m\) 分,接下来每次在整根长度为 \(1\) 的巧克力上均匀随机一个点切一刀,求每一小段巧克力长度均小于一个给定值 ...
- Spring之AOP理解及使用
文章目录 AOP是什么 AOP Spring的通知类型 1.Before通知 2. AfterReturning通知 3.AfterThrowing通知 4. After通知 5. Around通知 ...
- AutoCAD二次开发系列教程01-如何在AutoCAD中输出Hello World
目录 01项目环境准备 02代码示例 03输出示例 04总结 05源码地址 01项目环境准备 A.开发使用的软件:AutoCAD2016.VisualStudio2022 B.建立依赖的本地库(提前从 ...
- markdown插入图片、音频视频
1.markdown 简介 Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档. Markdown 编写的文档后缀为 .md, .markdown 简单易学容易上手,十 ...
- Node.js躬行记(28)——Cypress自动化测试实践
最近在研究如何提升项目质量,提炼了许多个用于自测的测试用例,但是每次修改后,都手工测试,成本太高,于是就想到了自动化测试. 在一年前已将 Cypress 集成到管理后台的项目中,不过没有投入到实践中. ...
- Django, urls的参数name的demo
Django的路由变化 遇到需要修改路由的需求,特别记录一下 项目开始 django-admin startproject sandboxOA. # 外部文件夹可以改变名字, '.'的意思是上一级不需 ...