kubernetes的初认识

article/2025/10/10 19:02:50

1.先谈容器。

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

一个正在运行的linux容器,其实可以被“一分为二”地看待:

  1. 一组联合挂载在/var/lib/docker/overlay2下的rootfs,这部分我们称为“容器镜像”(Container Images),是容器的静态视图;
  2. 一个由Namespace+Cgroups构建的隔离环境,这一部分我们称为”容器运行时“(Container Runtime),是容器的动态视图。

rootfs(根文件系统)为挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的”容器镜像“

rootfs由如下s三个部分组成的。 

 2.浅谈kubernetes

容器就从一个开发者手里的小工具,一跃成为了云计算领域的绝对主角;而能够定义容器组织和管理规范的“容器编排”技术,则当仁不让地坐上了容器技术领域的“头把交椅”。

kubernetes是由master节点和node节点组成,也就是控制节点和计算节点。

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

而计算节点最核心的部分,则是一个叫作kubelet的组件。

在kubernetes项目中,kubelet通过一个称作CRI(Container Runtime Interface)的远程调用接口来进行交互的,这个接口定义了容器运行时的各项核心操作,这说明kubernetes并不需要知道,你用的是什么容器进行时,比如docker项目,新出来的container项目等等,或者你用的什么技术。只要你可以运行一个标准的容器镜像,他就可以通过实现CRI接入到你的容器中,并得到你所启动的容器的所有参数。

而 kubelet 的另一个重要功能,则是调用网络插件和存储插件为容器配置网络和持久化存储。这两个插件与 kubelet 进行交互的接口,分别是 CNI(Container Networking Interface)和 CSI(Container Storage Interface)。

到这里我们就可以看出kubernetes项目从一开始就没有把docker项目当成他的核心项目,而是巧妙的设置了很多的接口用来连接容器,这样的话,就算几十年后docker遗弃了 。只要新的容器运行时项目编写的是标准的容器镜像,他们也可以通过接口服务来进行编排。而同时期的其他”容器云项目“基本都是把当时最火的docker项目作为了自己最核心的项目,只要docker项目没办法满足新时代的技术要求时,那他们的产品也就没有用了。

3.kubernetes作业编排和管理系统的实现

其实对于一个容器编排工具,最困难的地方并不是连接到容器中去,真正困难的是:运行在大规模集群中的各种任务之间,实际上存在着各种各样的关系。这些关系的处理,才是作业编排和管理系统最困难的地方。

这种任务与任务之间的关系,在我们平常的各种技术场景中随处可见。比如,一个 Web 应用与数据库之间的访问关系,一个负载均衡器和它的后端服务之间的代理关系,一个门户应用与授权组件之间的调用关系。

更进一步地说,同属于一个服务单位的不同功能之间,也完全可能存在这样的关系。比如,一个 Web 应用与日志搜集组件之间的文件交换关系。

而docker compose和swarm也是可以通过”link“解决的。

DB_NAME=/web/dbDB_PORT=tcp://172.17.0.5:5432DB_PORT_5432_TCP=tcp://172.17.0.5:5432DB_PORT_5432_TCP_PROTO=tcpDB_PORT_5432_TCP_PORT=5432DB_PORT_5432_TCP_ADDR=172.17.0.5

但是只有一个”link“ 想要满足我们上面的所有类型的关系,而不仅仅是web和db之间的联系,就显得太过于简单了,而且还要满足未来的各种类型的联系,这样看的话,docker得compose和swarm就有些不合适了。

所以,Kubernetes 项目最主要的设计思想是,从更宏观的角度,以统一的方式来定义任务之间的各种关系,并且为将来支持更多种类的关系留有余地。

 按照这幅图的线索,我们从容器这个最基础的概念出发,首先遇到了容器间“紧密协作”关系的难题,于是就扩展到了 Pod;有了 Pod 之后,我们希望能一次启动多个应用的实例,这样就需要 Deployment 这个 Pod 的多实例管理器;而有了这样一组相同的 Pod 后,我们又需要通过一个固定的 IP 地址和端口以负载均衡的方式访问它,于是就有了 Service。

可是,如果现在两个不同 Pod 之间不仅有“访问关系”,还要求在发起时加上授权信息。最典型的例子就是 Web 应用对数据库访问时需要 Credential(数据库的用户名和密码)信息。那么,在 Kubernetes 中这样的关系又如何处理呢?

Kubernetes 项目提供了一种叫作 Secret 的对象,它其实是一个保存在 Etcd 里的键值对数据。这样,你把 Credential 信息以 Secret 的方式存在 Etcd 里,Kubernetes 就会在你指定的 Pod(比如,Web 应用的 Pod)启动时,自动把 Secret 里的数据以 Volume 的方式挂载到容器里。这样,这个 Web 应用就可以访问数据库了。

除了应用与应用之间的关系外,应用运行的形态是影响“如何容器化这个应用”的第二个重要因素。

为此,Kubernetes 定义了新的、基于 Pod 改进后的对象。比如 Job,用来描述一次性运行的 Pod(比如,大数据任务);再比如 DaemonSet,用来描述每个宿主机上必须且只能运行一个副本的守护进程服务;又比如 CronJob,则用于描述定时任务等等。

参看文献:

《深入解剖Kubernetes》张磊注


http://chatgpt.dhexx.cn/article/CfrP5Sd9.shtml

相关文章

KubeSphere简介,功能介绍,优势,架构说明及应用场景

目录 一、KuberSphere简介 1.1 功能介绍 1.2 Kubernetes 资源管理 1.3 微服务治理 1.4 多租户管理 1.5 DevOps 工程 1.6 Source to Image 1.7 多维度监控 1.8 自研多租户告警系统 1.9 日志查询与收集 1.10 应用管理与编排 1.11 基础设施管理 1.12 多存储类型支持…

云原生钻石课程 | 第4课:Kubernetes存储架构原理深度剖析(上)

点击上方“程序猿技术大咖”,关注并选择“设为星标” 回复“加群”获取入群讨论资格! 本篇文章来自《华为云云原生王者之路训练营》钻石系列课程第4课,由云原生存储解决方案Everest2.0的架构设计专家Jabin主讲,详细介绍云原生存储…

1.k8s基本使用(测试加分)

测试为什么要学习容器技术及k8s k8s不是运维的专属技术 随着互联网技术的发展,架构也已经从单体架构发展到容器云( “微服务 k8s” 完美结合) 很多人认为,k8s只是运维需要掌握的技术,讲真,测试和运维、开发都有技术交集 所以&…

Kubernetes 持久化存储(Pod Volumes,PV和PVC)

一、Volumes 介绍 Pod Volumes 首先来看一下 Pod Volumes 的使用场景: 场景一:如果 pod 中的某一个容器在运行时异常退出,被 kubelet 重新拉起之后,如何保证之前容器产生的重要数据没有丢失?场景二:如果…

面试题引出的知识点整理

1、自旋锁&可重复锁&公平锁&共享锁&分段锁你都知道吗? 2、无锁&偏向锁&轻量级锁&重量级锁如何膨胀升级? 3、Lock底层AQS实现与Synchronized底层实现异同? 4、LongAdder的分段CAS优化机制如何设计的? 5、Java多线程内存模型…

云集成,给超大规模K8s运维带来的丝滑体验

根据IDC统计,未来五年容器基础架构软件市场将以超过40%的复合增长率爆发式增长,行业也从互联网向更多的传统行业渗透,比如金融、政府、电信,制造和能源等行业。 近年来,随着云技术的日益普及,越来越多的企…

Spring

目录 1.spring介绍 spring中的两个核心概念 1.1 IoC 1.2 AoP 1.3 Spring的优点 1.4 Spring工程构建 1.4.1 Maven Spring 依赖 1.4.2 Spring核心配置文件编写 1.4.2.1 完成控制反转以及依赖注入 1.4.2.2 测试 1.4.2.3 Spring中的IOC 产生的对象是否是单例模式 1.5 B…

动静分离 与 热点缓存

动静分离 让系统“快”起来:1、提高单次请求的效率2、减少没必要的请求 “动静分离”就是瞄着这个大方向去的。所谓“动静分离”,其实就是把用户请求的数据(如HTML页面)划分为“动态数据”和“静态数据”。简单来说,“…

天猫浏览型应用的CDN静态化架构演变

转载自:http://zhu-zhiguo.iteye.com/blog/2145496 在天猫双11活动中,商品详情、店铺等浏览型系统,通常会承受超出日常数倍甚至数十倍的流量冲击。随着历年来双11流量的大幅增加, 每年这些浏览型系统都要面临容量评估、硬件扩容、…

java 确保线程安全_确保不安全感

java 确保线程安全 33岁的克雷格斯宾塞(Craig Spencer)在治疗埃博拉病毒患者后于10月17日从非洲返回美国。 几天后,他的埃博拉病毒呈阳性React。 每个人(尤其是周围的人)和纽约人都感到关切。 纽约市市长走到媒体前&am…

经验:一个秒杀系统的设计思考

前言 秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。 从架构视角来看,秒杀系统本质是一个高性能、高一…

Java调用C++/C

Java调用C/C有3中方式:JNI、JNA、JNative。 注:1、个人觉得还是JNA的方式最好。 2、Java和C/C交互的难点在于数据结构的对应 3、java不可以直接调用C#代码,C#代码需要托管 JNI (Android调用,普通java类似)…

kubernetes 静态存储与动态存储

静态存储 Kubernetes 同样将操作系统和 Docker 的 Volume 概念延续了下来,并且对其进一步细化。Kubernetes 将 Volume 分为持久化的 PersistentVolume 和非持久化的普通 Volume 两类。为了不与前面定义的 Volume 这个概念产生混淆,后面特指 Kubernetes …

Java多线程整理

目录 1. 进程与线程 1.1 进程 1.2 线程 1.3 并发与并行 2. 多线程 2.1 多线程的概念 2.2 多线程的好处 2.3 主线程 3. 线程的创建与启动 3.1 继承Thread类 3.2 实现Runnable接口 3.3 实现Callable接口 3.4 run方法调用和start调用的区别 4.线程的状态 4.1 线程状…

th和td标签的区别

th和td标签的区别 开发工具与关键技术: Dw HTML 作者:邹贺汗 撰写时间:2019年2月4日 在写这篇文章的时候我就知道虽然我发的不是第一个,但是说不定我写刚好给有需要的人看到了呢,所以我就写了这篇文章,下面…

html中th标签添加方法,HTML th 标签

HTML 标签 标签表示HTML表格的表头部分,该标签中的内容会以粗体显示,请参考下述示例: 实例 一个简单的 HTML 表格,带有两个表头单元格和两个数据单元格: MonthSavingsJanuary$100 尝试一下 (更多实例见页面底部) 浏览…

thymeleaf标签之th:href的使用

项目中使用springboot来进行开发,自然也就接触到了thymeleaf这套模板,如果你对c标签很熟悉的话,我觉得上手这个应该是很快的。 介绍下th:href在项目中的使用。 它的写法与th:src一样 一般写法为th:href"{值}" 如果是需要从model…

使用thymeleaf时,th:类标签失效的原因

问题出现: 最近学习后端,学到了thymeleaf这一块,学习中出现了一个问题我没有注意到,导致后面页面编写出现重大bug:项目中我使用了thymeleaf,配置的映射路由为:/index,访问首页的时候…

HTML——表头标签th的属性

<th>标签的属性和<td>标签的属性及语法格式非常的相似&#xff0c;用于设定表格中某一表头的属性。 <th>标签中常用的属性 标签描述align设置单元格内容的水平对齐方式valign设置单元格内容的垂直对齐方式bgcolor设置单元格的背景颜色background设置单元格的…

标签thead与th的区别

标签thead与th的区别 如图所示&#xff0c;thead 和 tbody标签在tr外层&#xff0c;具有更好的语义化&#xff0c;而th在 tr 之内&#xff0c;与td同级&#xff0c;起到文字加粗的效果