侵权投诉

k8s容器运行时演进历史

Linux爱好者 2021-02-02 13:50 次阅读

在docker/k8s时代,经常听到CRI, OCI,containerd和各种shim等名词,看完本篇博文,您会有个彻底的理解。

典型的K8S Runtime架构

从最常见的Docker说起,kubelet和Docker的集成方案图如下:

32017316-5f10-11eb-8b86-12bb97331649.png

当kubelet要创建一个容器时,需要以下几步:

Kubelet 通过 CRI 接口(gRPC)调用 dockershim,请求创建一个容器。CRI 即容器运行时接口(Container Runtime Interface),这一步中,Kubelet 可以视作一个简单的 CRI Client,而 dockershim 就是接收请求的 Server。目前 dockershim 的代码其实是内嵌在 Kubelet 中的,所以接收调用的凑巧就是 Kubelet 进程;

dockershim 收到请求后,转化成 Docker Daemon 能听懂的请求,发到 Docker Daemon 上请求创建一个容器。

Docker Daemon 早在 1.12 版本中就已经将针对容器的操作移到另一个守护进程——containerd 中了,因此 Docker Daemon 仍然不能帮我们创建容器,而是要请求 containerd 创建一个容器;

containerd 收到请求后,并不会自己直接去操作容器,而是创建一个叫做 containerd-shim 的进程,让 containerd-shim 去操作容器。这是因为容器进程需要一个父进程来做诸如收集状态,维持 stdin 等 fd 打开等工作。而假如这个父进程就是 containerd,那每次 containerd 挂掉或升级,整个宿主机上所有的容器都得退出了。而引入了 containerd-shim 就规避了这个问题(containerd 和 shim 并不是父子进程关系);

我们知道创建容器需要做一些设置 namespaces 和 cgroups,挂载 root filesystem 等等操作,而这些事该怎么做已经有了公开的规范了,那就是 OCI(Open Container Initiative,开放容器标准)。它的一个参考实现叫做 runC。于是,containerd-shim 在这一步需要调用 runC 这个命令行工具,来启动容器;

runC 启动完容器后本身会直接退出,containerd-shim 则会成为容器进程的父进程,负责收集容器进程的状态,上报给 containerd,并在容器中 pid 为 1 的进程退出后接管容器中的子进程进行清理,确保不会出现僵尸进程。

这个过程乍一看像是在搞我们:Docker Daemon 和 dockershim 看上去就是两个不干活躺在中间划水的啊,Kubelet 为啥不直接调用 containerd 呢?

当然可以,先看下现在的架构为什么如此繁杂。

容器历史小叙

早期的k8s runtime架构,远没这么复杂,kubelet创建容器,直接调用docker daemon,docker daemon自己调用libcontainer就把容器运行起来。

但往往,事情不会如此简单,一系列政治斗争开始了,先是大佬们认为运行时标准不能被 Docker 一家公司控制,于是就撺掇着搞了开放容器标准 OCI。Docker 则把 libcontainer 封装了一下,变成 runC 捐献出来作为 OCI 的参考实现。

再接下来就是 rkt(coreos推出的,类似docker) 想从 Docker 那边分一杯羹,希望 Kubernetes 原生支持 rkt 作为运行时,而且 PR 还真的合进去了。维护过一块业务同时接两个需求方的读者老爷应该都知道类似的事情有多坑,Kubernetes 中负责维护 kubelet 的小组 sig-node 也是被狠狠坑了一把。

大家一看这么搞可不行,今天能有 rkt,明天就能有更多幺蛾子出来,这么搞下去我们小组也不用干活了,整天搞兼容性的 bug 就够呛。于是乎,Kubernetes 1.5 推出了 CRI 机制,即容器运行时接口(Container Runtime Interface),Kubernetes 告诉大家,你们想做 Runtime 可以啊,我们也资瓷欢迎,实现这个接口就成,成功反客为主。

不过 CRI 本身只是 Kubernetes 推的一个标准,当时的 Kubernetes 尚未达到如今这般武林盟主的地位,容器运行时当然不能说我跟 Kubernetes 绑死了只提供 CRI 接口,于是就有了 shim(垫片)这个说法,一个 shim 的职责就是作为 Adapter 将各种容器运行时本身的接口适配到 Kubernetes 的 CRI 接口上。

接下来就是 Docker 要搞 Swarm 进军 PaaS 市场,于是做了个架构切分,把容器操作都移动到一个单独的 Daemon 进程 containerd 中去,让 Docker Daemon 专门负责上层的封装编排。可惜 Swarm 在 Kubernetes 面前实在是不够打,惨败之后 Docker 公司就把 containerd 项目捐给 CNCF 缩回去安心搞 Docker 企业版了。

最后就是我们在上一张图里看到的这一坨东西了,尽管现在已经有 CRI-O,containerd-plugin 这样更精简轻量的 Runtime 架构,dockershim 这一套作为经受了最多生产环境考验的方案,迄今为止仍是 Kubernetes 默认的 Runtime 实现。

OCI, CRI

OCI(开放容器标准),规定了2点:

容器镜像要长啥样,即 ImageSpec。里面的大致规定就是你这个东西需要是一个压缩了的文件夹,文件夹里以 xxx 结构放 xxx 文件;

容器要需要能接收哪些指令,这些指令的行为是什么,即 RuntimeSpec。这里面的大致内容就是“容器”要能够执行 “create”,“start”,“stop”,“delete” 这些命令,并且行为要规范。

runC 为啥叫参考实现呢,就是它能按照标准将符合标准的容器镜像运行起来,标准的好处就是方便搞创新,反正只要我符合标准,生态圈里的其它工具都能和我一起愉快地工作(……当然 OCI 这个标准本身制定得不怎么样,真正工程上还是要做一些 adapter 的),那我的镜像就可以用任意的工具去构建,我的“容器”就不一定非要用 namespace 和 cgroups 来做隔离。这就让各种虚拟化容器可以更好地参与到游戏当中,我们暂且不表。

而 CRI 更简单,单纯是一组 gRPC 接口,扫一眼 kubelet/apis/cri/services.go 就能归纳出几套核心接口:

一套针对容器操作的接口,包括创建,启停容器等等;

一套针对镜像操作的接口,包括拉取镜像删除镜像等;

一套针对 PodSandbox(容器沙箱环境)的操作接口,我们之后再说。

现在我们可以找到很多符合 OCI 标准或兼容了 CRI 接口的项目,而这些项目就大体构成了整个 Kuberentes 的 Runtime 生态:

OCI Compatible:runC,Kata(以及它的前身 runV 和 Clear Containers),gVisor。其它比较偏门的还有 Rust 写的 railcar

CRI Compatible:Docker(借助 dockershim),containerd(借助 CRI-containerd),CRI-O,Frakti,etc

OCI, CRI 确实不是一个好名字,在这篇文章的语境中更准确的说法:cri-runtime 和 oci-runtime。通过这个粗略的分类,我们其实可以总结出整个 Runtime 架构万变不离其宗的三层抽象:

Orchestration API -> Container API(cri-runtime) -> Kernel API(oci-runtime)

根据这个思路,我们就很容易理解下面这两种东西:

各种更为精简的 cri-runtime(反正就是要干掉 Docker)

各种“强隔离”容器方案

Containerd和CRI-O

上一节看到现在的 Runtime 实在是有点复杂了,而复杂是万恶之源(其实本质上就是想干掉 Docker),于是就有了直接拿 containerd 做 oci-runtime 的方案。当然,除了 Kubernetes 之外,containerd 还要接诸如 Swarm 等调度系统,因此它不会去直接实现 CRI,这个适配工作当然就要交给一个 shim 了。

containerd 1.0 中,对 CRI 的适配通过一个单独的进程 CRI-containerd 来完成:

32a9dbdc-5f10-11eb-8b86-12bb97331649.png

containerd 1.1 中做的又更漂亮一点,砍掉了 CRI-containerd 这个进程,直接把适配逻辑作为插件放进了 containerd 主进程中:

3370f6e0-5f10-11eb-8b86-12bb97331649.png

但在 containerd 做这些事情前,社区就已经有了一个更为专注的 cri-runtime:CRI-O,它非常纯粹,就是兼容 CRI 和 OCI,做一个 Kubernetes 专用的运行时:

350a75c6-5f10-11eb-8b86-12bb97331649.png

其中 conmon 就对应 containerd-shim,大体意图是一样的。

CRI-O 和(直接调用)containerd 的方案比起默认的 dockershim 确实简洁很多,但没啥生产环境的验证案例,我所知道的仅仅是 containerd 在 GKE 上是 beta 状态。因此假如你对 Docker 没有特殊的政治恨意,大可不必把 dockershim 这套换掉。

强隔离容器:Kata,gVisor,Firecracker

一直以来,K8S都难以实现真正的多租户。

理想来说,平台的各个租户(tenant)之间应该无法感受到彼此的存在,表现得就像每个租户独占这整个平台一样。具体来说,我不能看到其它租户的资源,我的资源跑满了不能影响其它租户的资源使用,我也无法从网络或内核上攻击其它租户。
Kubernetes 当然做不到,其中最大的两个原因是:

kube-apiserver 是整个集群中的单例,并且没有多租户概念

默认的 oci-runtime 是 runC,而 runC 启动的容器是共享内核的

对于第二个问题,一个典型的解决方案就是提供一个新的 OCI 实现,用 VM 来跑容器,实现内核上的硬隔离。runV 和 Clear Containers 都是这个思路。因为这两个项目做得事情是很类似,后来就合并成了一个项目 Kata Container。Kata 的一张图很好地解释了基于虚拟机的容器与基于 namespaces 和 cgroups 的容器间的区别:

35d3881c-5f10-11eb-8b86-12bb97331649.png

当然,没有系统是完全安全的,假如 hypervisor 存在漏洞,那么用户仍有可能攻破隔离。但所有的事情都要对比而言,在共享内核的情况下,暴露的攻击面是非常大的,做安全隔离的难度就像在美利坚和墨西哥之间修 The Great Wall,而当内核隔离之后,只要守住 hypervisor 这道关子就后顾无虞了。

嗯,一个 VM 里跑一个容器,听上去隔离性很不错,但不是说虚拟机又笨重又不好管理才切换到容器的吗,怎么又要走回去了?

Kata 告诉你,虚拟机没那么邪恶,只是以前没玩好:

不好管理是因为没有遵循“不可变基础设施”,大家都去虚拟机上这摸摸那碰碰,这台装 Java 8 那台装 Java 6,Admin 是要 angry 的。Kata 则支持 OCI 镜像,完全可以用上 Dockerfile + 镜像,让不好管理成为了过去时;

笨重是因为之前要虚拟化整个系统,现在我们只着眼于虚拟化应用,那就可以裁剪掉很多功能,把 VM 做得很轻量,因此即便用虚拟机来做容器,Kata 还是可以将容器启动时间压缩得非常短,启动后在内存上和 IO 上的 overhead 也尽可能去优化。

不过话说回来,Kubernetes 上的调度单位是 Pod,是容器组啊,Kata 这样一个虚拟机里一个容器,同一个 Pod 间的容器还怎么做 namespace 的共享?

这就要说回我们前面讲到的 CRI 中针对 PodSandbox(容器沙箱环境)的操作接口了。第一节中,我们刻意简化了场景,只考虑创建一个容器,而没有讨论创建一个 Pod。大家都知道,真正启动 Pod 里定义的容器之前,kubelet 会先启动一个 infra 容器,并执行 /pause 让 infra 容器的主进程永远挂起。这个容器存在的目的就是维持住整个 Pod 的各种 namespace,真正的业务容器只要加入 infra 容器的 network 等 namespace 就能实现对应 namespace 的共享。而 infra 容器创造的这个共享环境则被抽象为 PodSandbox。每次 kubelet 在创建 Pod 时,就会先调用 CRI 的 RunPodSandbox 接口启动一个沙箱环境,再调用 CreateContainer 在沙箱中创建容器。

这里就已经说出答案了,对于 Kata Container 而言,只要在 RunPodSandbox 调用中创建一个 VM,之后再往 VM 中添加容器就可以了。最后运行 Pod 的样子就是这样的:

350a75c6-5f10-11eb-8b86-12bb97331649.png

说完了 Kata,其实 gVisor 和 Firecracker 都不言自明了,大体上都是类似的,只是:

gVisor 并不会去创建一个完整的 VM,而是实现了一个叫 “Sentry” 的用户态进程来处理容器的 syscall,而拦截 syscall 并重定向到 Sentry 的过程则由 KVM 或 ptrace 实现。

Firecracker 称自己为 microVM,即轻量级虚拟机,它本身还是基于 KVM 的,不过 KVM 通常使用 QEMU 来虚拟化除 CPU 和内存外的资源,比如 IO 设备,网络设备。Firecracker 则使用 rust 实现了最精简的设备虚拟化,为的就是压榨虚拟化的开销,越轻量越好。

责任编辑:xj

原文标题:浅析 k8s 容器运行时演进

文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

原文标题:浅析 k8s 容器运行时演进

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

基于微控制器使用的可视化逻辑网络

本文中设计的设备可以帮助以一种简单的方式更好地可视化真值表。整个项目基于微控制器的使用。
的头像 电子设计 发表于 04-19 15:30 530次 阅读
基于微控制器使用的可视化逻辑网络

容器在科学技术中的应用及多种技术

作为一种新兴的虛拟化技术,容器能够以低廉的资源开销为应用程序和服务提供隔离的运行环境,近年来在持续集....
发表于 04-19 10:50 10次 阅读
容器在科学技术中的应用及多种技术

盘点汇总Docker磁盘环境的清理方法

如果你使用 docker 进行大规模开发,但是没有清理策略,那么你的磁盘马上就会被填满,当你真的必须....
的头像 如意 发表于 04-05 17:23 67次 阅读
盘点汇总Docker磁盘环境的清理方法

一种基于镜像层观念的Docker注册表缓存预取策略

随着容器技术的广泛普及,大型 Docker公共注册表使用对象存储服务来解决镜像数量剧増的问题,饣这种....
发表于 04-01 14:14 20次 阅读
一种基于镜像层观念的Docker注册表缓存预取策略

关于Docker的基础

虚拟机一般不可能只跑一个应用,因为这样确实也太浪费资源了,我们可以想想,现在手上的电脑,可以用 Vm....
的头像 Linux爱好者 发表于 03-31 17:16 217次 阅读
关于Docker的基础

电子是否存在“意识”和“无意识”的感觉

对于所有实体,无论是电子、原子还是分子,都是多少具有一点体会和感知的产物,最初可能只是一个奇怪的意识....
的头像 电子说 发表于 03-25 16:55 740次 阅读
电子是否存在“意识”和“无意识”的感觉

光固化3D打印模型如何清洗

光固化3D打印好的模型表面会附着黏黏的树脂,需要清洗,这项工作看上去繁琐,其实也很简单,但处理光固化....
发表于 03-24 09:36 307次 阅读
光固化3D打印模型如何清洗

如何使用docker和python工具包datmo为数据科学和AI框架快速配置环境

如果让你说出软件开发最烦人的事情,那么环境配置必然是其中之一。例如开始编写Python应用程序,那么....
的头像 新机器视觉 发表于 03-20 08:57 384次 阅读
如何使用docker和python工具包datmo为数据科学和AI框架快速配置环境

应用于Docker的安全工具介绍

网络安全的重要性是毋庸置疑的,无数有关恶意软件和安全漏洞之类的新闻也不断证实此论断。如果你正在管理D....
的头像 FPGA之家 发表于 03-12 14:05 219次 阅读
应用于Docker的安全工具介绍

为什么说不要用Docker了?

在比较 Docker 和其他工具时,我们需要将其分解为组件,首先我们要讨论的是容器引擎。容器引擎是一....
的头像 Linux爱好者 发表于 03-03 15:31 910次 阅读
为什么说不要用Docker了?

如何在VMware中安装ubuntu 16.04?

如何在VMware中安装ubuntu 16.04 如何安装Vitis AI 几个常见的docker指令 ...
发表于 02-24 06:24 0次 阅读
如何在VMware中安装ubuntu 16.04?

Hi3518ev300开发平台搭建

笔者在收到申请的免费试用IPC后,就迫不及待进行了开发平台的搭建,以达到在Windows下编写代码、烧写固件,在Linux平台下...
发表于 01-21 18:56 0次 阅读
Hi3518ev300开发平台搭建

k8s实用devops工具

KubeSpray是一个集群生命周期管理器,可以帮助部署可用于生产的Kubernetes集群。它使用....
的头像 Linux爱好者 发表于 01-19 16:53 527次 阅读
k8s实用devops工具

RedHat宣布收购容器安全初创企业StackRox,推动 IBM 的多云端 / 混合环境下业务发展

尽管以企业级 Linux 产品和服务而被人们所熟知,但 RedHat 近年来也在努力向云端迁移。20....
的头像 工程师邓生 发表于 01-08 11:58 433次 阅读
RedHat宣布收购容器安全初创企业StackRox,推动 IBM 的多云端 / 混合环境下业务发展

Docker里玩转PetaLinux的上手教程

作者:Alex He,Xilinx 嵌入式技术专家 Xilinx 嵌入式技术专家 Alex He 与....
的头像 39度创意研究所 发表于 12-25 14:30 264次 阅读
Docker里玩转PetaLinux的上手教程

嫦娥五号任务月球样品正式交接

12月19日上午,国家航天局在京举行探月工程嫦娥五号任务月球样品交接仪式,与部分参研参试单位一道,共....
的头像 我快闭嘴 发表于 12-20 10:54 1523次 阅读
嫦娥五号任务月球样品正式交接

Docker Desktop 的 3.0.0 版本提供了对 Apple Silicon 的支持

本周四,我们迎来了 Docker Desktop 的 3.0.0 版本。其最大的变化,就是提供了对 ....
的头像 工程师邓生 发表于 12-11 16:09 1067次 阅读
Docker Desktop 的 3.0.0 版本提供了对 Apple Silicon 的支持

Docker开发预览版即将支持苹果Mac M1芯片

今年 11 月,苹果发布了 M1 Mac 设备,Mac 设备开始转向 ARM 生态。尽管 Docke....
的头像 璟琰乀 发表于 12-11 09:52 966次 阅读
Docker开发预览版即将支持苹果Mac M1芯片

AWS推容器与无服务器自动化管理服务Proton

AWS公开预览应用程序部署管理服务,AWS Proton能够自动化管理无服务器和容器应用程序,以简化....
的头像 电子魔法师 发表于 12-03 16:35 661次 阅读
AWS推容器与无服务器自动化管理服务Proton

华为云容器软件市场份额排名中国第一

近日,全球权威咨询机构IDC发布《PRC SDC Software Market Overview,....
的头像 电子魔法师 发表于 12-03 16:21 620次 阅读
华为云容器软件市场份额排名中国第一

性能优越的M1芯片居然不支持Docker

日前,苹果在返场发布会 One More Thing 上隆重揭晓了其自研 5nm M1 芯片以及三款....
的头像 嵌入式ARM 发表于 12-03 09:26 1468次 阅读
性能优越的M1芯片居然不支持Docker

针对Docker的恶意软件和攻击行为愈演愈烈

恶意软件领域在 2017 年底发生了重大转变。随着基于云的技术的普及,一些网络犯罪团伙也开始瞄准 D....
的头像 如意 发表于 12-02 16:00 504次 阅读
针对Docker的恶意软件和攻击行为愈演愈烈

GigaOm发布了K8s数据报告雷达图报告

大家都知道,容器备份是一个新课题。传统的备份方法,由于无法和Kubernetes沟通,因此无法高效实....
的头像 高端存储知识 发表于 11-30 09:25 659次 阅读
GigaOm发布了K8s数据报告雷达图报告

如何使用Docker容器中的TensorFlow目标检测API

本文展示了如何使用 Docker 容器中的 TensorFlow 目标检测 API,通过网络摄像头执....
的头像 新机器视觉 发表于 11-27 09:08 644次 阅读
如何使用Docker容器中的TensorFlow目标检测API

最近开机第一次运行老是没有进到docker,要docker attach build 一下才会进去,是什么原因呢?

我用李隆大佬的docker,最近开机第一次运行老是没有进到docker,要docker attach build 一下才会进去,是什么原因呢,帮忙指正下...
发表于 11-25 11:33 102次 阅读
最近开机第一次运行老是没有进到docker,要docker attach build 一下才会进去,是什么原因呢?

鸿蒙工具

鸿蒙工具 对鸿蒙的概念了解得差不多了,就该开始尝试着去接触它。这份鸿蒙工具主要是针对开发板的开发环境搭建、系统编译和烧录...
发表于 11-24 11:28 373次 阅读
鸿蒙工具

请问docker容器如何查看日志?

docker容器如何查看日志
发表于 11-19 07:29 1111次 阅读
请问docker容器如何查看日志?

云计算核心技术Docker教程:Docker Compose的pull和push命令详解

Docker-Compose pull命令可以拉取docker-compose.yml或者docke....
的头像 工程师邓生 发表于 11-17 18:22 618次 阅读
云计算核心技术Docker教程:Docker Compose的pull和push命令详解

容器和虚拟机具有相似的资源隔离和分配方式

开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些问题并未在....
的头像 嵌入式ARM 发表于 11-16 15:36 811次 阅读
容器和虚拟机具有相似的资源隔离和分配方式

docker的常用命令有哪些?

docker的常用命令: Docker镜像相关 Docker容器相关 Docker仓库相关 ...
发表于 11-06 06:48 1111次 阅读
docker的常用命令有哪些?

请问docker容器如何添加自定义hosts?

docker容器添加自定义hosts的方案有哪些? docker容器添加自定义hosts的错误示例   ...
发表于 11-05 06:20 101次 阅读
请问docker容器如何添加自定义hosts?

容器技术和云原生诞生的历史背景

背景 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云....
的头像 Linuxer 发表于 10-26 09:57 1972次 阅读
容器技术和云原生诞生的历史背景

Kubernetes存储体系解析 浅谈Volume概念的由来

Volume、PV、PVC、StorageClass由来 先思考一个问题,为什么会引入Volume这....
的头像 39度创意研究所 发表于 10-15 16:45 807次 阅读
Kubernetes存储体系解析 浅谈Volume概念的由来

Linux技术中Cgroup的原理和实践

一、什么是Cgroup,使用场景? 容器本质上是进程,既然是进程就会消耗掉系统资源,比如:CPU、内....
的头像 39度创意研究所 发表于 10-15 14:04 902次 阅读
Linux技术中Cgroup的原理和实践

云计算架构审核是什么意思?

要求他人检查工作并不代表软弱。要求进行体系结构审核的人员应该受到称赞。另一种选择是花费数百万美元的不....
的头像 我快闭嘴 发表于 10-15 11:17 1277次 阅读
云计算架构审核是什么意思?

对于容器和Kubernetes,企业应该意识到哪些主要优势和挑战?

虽然容器已经诞生了10多年,但在过去几年中,容器的普及和采用率仍然不断增长。根据Gartner的调查....
的头像 如意 发表于 10-11 10:11 619次 阅读
对于容器和Kubernetes,企业应该意识到哪些主要优势和挑战?

云原生技术将是企业落地微服务的优秀伴侣

随着技术的发展,我们云托管时代逐步的向云原生演进了。所谓云原生,就是将微服务、DevOps的架构理念....
的头像 如意 发表于 10-08 14:37 658次 阅读
云原生技术将是企业落地微服务的优秀伴侣

Kubernetes在授权方面的挑战和防御措施

随着越来越多的组织将容器化应用程序转移到生产环境中,Kubernetes已经成为在私有云、公共云和混....
的头像 如意 发表于 10-08 14:23 453次 阅读
Kubernetes在授权方面的挑战和防御措施

虚拟机被视作5G和边缘计算等数字技术部分,但会被容器取代吗?

现在,许多IT创新都源于虚拟机(VM)以及软硬件的分离,比如云计算,边缘计算和微服务等领先技术概念都....
的头像 如意 发表于 09-29 15:45 962次 阅读
虚拟机被视作5G和边缘计算等数字技术部分,但会被容器取代吗?

Docker 提供一个基于 DotCloud 开源的LXC 的高级容器引擎

2015 年,由 Google、红帽、微软等大型云计算厂商以及一些开源公司,共同牵头成立了 CNCF....
的头像 lhl545545 发表于 09-25 16:55 690次 阅读
Docker 提供一个基于  DotCloud 开源的LXC 的高级容器引擎

Kubernetes架构和核心组件组成 Kubernetes节点“容器运行时”技术分析

Kubernetes 架构简介 Kubernetes架构如下图所示: 在这张系统架构图中,我们把服务....
的头像 39度创意研究所 发表于 09-25 15:53 873次 阅读
Kubernetes架构和核心组件组成 Kubernetes节点“容器运行时”技术分析

如何创建Python服务包,并利用Docker管理数据(附源码)

小白程序员面临的最大困难之一就是理解环境的概念。环境是指程序员进行编码的系统,这听起来貌似很容易,但....
的头像 如意 发表于 09-10 15:38 592次 阅读
如何创建Python服务包,并利用Docker管理数据(附源码)

解析Docker、Kubernetes、Openshift的发展历史及架构

Kubernetes前身是谷歌大规模集群管理系统Brog,它基于容器技术,实现资源管理的自动化,以及....
的头像 我快闭嘴 发表于 09-08 10:15 1589次 阅读
解析Docker、Kubernetes、Openshift的发展历史及架构

Docker的主要用途

镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向 Docker 引擎的只读模板。....
的头像 机器视觉CV 发表于 09-07 16:44 954次 阅读
Docker的主要用途

【Docker】命令使用大全

们基于 Alpine 构建一个镜像Alpine:Alpine Linux 的最小 Docker 映....
的头像 机器视觉CV 发表于 09-07 16:40 620次 阅读
【Docker】命令使用大全

Linux新发布用于容器托管的操作系统Bottlerocket的详细介绍

随着我们的客户越来越多地使用容器来运行其工作负载,设计Linux发行版以从头开始运行容器已经变得很流....
发表于 09-06 09:54 350次 阅读
Linux新发布用于容器托管的操作系统Bottlerocket的详细介绍

普元应用服务器软件PAS支持Web容器所有特性?

宝兰德应用服务器软件是一款遵循JavaEE规范的应用服务器中间件软件,提供WEB容器和EJB容器等核....
的头像 兆芯 发表于 08-31 10:30 1041次 阅读
普元应用服务器软件PAS支持Web容器所有特性?

软件容器平台Docker受实体清单限制使用 Docker开源项目应不受影响

有网友指出此次 Docker 更新的服务协议只是针对 Docker Inc. 相关网站上提供的服务,....
的头像 Linux爱好者 发表于 08-19 09:52 1377次 阅读
软件容器平台Docker受实体清单限制使用  Docker开源项目应不受影响

化学品包装防水透气膜在化学品包装中应用的优点

化学品在储存或者运输的过程中一般是需要使用到专用的容器,为了防止化学品发生泄露, 那么按照正常的标准....
发表于 08-11 10:25 236次 阅读
化学品包装防水透气膜在化学品包装中应用的优点

容器与虚拟机之间的主要区别

人们通常将容器与虚拟机进行比较,尽管容器规模更小并且需要的开销更少。这两种应用程序可以采用相同的基础....
的头像 存储D1net 发表于 08-10 11:40 1382次 阅读
容器与虚拟机之间的主要区别

关于工业级光电液位开关LLC200D3SH电气特性

当纯水液位过高过低会出现如下情况:当纯水箱液位高于HH以上时只发出警报,混床系统停止运行,其他设备不....
发表于 08-04 11:53 200次 阅读
关于工业级光电液位开关LLC200D3SH电气特性

docker运行之jar包

docker运行jar包
发表于 07-18 13:20 101次 阅读
docker运行之jar包

Docker的安装及基础操作

Docker的安装与一些基础操作
发表于 07-16 13:47 101次 阅读
Docker的安装及基础操作

浅析无根容器的结构和漏洞

随着云计算的发展,容器变得越来越流行,同时也产生了实现容器的新方案,其中之一就是无根容器。无根容器是....
的头像 如意 发表于 07-02 10:44 793次 阅读
浅析无根容器的结构和漏洞

docker的笔记分享

【运维笔记】docker
发表于 06-16 10:32 135次 阅读
docker的笔记分享