您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

整体上理解K8S流程和原理

时间:2023-06-06 17:29:21  来源:简书  作者:知了一笑

一、背景

基于分布式的架构中,需要管理的服务是非常多的,无论是服务的数量还是体系划分;

从服务的能力上看,可以进行分层管控,只是其中有相当一部分服务层,改动更新的频率很低,所以感知也不明显;


1.png

就以自己当下参与研发的系统来说;

通过K8S进行管理的服务近百个,这中间有部分服务采用集群模式,即便是这个规模的系统,也几乎不可能依赖纯人工运维的形式,自动化流程必不可少;

二、持续集成

此前围绕该主题写过一个完整的实践案例,主要围绕Jenkins、Docker、K8S等组件的使用层面,总结源码编译、打包、镜像构建、部署等自动化管理的流程;


2.png

Jenkins:是一个扩展性非常强的软件,用于自动化各种任务,包括构建、测试和部署等;

Docker:作为开源的应用容器引擎,可以把应用程序和其相关依赖打包生成一个Image镜像文件,是一个标准的运行环境,提供可持续交付的能力;

Kube.NETes:作为开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理;

三、K8S架构

1、核心组件


3.png

Control-Plane-Components:控制平面组件

对集群做出全局决策,例如:资源调度、检测、事件响应,可以在集群中的任何节点上运行;

  • api:开放K8S的API,组件之间通过API交互,相当于控制面的前端;
  • controllermanager:运行控制器进程,逻辑上是一个单独的进程;
  • scheduler:监听新建未指定运行节点的Pods,并为Pod选择运行节点;
  • etcd:兼具一致性和高可用性的键值数据库,作为保存K8S数据的后台库;

Node:节点组件

该组件会在每个节点上运行,负责维护运行的Pod并提供Kubernetes运行环境;

  • kubelet:在每个节点上运行的代理,保证容器都运行在Pod中;
  • kube-proxy:每个节点上运行的网络代理, 维护节点上的网络规则;

ContAIner-Runtime:容器运行时

负责运行容器的软件,支持Docker、containerd、CRI-O等多个容器运行环境,以及任何实现Kubernetes-CRI容器运行环境接口;

2、分层结构

从整体的功能上来考虑,K8S集群可以分为:用户、控制平面、节点三个模块;


4.png

用户侧:不论是CLI命令行还是UI界面,会与控制面板的APIserver进行交互,APIserver再与其他组件交互,最终执行相应的操作命令;

控制平面:以前也称为Master,核心组件包括APIserver、controller、scheduler、etcd,主要用来调度整个集群,以及做出全局决策;

节点:通过将容器放入在节点上运行的Pod中来执行工作负载,简单的理解工作负载就是各种应用程序等,节点上的核心组件包括Pod、kubelet、Container-Runtime、kube-proxy等;

3、核心能力

站在研发的视角来看,K8S提供极其强大的应用服务管理能力;

3.1 发现与负载

服务Service可以将运行在一个或一组Pod上的网络应用程序公开为网络服务的方法,通常使用标签对资源对象进行筛选过滤;


5.png

3.2 调度

调度器通过监测机制来发现集群中新创建且尚未被调度到节点上的Pod,由于Pod中的容器和Pod本身可能有不同的资源要求,调度会将Pod放置到合适的节点上;


6.png

3.3 自动伸缩

K8S可以通过指标检查工作负载的资源需求,例如CPU利用率、响应时长、内存利用率、或者其他,从而判断是否需要执行伸缩,垂直维度可以是更多的资源分配,水平维度可以是更多的集群部署;


7.png

K8S可以自动伸缩,也具备自动修复的能力,当节点故障或者应用服务异常时,会被检查到,可能会进行节点迁移或者重启;

四、应用案例

1、服务部署

在此前的实践案例中,用CLI命令行和脚本文件的方式,完成的部署动作,而在整个流程中涉及集群的多个组件协作,多次的通信和调度;

kubectl create -f pod.yaml


8.png

2、交互流程


9.png

【1】CLI命令行和UI界面,都是通过APIserver接口,与集群内部组件交互,比如上述的Pod部署操作;

【2】在APIserver收到请求之后,会将序列化状态的对象写入到etcd中完成存储操作;

【3】Scheduler调度器通过监测(Watch)机制来发现集群中新创建且尚未被调度到节点上的Pod;

【4】在集群中找到一个Pod的所有可调度节点,对这些可调度节点打分,选出其中得分最高的节点来运行Pod,然后调度器将这个调度决定通知给APIserver;

【5】APIserver完成信息存储后,然后通知相应节点的Kubelet;

【6】Kubelet是基于PodSpec来工作的,确保这些PodSpec中描述的容器处于运行状态且运行状况良好,每个PodSpec是一个描述Pod的YAML或JSON对象;

【7】Pod是可以在Kubernetes中创建和管理的、最小的可部署的计算单元,包括一个或多个容器;

五、参考源码

文档仓库:
https://gitee.com/cicadasmile/butte-JAVA-note

脚本仓库:
https://gitee.com/cicadasmile/butte-auto-parent


作者:知了一笑
链接:https://www.jianshu.com/p/9b4af059d58f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


Tags:K8S   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
我们一起聊聊K8s定时备份MySQL并发送到指定邮箱
边车容器(sidecar):边车容器就是与主容器一起在一个pod中运行的容器,为业务容器赋能,共享一个网络空间,所以可以用127.0.0.1:3306连接主容器的数据库。一、背景:一开始的初衷是,想...【详细内容】
2023-12-29  Search: K8S  点击:(72)  评论:(0)  加入收藏
升级就崩溃,K8s需要LTS版本!
Kubernetes集群不是在升级,就是在升级的路上。而对于维护K8s集群的团队来说,最担心的莫过于,系统因为K8s升级而引发了服务器大规模崩溃。想象一下,K8s升级发生在某个晚上,突然某...【详细内容】
2023-12-05  Search: K8S  点击:(215)  评论:(0)  加入收藏
k8s部署维护问题汇总
集群问题系统Error: unknown flag: --etcd-quorum-read删除service 里面的相应字段start request repeated too quickly for kube-apiserver.service查看是不是有之前的进程...【详细内容】
2023-11-30  Search: K8S  点击:(193)  评论:(0)  加入收藏
五分钟 k8s 实战-滚动更新与优雅停机
当我们在生产环境发布应用时,必须要考虑到当前系统还有用户正在使用的情况,所以尽量需要做到不停机发版。所以在发布过程中理论上之前的 v1 版本依然存在,必须得等待 v2 版本启...【详细内容】
2023-11-30  Search: K8S  点击:(237)  评论:(0)  加入收藏
五分钟 K8s 实战-应用探针
今天进入 kubernetes 的运维部分(并不是运维 kubernetes,而是运维应用),其实日常我们大部分使用 kubernetes 的功能就是以往运维的工作,现在云原生将运维和研发关系变得更紧密了...【详细内容】
2023-11-27  Search: K8S  点击:(181)  评论:(0)  加入收藏
Kubernetes创始人发声!K8s在被反噬!
Kubernetes 变得太复杂了,它需要学会克制,否则就会停止创新,直至丢失大本营。Kubernetes 联合创始人Tim Hockin 罕见发声。在今年的 KubeCon 上,他建议,Kubernetes 核心维护者应...【详细内容】
2023-11-27  Search: K8S  点击:(156)  评论:(0)  加入收藏
K8s-服务网格实战-配置 Mesh(灰度发布)
在上一篇 k8s-服务网格实战-入门Istio中分享了如何安装部署 Istio,同时可以利用 Istio 实现 gRPC 的负载均衡。今天我们更进一步,深入了解使用 Istio 的功能。从 Istio 的流量...【详细内容】
2023-11-08  Search: K8S  点击:(339)  评论:(0)  加入收藏
Wasm的野心:取代K8s,不如结合K8s
作者丨B. Cameron Gain编译丨诺亚出品 | 51CTO技术栈(微信号:blog51cto)虽然WebAssembly (Wasm)已被证明在浏览器和某些有针对性的服务器部署中可以很好地工作,但允许开发人员“...【详细内容】
2023-11-07  Search: K8S  点击:(375)  评论:(0)  加入收藏
在本地 K8s 中轻松部署自签 TLS 证书
随着互联网的飞速发展,安全性日益成为我们关注的焦点。HTTPS 已从一项奢侈的技术逐渐成为现代网络交互的标准。它不仅仅是保护信息的重要工具,更是实现信任和品质的象征...【详细内容】
2023-11-03  Search: K8S  点击:(254)  评论:(0)  加入收藏
K8s-服务网格实战-入门Istio
背景终于进入大家都比较感兴趣的服务网格系列了,在前面已经讲解了: 如何部署应用到 kubernetes 服务之间如何调用 如何通过域名访问我们的服务 如何使用 kubernetes 自带的配...【详细内容】
2023-11-01  Search: K8S  点击:(230)  评论:(0)  加入收藏
▌简易百科推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  小白debug  微信公众号  Tags:Docker   点击:(12)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22    51CTO  Tags:Docker   点击:(10)  评论:(0)  加入收藏
Containerd容器管理
Nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。容器基本操作容器基本操作主要是 ctr image 命令,查看命令帮...【详细内容】
2024-03-20  云原生运维圈  微信公众号  Tags:容器   点击:(13)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  云原生运维圈  微信公众号  Tags:Docker   点击:(22)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01    简易百科  Tags:Kubernetes   点击:(154)  评论:(0)  加入收藏
我们一起聊聊容器资源自愈
在企业实际在使用容器这类资源的时候,除了技术本身,要考虑的其他问题也会很多。企业管理的容器有千千万万,出于效率考虑,对于有特殊需求的容器如何进行批量创建和管理呢,这就需要...【详细内容】
2024-01-30  匠心独运维妙维效  微信公众号  Tags:容器   点击:(47)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  waynblog  微信公众号  Tags:Docker   点击:(65)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  编程技术汇  今日头条  Tags:Docker   点击:(77)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04    Linux中国  Tags:Docker   点击:(124)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  云云众生s  微信公众号  Tags:Kubernetes   点击:(114)  评论:(0)  加入收藏
站内最新
站内热门
站内头条