[云原生之k8s] Kubernetes原理

news2024/12/21 10:23:57

引言

单机容器编排:docker-compose

容器集群编排:docker swarm、mesos+marathon、kubernetes

应用编排:ansible

一、Kubernetes是什么?

Kubernetes的缩写为:K8S,这个缩写是因为k和s之间有八个字符的关系。
Kubernetes是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes拥有一个庞大且快速增长的生态系统。Kubernetesd的服务、支持和工具广泛可用。

1.1、K8S的由来

K8S由google的Borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经Go语言延用Borg的思路重写并捐献给CNCF基金会开源。

Kubernetes 这个名字源于希腊语**,意为“舵手”或“飞行员”。**

官网: https://kubernetes.io

GitHub: https://github.com/kubernetes/kubernetes

1.2、K8S的作用

用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统

可以理解成K8S是负责自动化运维管理多个容器化程序(比如docker)的集群,是一个生态机器丰富的容器编排架构工具

二、为什么需要Kubernetes,它能做什么?

容器是打包和运行应用程序的好方式。在生产环境中,你需要管理运行应用程序的容器,并确保不会停机。例如,如果一个容器发生故障,则需要启动另一个容器。如果系统处理此行为,会不会更容易。

这就是Kubernetes来解决这些问题的方法!Kubernetes为你提供了一个可弹性运行分布式系统的框架。Kubernetes会满足你的扩展要求,故障转移,部署模式等。

K8S是Google开源的容器集群管理系统,在Docker等容器技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。其主要功能如下:

  1. 使用Docker等容器技术对应应用程序包装(package)、实例比(instantiate)、运行(run)。
  2. 以集群的方式运行、管理跨机器的容器
  3. 解决Docker跨机器容器之间的通讯问题
  4. K8S的滋味修复机制使得容器集群总数运行在用户期望的状态

三、Kubernetes的特性

  1. 弹性伸缩:使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性,业务低峰时回收资源,以最小成本运行服务。
  2. 自我修复:在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。
  3. 服务发现和负载均衡:K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。
  4. 自动发布(默认滚动发布模式)和回滚:K8S采用滚动策略更新应用,一个更新一个Pod,而不是同时删除所有的Pod,如果更新过程中出现问题,将回滚更改,确保升级不收影响业务。
  5. 集中化配置管理和密钥管理:管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性,并可以将一些常用的配置存储在K8S中,方便应用程序使用。
  6. 存储编排:支持外挂存储并对外挂存储资源进行编排,挂载外部存储系统,无论是来自本地存储,公有云(如:AWS),还是网络存储(如:NFS、Glusterfs、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。
  7. 任务批量处理运行:提供一次性任务,定时任务,满足批量数据处理和分析的场景。

k8s解决了裸跑docker的若干痛点:

  1. 单机使用,无法有效集群
  2. 随着容器数量的上升,管理成本攀升
  3. 没有有效的容灾,自愈机制
  4. 没有预设编排模板,无法实现快速,大规模容器调度
  5. 没有统一的配置管理中心工具
  6. 没有容器生命周期的管理工具
  7. 没有图形化运维管理工具

四、Kubernetes架构

K8S 是属于主从设备模型(Master-Slave 架构),即由 Master 节点负责集群的调度、管理和运维,Slave 节点是集群中的运算工作负载节点。

在 K8S 中,主节点一般被称为 Master 节点,而从节点则被称为 Worker Node 节点,每个 Node 都会被 Master 分配一些工作负载。

Master 组件可以在群集中的任何计算机上运行,但建议 Master 节点占据一个独立的服务器。因为 Master 是整个集群的大脑,如果 Master 所在节点宕机或不可用,那么所有的控制命令都将失效。除了 Master,在 K8S 集群中的其他机器被称为 Worker Node 节点,当某个 Node 宕机时,其上的工作负载会被 Master 自动转移到其他节点上去。

组件作用
master节点
apiserver所有服务的访问入口
controller-manager负责根据预设模板创建pod,维持pod等资源的副本期望数目
scheduler负责调度pod,通过预选策略、优选策略选择最合适的node节点分配pod
etcd分布式键值对数据库,负责存储K8S集群的重要信息(持久化)
work node节点--
Kubelet跟apiserver通信汇报当前node节点上的资源使用情况和状态,接受apiserver的指令跟容器引擎交互实现容器的生命周期管理
Kube-proxy在node节点上实现pod的网络代理,维护网络规则和四层负载均衡规则,负责写入规则到iptables或ipvs实现服务映射访问
容器运行时docker运行容器,负责本机的容器创建和管理工作

4.1、Kubernetes工作流程

 首先,运维人员使用kubectl命令行工具向API Server发送请求,API Server接收到请求后会写入到etcd中,API Server会让Controller-manager按照预设的模板去创建pod,Controller-manager通过API Server读取etcd中用户的预设信息,再通过API Server去找Scheduler可以为新创建的pod选择最合适的node节点。scheduler会通过API Server在etcd存储中心根据存储的node节点元信息、剩余资源等,用预选和优选策略选最优的node节点。

scheduler确定node节点后通过API Server交给这个node节点上的kubele进行pod资源的创建,kubele调用容器引擎交互创建pod,同时将pod监控信息通过API Server存储到etcd中。

用户访问时,通过kube-proxy负载、转发,访问相应的pod
决定创建pod清单的是Controller-manager控制器,而kubelet、容器引擎都是干活的

4.2、K8S创建Pod流程

详细版
kubectl创建一个Pod(在提交时,转化为json)

  1. 首先经过auth认证(鉴权),然后传递给API Server进行处理
  2. API Server将请求信息提交给etcd
  3. scheduler和controller-manager会watch(监听)API Server,监听请求
  4. 在scheduler和controller-manager监听到请求后,scheduler会提交给API Server一个list清单-----》包含的是获取node节点信息。
  5. 此时API Server就会向etcd获取后端node节点信息,获取到后,被scheduler监听到,然后scheduler进行预选优选进行打分,最后将结果给API Server。
  6. 此时API Server也会被controller-manager 监听,controller-manager会根据请求创建Pod的配置信息(需求什么控制器),然后把控制器资源给API Server。
  7. 此时API Server会提交清单给与对应节点的kubelet(代理)。
  8. kubelet代理通过K8S与容器的接口(例如containerd)进行交互,假设是docker容器,那么此时kubelet就会通过dockershim以及runc接口与docker的守护进程docker-server进行交互,来创建对应的容器,再生成对应的Pod。
  9. kubelet同时会借助于metric server收集本节点的所有状态信息,然后再提交给API Server
    10.最后API Server会提交list清单给与etcd来存储(最后api-server会将数据维护在etcd中)。

简单的

1、首先kubectl 转化为json后,向api-server 提交创建Pod请求
2、api-server将请求信息记录在etcd中
3、scheduler 监听api-server处理的请求,然后向api-server申请后端节点信息
4、api-server 从etcd中获取后端节点信息后,给与scheduler 
5、scheduler 进行预选优选、打分,然后提交结果给api-server
6、controller-manager 监听api-server处理的请求信息,并将所需的控制器资源给与api-server
7、api-server 对接node节点的kubelet
8、kubelet调用资源创建pod,并将统计信息返回给api-server
9、api-server将信息记录在etcd中 

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

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

相关文章

线段树模板

好文分享:【数据结构】线段树(Segment Tree) - 小仙女本仙 - 博客园 线段树和树状数组的基本功能都是在某一满足结合律的操作(比如加法,乘法,最大值,最小值)下,O(logn)的时间复杂度内修改单个元…

Python回归预测建模实战-支持向量机预测房价(附源码和实现效果)

机器学习在预测方面的应用,根据预测值变量的类型可以分为分类问题(预测值是离散型)和回归问题(预测值是连续型),前面我们介绍了机器学习建模处理了分类问题(具体见之前的文章)&#…

x86 --- 任务隔离特权级保护

程序是记录在载体上的数据和指令。 程序正在执行时的一个副本叫做任务 所有段描述符都放在GDT --> 不做区分。 内核程序(任务)所占段在GDT中,用户程序(任务)所占段在LDT中 --> 做区分。 每个任务都有自己独立的…

【无标题】

第1章 概述 本章主要内容: 互联网的概念(标准化)、组成、发展历程;电路交换的基本概念、分组交换的原理;计算机网络的分类、性能指标及两种体系结构。 重点掌握: 在计算机网络分层模型中,网…

7、GC日志详解

目录如何分析GC日志参数配置程序运行GC日志打印解析GC日志数据分析指定其他垃圾收集器CMSG1GC分析工具JVM参数汇总查看命令如何分析GC日志 参数配置 对于java应用我们可以通过一些配置把程序运行过程中的gc日志全部打印出来,然后分析gc日志得到关键性指标&#xff…

目标检测算法——遥感影像数据集资源汇总(附下载链接)

关注”PandaCVer“公众号 深度学习资料,第一时间送达 目录 一、用于 2-5 分类问题 1.UCAS-AOD 遥感影像数据集 2.Inria Aerial Image Labeling Dataset 3.RSOD-Dataset 物体检测数据集 二、用于 5-10 分类问题 1.RSSCN7 DataSet 遥感图像数据集 2.NWPU…

孙宇晨接受韩国媒体专访:熊市受宏观经济的不确定性影响

10月27日至10月29日,韩国釜山备受关注的大型区块链活动 2022 釜山区块链周(BWB 2022)在釜山会展中心(BEXCO)举行。韩国区块链媒体TokenPost 对出席活动的波场TRON创始人孙宇晨进行了专访。10月28日,该媒体发…

Nginx快速入门部署前端项目

目录 一,Nginx简介 1.1 负载均衡 演示 1.1.2 安装nginx 再复制一份一样的tomcat并修改端口号 打开两个tomcat的服务 打开防火墙中的8081端口 修改Nginx配置 重启Nginx服务,让配置生效 1.2 反向代理 Nginx项目部署 1.确保前端项目能用 2.将前台项目…

看过来,Windows 11 Insider Preview 25231.1000推送啦!

微软于近日凌晨发布新的Windows 11内部预览版系统,版本号为25231.1000,该系统对平板任务栏体验进行了改进,修复了系统托盘、设置等问题。下面一起来看看完整的更新内容。 更新日志 TL;速度三角形定位法(dead reckoning…

【ASM】字节码操作 转换已有的类 清空方法体

1.概述 在文章:【ASM】字节码操作 转换已有的类 移除Instruction 移除NOP 中我们学会了如何移除NOP。 本章我们将学习如何清空方法体。 1.1 如何清空方法体 在有些情况下,我们可能想清空整个方法体的内容,那该怎么做呢?其实,有两个思路。 ●第一种思路,就是将instructi…

Spring中事务的传播机制以及REQUIRED、REQUIRES_NEW、NESTED区别以及代码演示

​📒个人主页:热爱生活的李📒 ​❤️感谢大家阅读本文,同时欢迎访问本人主页查看更多文章​❤️ 🙏本人也在学习阶段,如若发现问题,请告知,非常感谢🙏 事务隔离级别demo理…

[计算机网络]第一章 概述 -- 1.1 计算机网络在信息时代中的作用 1.2 互联网概述

文章目录1.1 计算机网络在信息时代中的作用1.2 互联网概述1.2.1 网络的网络1.2.2 互联网基础结构发展的三个阶段第一阶段第二阶段第三阶段1.2.3 互联网标准化工作1.1 计算机网络在信息时代中的作用 21世纪是以网络为核心的信息时代,21世纪的重要重要特征&#xff1a…

小侃设计模式(二)-单例模式

1.概述 设计模式在粒度和抽象层次上各不相同,因此从不同的角度,分类形式也不同,目前存在两种较为经典的划分方式,即根据模式作用的范围、模式的目的来划分。根据模式主要是用于类还是用于对象,可将其划分为类模式和对…

【JavaWeb】Tomcat

1.JavaWeb是指所有通过java语言编写可以通过浏览器访问的程序的总称 请求是指客户端给服务器发送数据 响应是指服务器给客户端回传数据 2.Web资源按实现的技术和呈现的效果的不同,又分为静态资源和动态资源两种. 静态资源:html css js txt mp4视频 jpg图片 动态资源:jsp页面 se…

前端工程化基建探索:从内部机制和核心原理了解npm

大厂技术 坚持周更 精选好文 前言 本文【前端工程化基建探索】的第2篇,上一篇 前端工程化基建探索(1)前端大佬,你好! 当我们拉取一个前端工程化项目,都会通过npm/Yarn/pnpm 管理工具来安装项目的依赖&am…

大学解惑06 - 要求输入框内只能输入2位以内小数,怎么做?

请听题:有一个输入框,准备用于计算使用,要求点击“校验”按钮的时候进行验证,必须输入数字,并且只能是2位以内的小数,如果输入不合法,请给出提示,如果输入合法通过验证,则…

又是一篇教你摸鱼的文章,用Python实现自动发送周报给老板

前言 有没有哪个同志跟我一样,每周都要写工作周报 像我这种记性不好的,一个月四周忘记三次 索性就用Python写个小工具,让它每周帮我给老板发周报~ Github: Weekday 小工具 提出目标 源码.资料.素材.点击领取即可 想有一个工具能发邮件 目…

ARM 汇编基础

一、ARM架构 ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点: 对内存只有读、写指令对于数据的运算是在CPU内部实现使用RISC指令的CPU复杂度小一点,易于设计…

WebShell箱子简介与原理

今天继续给大家介绍渗透测试相关知识,本文主要内容是WebShell箱子简介与原理。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授…

【面试】【项目】谷粒商城

视频链接 项目调查 这项目是这么多免费视频里最好的了。但依旧是demo。 最好还是买慕课网上的实战课,那些老师都有丰富的开发经验,有经验跟没经验讲的课是完全不同的。 谷粒商城我觉得是不low的,我很菜,毕业一年半被多次辞退&a…