Kubernetes小感

news2024/11/16 7:56:41

从容器到容器云,谈谈 Kubernetes 的本质:

一个“容器”,实际上是一个由 Linux Namespace、Linux Cgroups 和 rootfs 三种技术构建出来的进程的隔离环境。

作为一名开发者,我并不关心容器运行时的差异。因为,在整个“开发 - 测试 - 发布”的流程中,真正承载着容器信息进行传递的,是容器镜像,而不是容器运行时。

容器技术圈在 Docker 项目成功后不久,就迅速走向了“容器编排”这个“上层建筑”:

作为一家云服务商或者基础设施提供商,我只要能够将用户提交的 Docker 镜像以容器的方式运行起来,就能成为这个非常热闹的容器生态图上的一个承载点,从而将整个容器技术栈上的价值,沉淀在我的这个节点上。

容器从一个开发者手里的小工具,一跃成为了云计算领域的绝对主角;而能够定义容器组织和管理规范的“容器编排”技术,则当仁不让地坐上了容器技术领域的“头把交椅”。
这其中,最具代表性的容器编排工具,当属 Docker 公司的 Compose+Swarm 组合,以及 Google 与 RedHat 公司共同主导的 Kubernetes 项目。

对于大多数用户来说,他们希望 Kubernetes 项目带来的体验是确定的:现在我有了应用的容器镜像,请帮我在一个给定的集群上把这个应用运行起来。

更进一步地说,我还希望 Kubernetes 能给我提供路由网关水平扩展监控备份灾难恢复等一系列运维能力。

请添加图片描述
Kubernetes 项目的架构,跟它的原型项目 Borg 非常类似,都由 Master 和 Node 两种节点组成,而这两种角色分别对应着控制节点和计算节点

其中,控制节点,即 Master 节点,由三个紧密协作的独立组件组合而成,它们分别是负责 API 服务的 kube-apiserver、负责调度的 kube-scheduler,以及负责容器编排的 kube-controller-manager。整个集群的持久化数据,则由 kube-apiserver 处理后保存在 Etcd 中。

而计算节点上最核心的部分,则是一个叫作 kubelet 的组件。
在 Kubernetes 项目中,kubelet 主要负责同容器运行时(比如 Docker 项目)打交道。而这个交互所依赖的,是一个称作 CRI(Container Runtime Interface)的远程调用接口,这个接口定义了容器运行时的各项核心操作,比如:启动一个容器需要的所有参数。这也是为何,Kubernetes 项目并不关心你部署的是什么容器运行时、使用的什么技术实现,只要你的这个容器运行时能够运行标准的容器镜像,它就可以通过实现 CRI 接入到 Kubernetes 项目当中。而具体的容器运行时,比如 Docker 项目,则一般通过 OCI 这个容器运行时规范同底层的 Linux 操作系统进行交互,即:把 CRI 请求翻译成对 Linux 操作系统的调用(操作 Linux Namespace 和 Cgroups 等)。

此外,kubelet 还通过 gRPC 协议同一个叫作 Device Plugin 的插件进行交互。这个插件,是 Kubernetes 项目用来管理 GPU 等宿主机物理设备的主要组件,也是基于 Kubernetes 项目进行机器学习训练、高性能作业支持等工作必须关注的功能。而 kubelet 的另一个重要功能,则是调用网络插件和存储插件为容器配置网络和持久化存储。这两个插件与 kubelet 进行交互的接口,分别是 CNI(Container Networking Interface)和 CSI(Container Storage Interface)。

实际上,kubelet 这个奇怪的名字,来自于 Borg 项目里的同源组件 Borglet。不过,如果你浏览过 Borg 论文的话,就会发现,这个命名方式可能是 kubelet 组件与 Borglet 组件的唯一相似之处。因为 Borg 项目,并不支持我们这里所讲的容器技术,而只是简单地使用了 Linux Cgroups 对进程进行限制。这就意味着,像 Docker 这样的“容器镜像”在 Borg 中是不存在的,Borglet 组件也自然不需要像 kubelet 这样考虑如何同 Docker 进行交互、如何对容器镜像进行管理的问题,也不需要支持 CRI、CNI、CSI 等诸多容器技术接口。

Kubernetes 项目的本质,是为用户提供一个具有普遍意义的容器编排工具。

不过,更重要的是,Kubernetes 项目为用户提供的不仅限于一个工具。它真正的价值,乃在于提供了一套基于容器构建分布式系统的基础依赖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(核心组件说明)

零基础全方位带你学习探索Docker容器开发实战指南(核心组件说明) 核心组件镜像定义概念与容器的关联文件系统root文件系统 bootfs启动文件系统分层存储分层覆盖处理模式镜像的写时复制机制 容器容器进程隔离性容器进程隔离性容器存储层数据卷绑定镜像和容…

Spring6-01

Spring6启示录 OCP开闭原则 什么是开闭原则? 在软件开发过程中应当对扩展开放,对修改关闭。也就是说如果在进行功能扩展的时候,添加额外的类是没有问题的,但因为功能扩展而修改之前运行正常的程序,这是不被允许的。因…

Elasticsearch:二进制数据类型 - binary field

二进制(binary)类型接受二进制值作为 Base64 编码字符串。 该字段默认不存储且不可搜索。Base64 编码的二进制值不得嵌入换行符 \n。 这听起来像是,将二进制对象存储在 Elasticsearch 中的单个字段中 PUT my-index-000001 {"mappings&…

Jupyter Notebook 插件和其他小技巧

好用的插件 安装插件代码自动补全变量查看高亮代码折叠显示行号执行时间多行打印规范化代码模块快速获取jupyter notebook中安装包快捷键 安装插件 1.pip直接安装 pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user2.方法1不成功就用ano…

STM32踩坑:UCOSIII下串口中断服务中使用OSIntEnter函数使程序卡死解决方案

UCOSIII下串口中断服务中使用OSIntEnter函数使程序卡死解决方案 本文侧重于 STM32 标准库,HAL 库可以借鉴,因为该项目是基于标准库做的(因为涉及到保密,这里我就张贴源码进行描述了)。 因项目需求,需要使用…

广域网技术——ppp,pppoe

目录 PPP协议概述 PPP协议原理 PPP协议三大组件: PPP链路建立流程 PPP连接建立接口状态: LCP协议报文格式 PPP协议报文格式: 1,链路层建立连接过程 LCP协商过程-正常协商 LCP协商-参数不一致 LCP协商-参数不识别 2&#xf…

JVM调优工具及其相关配置

1.查看JVM配置及其应用使用情况 1.1在启动应用中进行测试 1jsp命令的使用 1.jsp查看当前启动的程序 2.查看相关堆中对象的使用情况 jmap -histo 16700>./log.txtnum:序号instances:实例数量bytes:占用空间大小class name:类…

记录 | 将Word生成的静态网页部署到Github Page

任务描述 使用Word, 可以直接获得 一个静态的网页XXX.html和对应的文件夹XXX.files问题:如何将它托管在github上? 步骤 使用github pages进行托管和发布 步骤1:创建仓库 创建一个新的GitHub仓库:访问 https://github.com 并使用…

matplotlib模块

目录 ❤ 条形图 ❤ 直方图 ❤ 折线图 ❤ 散点图直线图 ❤ 饼图 ❤ 箱型图 ❤ plot函数参数 ❤ 图像标注参数 ❤ Matplolib应用 python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm1001.2014.3001.5502 …

物联网Lora模块从入门到精通(九)Flash的读取与存储--结题

一、前言 这将是"物联网Lora模块从入门到精通"系列的最后一篇文章,相信各位同僚通过前面八篇文章的分享已经极好的掌握了Lora模块的编程,本文的Flash的读取与存储将是Lora模块开发的最后一块,感谢大家的陪伴与支持! 希望…

SpringCloud(五)

文章目录 负载均衡策略自定义负载均衡策略饥饿加载 负载均衡策略 负载均衡的规则都定义在IRule接口中,而IRule有很多不同的实现类: 不同规则的含义如下: 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribb…

Redis高级特性之慢查询的基本概念

慢查询概念 作为存储系统,Mysql等等,提供慢查询日志帮助开发和运维人员定位系统存在的满操作。慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预期阈值,便会将这条命令的相关信息。例如发生的时间,耗…

【零基础学JS - 10 】javaScript 中的比较和逻辑运算符

👨‍💻 作者简介:程序员半夏 , 一名全栈程序员,擅长使用各种编程语言和框架,如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个…

mysql8安装【含mysql安装包】

mysql8安装【含mysql安装包】 安装包等资源安装流程 安装包等资源 安装包下载地址【CSDN免费】:https://download.csdn.net/download/qq_47168235/87881866 如果上面的个下载不了,就通过百度网盘吧 百度网盘连接:https://pan.baidu.com/s/1G…

pycharm使用之torch_sparse安装

正式安装之前要先查看一下torch的版本 一、查看torch版本 1、winR ,输入cmd 2、输入python 3、 输入import torch,然后输入torch.__version__,最后回车 可以看到我的torch版本是1.10.0 二、下载合适的torch_sparse版本 1、打开链接 https…

[LsSDK][tool] ls_syscfg_gui2.1 and ls_syscfg_debug1.0

文章目录 一、简介1.工具的目的2. 更新点下个更新 三、配置文件 一、简介 1.工具的目的 ① 可视化选择IO口功能。 ② 自由配置IO支持的功能。 ③ 适用各类MCU,方便移植和开发。 ④ 功能配置和裁剪(选项-syscfg-待完成–需要适配keil语法有些麻烦&#…

只需一个Prompt,ChatGPT秒变万能导师,轻松学习任意领域知识

AI正在改变我们生活的方方面面,包括我们学习的方式。AI已经证明自己有能力成为我们的助手甚至是老师,帮助我们更有效地获取知识。 拿ChatGPT来说,我们平时有什么问题都可以向它提问,不过想让它更高效的帮助我们,还是需…

C++多态和文件读写

C黑马,每天1.5倍速2个视频(1小时),看到9月1日完成314个视频 目录 🔑多态 🌳基本语法 🌳原理剖析 🌳案例1 -- 计算器类 🌳纯虚函数和抽象类 🌳案例2 --…

区块链世界的大数据入门之zkMapReduce简介

1. 引言 跨链互操作性的未来将围绕多链dapp之间的动态和数据丰富的关系构建。Lagrange Labs 正在构建粘合剂,以帮助安全地扩展基于零知识证明的互操作性。 2. ZK大数据栈 Lagrange Labs 的ZK大数据栈 为一种专有的证明结构,用于在任意动态分布式计算的…

Nginx本地启动前端Vue项目

1.Nginx下载及安装 下载地址:nginx: download 下载stable稳定版本,解压安装包 2.前端项目打包 使用cnpm/npm run serve 或 yarn serve将前端项目打包,记录dist文件夹路径 3.nginx.conf 填写 根目录下conf文件夹有nginx.conf文件&#xf…