首页 > 其他分享 >K8S的架构及工作原理

K8S的架构及工作原理

时间:2022-12-03 11:11:12浏览次数:67  
标签:Node 容器 架构 主机 Master 原理 Pod K8S

1、Master和Node

在这里插入图片描述

1)、Master

K8S中的Master是集群控制节点,负责整个集群的管理和控制

在Master上运行着以下关键进程:

  • kube-apiserver:提供了HTTP Rest接口的关键服务进程,是K8S里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程
  • kube-controller-manager:K8S里所有资源对象的自动化控制中心,集群内各种资源Controller的核心管理者,针对每一种资源都有相应的Controller,保证其下管理的每个Controller所对应的资源始终处于期望状态
  • kube-scheduler:负责资源调度(Pod调度)的进程,通过API Server的Watch接口监听新建Pod副本信息,并通过调度算法为该Pod选择一个最合适的Node
  • etcd:K8S里的所有资源对象以及状态的数据都被保存在etcd中

2)、Node

Node是K8S集群中的工作负载节点,每个Node都会被Master分配一些工作负载,当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上

在每个Node上都运行着以下关键进程:

  • kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能
  • kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件
  • Docker Engine:Docker引擎,负责本机的容器创建和管理工作

在默认情况下Kubelet会向Master注册自己,一旦Node被纳入集群管理范围,kubelet进程就会定时向Master汇报自身的信息(例如机器的CPU和内存情况以及有哪些Pod在运行等),这样Master就可以获知每个Node的资源使用情况,并实现高效均衡的资源调度策略。而某个Node在超过指定时间不上报信息时,会被Master判定为失败,Node的状态被标记为不可用,随后Master会触发工作负载转移的自动流程

2、Pod

每个Pod都有一个根容器的Pause容器,还包含一个或多个紧密相关的用户业务容器

在这里插入图片描述

Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume。在K8S里,一个Pod里的容器与另外主机上的Pod容器能够直接通信

Pod有两种类型:普通的Pod及静态Pod(Static Pod)。后者并没被存放在K8S的etcd存储里,而是被存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动、运行。而普通的Pod一旦被创建,就会被放入etcd中存储,随后会被K8S的Master调度到某个具体的Node上并进行绑定(Binding),随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器并启动。在默认情况下,当Pod里的某个容器停止时,K8S会自动检测到这个问题并且重新启动这个Pod(重启Pod里的所有容器),如果Pod所在的Node宕机,就会将这个Node上的所有Pod重新调度到其他节点上

在这里插入图片描述

3、K8S创建一个Pod的流程

在这里插入图片描述

1)、用户提交创建Pod的请求,可以通过API Server的REST API,也可用Kubectl命令行工具

2)、API Server处理用户请求,存储Pod数据到etcd

3)、Schedule通过和API Server的watch机制,查看到新的Pod,尝试为Pod绑定Node

4)、过滤主机:调度器用一组规则过滤掉不符合要求的主机,比如Pod指定了所需要的资源,那么就要过滤掉资源不够的主机

5)、主机打分:对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等

6)、选择主机:选择打分最高的主机,进行binding操作,结果存储到etcd中

7)、Kubelet根据调度结果执行Pod创建操作: 绑定成功后,会启动container,Scheduler会调用API在数据库etcd中创建一个bound pod对象,描述在一个工作节点上绑定运行的所有Pod信息。运行在每个工作节点上的Kubelet也会定期与etcd同步bound pod信息,一旦发现应该在该工作节点上运行的bound pod对象没有更新,则调用Docker API创建并启动Pod内的容器

在这期间,Control Manager同时会根据K8S的mainfiles文件执行RC Pod的数量来保证指定的Pod副本数。而其他的组件,比如Scheduler负责Pod绑定的调度,从而完成整个Pod的创建

 

标签:Node,容器,架构,主机,Master,原理,Pod,K8S
From: https://www.cnblogs.com/go1168/p/16947184.html

相关文章

  • 通信原理
    第一章绪论通信系统的组成信源和输入转换器发送设备:使信源输出的的信号适合在信道中传输信道和噪声接受设备:最大限度的抑制噪声,恢复出原始信号输出转换器和信宿......
  • Docker原理(图解+秒懂+史上最全)
    背景:下一个视频版本,从架构师视角,尼恩为大家打造高可用、高并发中间件的原理与实操。目标:通过视频和博客的方式,为各位潜力架构师,彻底介绍清楚架构师必须掌握的高可用、高并......
  • 大数据下一代变革之必研究数据湖技术Hudi原理实战双管齐下-后续
    @目录集成Flink编程示例打包运行CDC入湖概述MySQL启用binlog初始化MySQL源数据表准备Jar包依赖flink读取mysqlbinlog写入kafkaflink读取kafka数据并写入hudi数据湖调优......
  • 【云原生】k8s 管理平台 rancher
    目录一、概述二、Rancher架构三、安装Rancher1)安装Helm2)安装ingress-controller3)为Rancher创建命名空间4)选择SSL配置5)安装cert-manager6)通过Helm安装Rancher2)添......
  • JSP-概念、原理、脚本
    JSP-概念1.概念:JavaServerPages:java服务器端页面以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码用于简化书写......
  • ionic 架构
    1.路由:rout,页面内容:html,页面css:scss,js脚本内容:ts2.功能介绍路由:负责组织每个页面。页面css:scss,负责定制每个组件的内容,比如组件是iobag,那么在这个文件里就直接去......
  • 阶段一:单体电商项目架构,开发与上线(1~5周)
          模块间依赖    数据库建模用pdman            前后端跨域问题的配置 ......
  • Kubeadm高可用安装k8s集群
    一、k8s高可用架构解析etcd是一个键值数据库,用来存放k8s的数据,创建的资源以及做的变更都会存在该数据库中。master节点是控制节点,用来控制整个集群。node节点用来跑pod......
  • Request_原理以及继承体系
    Request_原理1.request对象和response对象的原理1.request和response对象是由服务器创建的,我们来使用他们2.request对象是来获取请求消息,response对象是来设置......
  • Linux 云计算集群架构师(第2阶段)->第二章 Rsync+sersync 实现数据实时同步
    第二章Rsync+sersync实现数据实时同步(上课时间:2021-07-29,笔记整理时间2021-08-1)本节所讲内容:2.1RSYNC概述2.2Rsync服务安装2.3Rsync+sersync实现数据实时同......