Docker:作为开源的应用容器引擎 , 可以把应用程序和其相关依赖打包生成一个Image镜像文件 , 是一个标准的运行环境 , 提供可持续交付的能力 。一、背景基于分布式的架构中 , 需要管理的服务是非常多的 , 无论是服务的数量还是体系划分;
从服务的能力上看 , 可以进行分层管控 , 只是其中有相当一部分服务层 , 改动更新的频率很低 , 所以感知也不明显;
文章插图
就以自己当下参与研发的系统来说;
通过K8S进行管理的服务近百个 , 这中间有部分服务采用集群模式 , 即便是这个规模的系统 , 也几乎不可能依赖纯人工运维的形式 , 自动化流程必不可少;
二、持续集成此前围绕该主题写过一个完整的实践案例 , 主要围绕Jenkins、Docker、K8S等组件的使用层面 , 总结源码编译、打包、镜像构建、部署等自动化管理的流程;
文章插图
Jenkins:是一个扩展性非常强的软件 , 用于自动化各种任务 , 包括构建、测试和部署等;
Docker:作为开源的应用容器引擎 , 可以把应用程序和其相关依赖打包生成一个Image镜像文件 , 是一个标准的运行环境 , 提供可持续交付的能力;
Kube.NETes:作为开源的容器编排引擎 , 用来对容器化应用进行自动化部署、 扩缩和管理;
三、K8S架构1、核心组件
文章插图
Control-Plane-Components:控制平面组件
对集群做出全局决策 , 例如:资源调度、检测、事件响应 , 可以在集群中的任何节点上运行;
- api:开放K8S的API , 组件之间通过API交互 , 相当于控制面的前端;
- controllermanager:运行控制器进程 , 逻辑上是一个单独的进程;
- scheduler:监听新建未指定运行节点的Pods , 并为Pod选择运行节点;
- etcd:兼具一致性和高可用性的键值数据库 , 作为保存K8S数据的后台库;
该组件会在每个节点上运行 , 负责维护运行的Pod并提供Kubernetes运行环境;
- kubelet:在每个节点上运行的代理 , 保证容器都运行在Pod中;
- kube-proxy:每个节点上运行的网络代理 , 维护节点上的网络规则;
负责运行容器的软件 , 支持Docker、containerd、CRI-O等多个容器运行环境 , 以及任何实现Kubernetes-CRI容器运行环境接口;
2、分层结构从整体的功能上来考虑 , K8S集群可以分为:用户、控制平面、节点三个模块;
文章插图
用户侧:不论是CLI命令行还是UI界面 , 会与控制面板的APIserver进行交互 , APIserver再与其他组件交互 , 最终执行相应的操作命令;
控制平面:以前也称为Master , 核心组件包括APIserver、controller、scheduler、etcd , 主要用来调度整个集群 , 以及做出全局决策;
节点:通过将容器放入在节点上运行的Pod中来执行工作负载 , 简单的理解工作负载就是各种应用程序等 , 节点上的核心组件包括Pod、kubelet、Container-Runtime、kube-proxy等;
3、核心能力站在研发的视角来看 , K8S提供极其强大的应用服务管理能力;
3.1 发现与负载服务Service可以将运行在一个或一组Pod上的网络应用程序公开为网络服务的方法 , 通常使用标签对资源对象进行筛选过滤;
文章插图
3.2 调度调度器通过监测机制来发现集群中新创建且尚未被调度到节点上的Pod , 由于Pod中的容器和Pod本身可能有不同的资源要求 , 调度会将Pod放置到合适的节点上;
推荐阅读
- 揭密Java常用性能调优工具的底层实现原理
- 图像识别是怎么的运行原理?
- 两万字 redis.conf 7.0 配置和原理全解,生产王者必备
- 红外线遥感原理是什么?
- 汽车电路控制板的电子原理是什么?
- 公诉|40集《公诉》今晚开播,9位实力派坐镇,2大核心看点,有爆款潜质
- 地下城与勇士|DNF:15周年庆内容曝光!5大版本核心内容,2项值得期待
- 用ChatGPT搞定K8s!
- golang反射实现原理
- ChatGPT的打字回复效果,原理是什么?我带你们实现!