[k8s]谈谈 k8s 的本质

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 当下 k8s 算是比较火的一个内容,那么它到底是什么呢,它为什么会这么火呢,它解决的是什么问题呢.当我们谈 k8s 的时候,总是会想起来 Docker .是的,如果想要知道 k8s 解决的是什么问题,我们不可避免的再回到 Docker 上面,回到容器上面来.

当下 k8s 算是比较火的一个内容,那么它到底是什么呢,它为什么会这么火呢,它解决的是什么问题呢.

当我们谈 k8s 的时候,总是会想起来 Docker .是的,如果想要知道 k8s 解决的是什么问题,我们不可避免的再回到 Docker 上面,回到容器上面来.

在"开发-测试-发布"的流程中,真正承载着容器信息进行传递的,是容器镜像.所以,当 Docker 项目成功后不久,它就迅速走向"容器编排"的重要原因:作为一家云服务商或者基础设施提供商,我只要能够将用户提交的 Docker 镜像以容器的方式运行起来,就能成为容器生态圈上的一个承载点,从而将整个容器技术栈上的价值,沉淀在我的这个节点上.此外,只要从我这个承载点向 Docker 镜像制作者和使用者方向回溯,整条路径上的各个服务节点,比如监控,安全,网络,存储等等,都有可以发挥和盈利的地方.

所以,这也是为什么云计算提供商如此热衷于容器技术的重要原因:我可以通过容器镜像,和潜在用户(开发者)直接关联起来.

基于以上,容器从一个开发者手里的小工具,一跃成为了云计算领域的绝对主角;而能够定义容器组织和管理规范的"容器编排"技术,则当仁不让的成为了当下最火热的技术.

那么, k8s 要解决的问题是什么?编排?调度?还是集群管理?

这个问题,到现在也没有固定的答案,因为在不同的发展阶段, k8s 需要着重解决的问题是不一样的.对于大多数用户来说,有一点是确定的:现在我有了应用的容器镜像,请帮我在一个给定的集群上把这个应用运行起来.更进一步说,我现在有了一个能够应用的容器镜像,那么我还希望 k8s 能够给我提供路由网关,监控,备份等一系列运维能力. 说到这里,我们就需要来讲讲 k8s 的架构了.

54.jpg

从上图中我们能够看到, k8s 项目的架构,由 Master 和 Node 两种节点组成. Master 节点(即控制节点),由三个紧密协作的独立组件组合而成,它们分别是负责 API 服务的 kube-apiserver ,负责调度的 kube-scheduler ,以及负责容器编排的 kube-controllermanager .而整个集群的持久化数据,则由 kube-apiserver 处理后保存在 Etcd 中.

计算节点上最核心的部分,是一个叫做 kubelet 的组件.在 k8s 项目中, kubelet 主要负责同容器运行时(比如 Docker 项目)打交道.而这个交互所依赖的,是一个称作 CRI(Container Runtime Interface) 的远程调用接口,这个接口定义了容器运行时的各项核心操作.这也是为什么, k8s 项目并不关心你部署的是什么容器在运行,使用的什么技术实现,只要你的容器运行时能够运行标准的容器镜像,它就可以通过实现 CRI 接入到 k8s 项目当中.

正是因为如此, k8s 项目没有像同时期的各种"容器云"项目那样,把 Docker 作为整个架构的核心,而仅仅把它作为最底层的一个容器运行时实现.

运行在大规模集群中的各种任务之间,实际上存在着各种各样的关系,这些关系的处理,才是作业编排和管理系统最困难的地方.而这也是 k8s 项目要着重解决的问题.

k8s 着重解决的问题,也比较好理解.在容器技术普及之前,传统虚拟机环境对各种关系的处理方法都是比较"粗粒度"的.如果你善于发现,你会经常看到很多功能并不相关的应用被一股脑儿的部署在同一台虚拟机中,只是因为它们之间偶尔会互相发起几个 HTTP 请求.更常见的情况就是,当一个应用被部署在虚拟机里之后,你还需要手动维护很多跟它协作的守护进程,用来处理它的日志搜集,灾难恢复等辅助工作.

但当容器技术出现后,你会发现,在"功能单位"的划分上,容器有着独一无二的"细粒度"的优势:因为容器的本质,就是一个进程而已.

这样的意思就是说,只要你愿意,那些原来拥挤在同一个虚拟机里的各个应用,组件,守护进程,都可以被分别做成镜像,然后运行在一个个专属容器中.它们之间互不干涉,拥有各自的资源配额,可以被调度在整个集群里的任何一台机器上.这也是"微服务"思想能够落地的前提条件.

在上文中说了, k8s 项目着重要处理的问题是,对于各种关系的处理.先来一张 k8s 项目核心功能的"全景图":

55.jpg

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

讲了这么多,那么 k8s 的本质是什么呢? 它的本质是为用户提供一个具有普遍意义的容器编排工具.如果非要一个很形象的比喻的话,你可以把它理解为操作系统.

过去很多集群管理项目所擅长的都是把一个容器,按照某种规则,放置在某个最佳节点上运行起来,这种功能我们称为"调度".但 k8s 项目所擅长的,是按照用户的意愿和整个系统的规则,完全自动化处理好容器之间的各种关系,这种功能,叫做编排.

但是 k8s 为用户提供的不仅限于一个工具,它真正的价值,在于提供了一套基于容器构建分布式系统的基础依赖.

最后,上一张导图吧,算是对以上内容的一个总结(是不是看到导图就觉得好理解一些):

56.jpg

以上内容来自我学习<深入剖析Kubernetes>专栏文章之后的一些见解,有偏颇之处,还望指出.

欢迎加入我们的知识星球,一起成长,交流经验。加入方式,长按下方二维码噢

最后,我想重复一句话:选择和一群优秀的人一起成长,你成长的速度绝对会不一样!

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
资源调度 前端开发 jenkins
前端工程化(Frontend Tooling):优化开发流程的关键
前端工程化是现代Web开发的关键组成部分,它包括一系列工具、实践和流程,旨在提高开发效率、代码质量和可维护性。本博客将深入探讨前端工程化的概念、工具以及如何在项目中应用它们,以改善您的前端开发体验。
1022 0
|
XML Java 数据格式
肝了30天总结,史上最全面透彻的Spring核心原理分析和27道高频面试题
在阅读面试题之前,小伙伴们可以先看看我之前发布的系列文章,Spring核心原理包括源码分析和用30个类手写。面试刷题固然很重要,但是知其然知其所以然更重要。
2026 4
肝了30天总结,史上最全面透彻的Spring核心原理分析和27道高频面试题
|
设计模式 前端开发 Java
总结丨Spring 源码学习,看这一篇就够了
在日常工作中,产品不断写业务需求,他们加班一天,我们开发就得工作一周来完成。 业务领域达到一定地步后,发现日常编写业务代码已经很难让我有突破性的进步,日复一日,担心自己变成一个业务代码生产机器,而无法面对新技术和环境变化。 同时也有危机感,长江后浪推前浪,自己不继续学习的话,很快就会有人超过。 而且我算是比较热心的好同学,喜欢帮别人解决问题和记录解决方案,所以不希望在别人问我工作中有什么常用的框架,遇到这个问题该怎么办,我却回答不上的感觉
7545 1
总结丨Spring 源码学习,看这一篇就够了
|
前端开发 数据可视化 API
顶级好用的 React 表单设计生成器,可拖拽生成表单
React 前端开发中,表单组件是排在前三的高频使用的组件,如何快速构建表单,节省力气,避免重复造轮子呢,选择一款适合自己的前端表单设计生成器就非常重要了。本文介绍 3 款顶级好用的 React 表单设计器,其中最后一款卡拉云,是新一代低代码开发工具,不仅能自动生成各类表单,还可以拖拽生成其他常见的前端组件,一行代码连接前后端数据,可快速接入数据库/api。它是表单设计器的超集,可直接生成属于你的后台管理工具,无敌好用。
3690 0
|
JSON 移动开发 JavaScript
多款顶级好用的 Vue 表单设计器测评推荐,可拖拽生成表单
Vue 前端开发中,表单组件是排在前三的高频使用的组件,如何快速构建表单,节省力气,避免重复造轮子呢,选择一款适合自己的前端表单设计器就非常重要了。本文介绍 4 款顶级好用的 Vue 表单设计器,其中最后一款卡拉云,是新一代低代码开发工具,不仅能自动生成各类表单,还可以拖拽生成其他常见的前端组件,一行代码连接前后端数据,可快速接入数据库/api。它是表单设计器的超集,可直接生成属于你的后台管理工具,无敌好用。
4151 0
多款顶级好用的 Vue 表单设计器测评推荐,可拖拽生成表单
|
11月前
|
Java 测试技术 开发者
必学!Spring Boot 单元测试、Mock 与 TestContainer 的高效使用技巧
【10月更文挑战第18天】 在现代软件开发中,单元测试是保证代码质量的重要手段。Spring Boot提供了强大的测试支持,使得编写和运行测试变得更加简单和高效。本文将深入探讨Spring Boot的单元测试、Mock技术以及TestContainer的高效使用技巧,帮助开发者提升测试效率和代码质量。
959 2
|
关系型数据库 分布式数据库 数据库
开源之夏2024学生报名启动!阿里云PolarDB社区项目期待你的参与!
开源之夏2024学生报名启动!阿里云PolarDB社区带你变得更强!
开源之夏2024学生报名启动!阿里云PolarDB社区项目期待你的参与!
|
存储 SQL 数据库
达梦(DM)数据库管理表
达梦(DM)数据库表管理
达梦(DM)数据库管理表
|
消息中间件 缓存 JavaScript
Nacos+@RefreshScope 为什么配置能动态刷新?
Nacos+@RefreshScope 为什么配置能动态刷新?
|
Kubernetes 容器
搭建K8S环境单机K8S集群
搭建K8S环境单机K8S集群
612 0