首页 > 其他分享 >Kubernetes 的架构和核心概念

Kubernetes 的架构和核心概念

时间:2024-08-18 22:37:21浏览次数:15  
标签:容器 控制器 架构 Kubernetes 对象 核心 集群 Pod 资源

Kurbernetes是Google旗下的容器跨主机编排工具。

Kurbernetes可以自动化应用容器的部署、扩展和操作,提供以容器为中心的基础架构。

一、Kurbernetes集群架构与组件

Kubernetes 采用主从分布式架构,节点在角色上分为 Maste 和 Node。

  • Kubernetes Master 是控制节点,负责k8s集群的调度、管理等运维工作,组件有apiserver、controller-manager、scheduler、etcd。
  • Kubernetes Node 是运行节点,负责运行工作负载,即容器应用,组件有kubelet、kuber-proxy、容器引擎/容器运行时(docker、containerd)等。

二、Kurbernetes的核心组件

1.Master组件

Kube-apiserver

所有服务请求的统一访问入口

提供认证、授权、访问控制、API 注册和发现等机制,其中封装了核心对象的增删改查操作。

外部的客户端和内部的组件可以通过调用 REST API 接口的方式获取数据信息,这些数据信息都存储到了 Etcd 中。

Kube-controller-manager

负责执行各种控制器。

1)作为控制管理器,负责管理K8s各种资源对象的控制器;

2)通过apiserver监控整个K8s集群资源的状态,并确保集群始终处于预期的工作状态。

常用控制器

控制器名称作用补充说明
Node Controller 节点控制器 负责在节点出现故障时发现和响应 定期检查 Node 的健康状态,标识出失效的 Node
Replication Controller 副本控制器 保证Replication Controller 定义的副本数量与实际运行 Pod 的数量一致 可以理解成确保集群中有且仅有N个Pod实例,N是RC中定义的Pod副本数量
Endpoints Controller 端点控制器 填充端点对象(即连接Services和Pods),负责监听Service和对应的Pod副本的变化 端点是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道它的endpoint
Service Account & Token Controllers 服务账户和令牌控制器 为新的命名空间创建默认账户和API访问令  
ResourceQuota Controller 资源配额控制器 确保指定的资源对象在任何时候都不会超量占用系统物理资源  
Namespace Controller 命名空间控制器 管理namespace的声明周期 定期清理无效的 Namespace,以及 Namespace 下的 API 对象,比如:Pod、Service、Secrte 等
Service Controller 服务控制器 属于K8S集群与外部的云平台之间的一个接口控制器  

Kube-scheduler

可视为资源调度器,负责集群中的Pod资源调度,通过调度算法(预选策略和优选策略)为要部署的Pod选择最适合的Node节点。

预选策略(predicate)和 优选策略(priorities)

首先是过滤掉不满足条件的节点,这个过程称为预选(predicate) ;

然后对通过的节点按照优先级排序,这个是优选(priority) ;

最后从中选择优先级最高的节点。

如果中间任何一步骤有错误,就直接返回错误。

2.配置存储中心——etcd

可以看作K8s集群的数据库,是一种键值对存储结构的分布式数据库,负责存储K8s集群的所有重要信息,只有apiserver有读写权限。

Etcd 是高可用的键值存储系统,通过 Raft 一致性算法处理日志复制来保证强一致性。

Kubernetes 中的重要数据都持久化到 Etcd 中,所有架构中的各个组件都是无状态的。

3.Node组件

Kubelet

1)接收master的apiserver发来的请求,创建和管理Pod与容器,和容器引擎交换来实现容器的生命周期的管理 ;

2)收集node节点的资源信息和Pod的运行状态发送给apiserver。

Kube-Proxy

作为service资源的载体,实现对Pod的网络代理,负责维护Pod集群的网络规则和四层负载均衡工作。

容器引擎/容器运行时

用于运行容器。

Kubernetes Container Runtime,容器运行时,Node 是使用容器运行的节点,可以使用多种容器。

4.推荐的插件(补充知识)

  • CoreDNS:为整个集群提供 DNS 服务。
  • Ingress Controller:为服务提供外网入口。
  • Dashboard:提供 GUI(图形用户界面)。
  • Federation:提供跨可用区的集群。
  • Fluentd:日志收集。

三、Kurbernetes创建Pod资源的工作流程

 

1)用户通过客户端发送创建Pod的请求给apiserver

2)Apiserver接收到请求后,会先把请求信息写入到etcd中保存,再找controller-manager根据请求信息中的资源预设模板创建Pod资源;

3)Controller-manager会通过apiserver找到scheduler,来调度新创建的Pod资源;

4)Scheduler通过调度算法的预选策略及优选策略,筛选出最适合的Node节点进行调度;

5) 再通过apiserver找到对应的node节点上的Kubelet去创建和管理Pod;

6)Kubelet会跟容器引擎交互来管理Pod和容器的生命周期;

7)用户还可以通过apiserver在kube-proxy上写入iptables/ipvs网络规则,创建service资源,实现对Pod集群的网络代理。

四、Kubernetes资源对象

1.Pod

Pod是K8s能够创建和管理的最小单位,一个Pod里可以包含一个或者多个容器应用,Pod里的容器之间共享网络、存储等资源。

一个 Pod 里可以运行多个容器,又叫边车模式(SideCar)。

而在生产环境中一般都是单个容器或者具有强关联互补的多个容器组成一个 Pod。

同一个 Pod 之间的容器可以通过 localhost 互相访问,并且可以挂载 Pod 内所有的数据卷;

但是不同的 Pod 之间的容器不能用 localhost 访问,也不能挂载其他 Pod 的数据卷。

2.Pod控制器

Pod 控制器是 Pod 启动的一种模版,用来保证在K8S里启动的 Pod 应始终按照用户的预期运行(副本数、生命周期、健康状态检查等)。

Pod控制器功能
Deployment 部署无状态应用,同时也负责管理replicaset(维持Pod副本数量符合预期数量)和Pod(容器化的应用进程)
Statefulset 部署有状态服务/应用
Daemonset 在所有的node节点上部署同一类型的Pod
Job 一次性的部署短期任务的Pod(执行完任务后会自动退出的Pod)
Cronjob 周期性的部署短期任务的Pod(执行完任务后会自动退出的Pod)

有状态和无状态服务的区别

从是否需要数据的实时存储和数据同步来区分。

有状态服务
1)有实时的数据需要存储;

2)集群服务中,把某一台服务器抽离出去,过一段时间再加入到集群中,如果服务集群无法正常工作(相互之间需要数据同步)。

无状态服务
1)没有实时的数据需要存储;

2)集群服务中,把某一台服务器抽离出去,过一段时间再加入到集群中,如果服务集群还是正常工作(相互之间不用数据同步)。

3.Service

为什么要用到Service(服务)?

因为 Deployment 的 Pod 可能有多个,并且这些 Pod 所在的 Node 并不固定,因此无法使用固定的 IP 和端口去访问。

Kubernetes 使用 Service 来解决此问题,一个 Service 对应一个应用,代表该应用提供的服务。

Service

 

在K8S集群内部,为通过标签选择器相关联的一组Pod提供一个统一的访问入口(clusterIP),只支持四层代理转发。

虚拟IP只在集群内部有效。

客户端通过cluster IP 来请求应用服务时,kube-proxy 会将请求转发给 Deployment 中的某个 Pod。

当 Pod 位置发生变化时,kube-proxy 能够及时感知到。

通过 kube-proxy 就解决了单个 Pod 服务的注册和发现问题,同时也实现了负载均衡。

Ingress

作为K8S集群外部接入层,可自定义ingress规则根据用户请求的域名或URL请求路径转发给指定的service,支持七层代理转发。

#举个例子
客户端请求 http://www.xxx.com:port  ---> Ingress ---> Service ---> Pod

五、Kubernetes核心概念之资源配置信息

apiVersion: group/version  ## api资源属于的组和版本,同一个组可以有多个版本       
kind:     ##  标记创建的资源类型,
##  k8s主要支持以下资源类别:Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob    
metadata: ## 元数据
        name:  ## 对像名称
        namespace:  ## 对象所属命名空间
        labels:    ##指定资源标签,标签是一种键值数据

spec:    ## 定义目标资源的期望状态
status   ## 显示资源的当前状态,应该与spec 一致

1.apiversion

资源对象在K8S中使用的api接口版本

2.kind

资源对象的类型

 

3.metadata

资源对象的元数据信息,比如 name资源名称、annotation注释、namespace命名空间、label标签

label

标签,将一个键值对关联到某个资源对象,用于资源对象的分组查询和筛选。

有效的标签值必须为63个字符或更少,并且必须为空或以字母数字字符([a-z0-9A-Z])开头和结尾,中间可以包含横杠(-)、下划线(_)、点(.)和字母或数字。

laber selector

标签选择器,用于查询和筛选拥有某个标签的资源对象。

标签选择器目前有两种:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)。

annotation

注释,用于作资源对象的注释信息或在一些特殊的资源对象里用于作额外的功能特性配置。

注释值没有字符长度限制。

name

资源名称,通常定义在 “资源” 的 “元数据” 信息里。

namespance

命名空间,在同一个命名空间中,同类型的资源对象的名称是唯一的

4.spec

 

资源对象的资源配置清单(配置属性),比如 副本数、镜像、数据卷、标签选择器

5.status

资源对象的当前运行状态信息

cornflowerblue’>注释,用于作资源对象的注释信息或在一些特殊的资源对象里用于作额外的功能特性配置。

注释值没有字符长度限制。

name

资源名称,通常定义在 “资源” 的 “元数据” 信息里。

namespance

命名空间,在同一个命名空间中,同类型的资源对象的名称是唯一的

6.spec

资源对象的资源配置清单(配置属性),比如 副本数、镜像、数据卷、标签选择器

7.status

资源对象的当前运行状态信息

 

标签:容器,控制器,架构,Kubernetes,对象,核心,集群,Pod,资源
From: https://www.cnblogs.com/hxqwe/p/18366229

相关文章

  • 《亿级流量系统架构设计与实战》第十一章 Timeline Feed服务
    TimelineFeed服务一、概述1、分类2、功能二、设计原理1、拉模式与用户发件箱2、推模式与用户收件箱3、推拉模式结合三、关键技术1、内容与用户收件箱的交互(推模式)2、推送拆分子任务3、收件箱模型设计内容总结自《亿级流量系统架构设计与实战》一、概述1、分......
  • 事件驱动架构的事件版本管理
    有一种办法:发送会议邀请给所有团队,经过101次会议后,发布维护横幅,所有人同时点击发布按钮。或...可用适配器,但微调。没错!就像软件开发中90%问题一样,有种模式帮助你找到聪明解决方案。1问题你已经有了一个模式,消费者已知咋处理它,所以他们依赖你保持兼容性,但实际上,你要打破这种兼......
  • 数据库技术核心:查询优化(PostgreSQL)
    文章目录案例1:使用合适的索引优化查询案例2:优化多表复杂联接查询案例3:优化多条件查询案例4:消除低效的联接查询案例5:包含多个联接和聚合的复杂查询案例6:消除低效的子查询案例7:复杂窗口函数和CTE(公用表表达式)案例8:适当的表结构设计与分区表优化案例9:使用物化视图......
  • 【系统分析师】-综合知识-系统架构
    1、设计模式1)观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新【消息订阅】。在该模式中,发生改变的对象称为观察目标,被通知的对象称为观察者,一个观察目标可以对应多个观察者。观察者模式的优点在于实现了表......
  • 人工智能时代,程序员如何保持核心竞争力?
    目录引言AI辅助编程对程序员工作的影响代码生成与优化工具的普及编程效率的提升与挑战对传统编程技能的冲击程序员应重点发展的核心能力算法与数据结构的深入理解系统设计与架构能力人工智能与机器学习基础知识跨领域知识的掌握创新思维与问题解决能力......
  • FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构
    ​音视频技术的一个主要用途是直播,包括电视直播、电脑直播、手机直播等等,甚至在线课堂、在线问诊、安防监控等应用都属于直播系统的范畴。由于直播系统不仅涉及到音视频数据的编解码,还涉及到音视频数据的实时传输,因此直播领域采用的网络技术标准比较高,实现起来也比一般的WEB系统复......
  • 学习-zabbix架构及术语
    Zabbix组成架构ZabbixServerzabbixserver是agent程序报告系统可用性、系统完整性和统计数据的核心组件、是所有配置信息、统计信息和操作数据的核心存储器zabbix数据库存储所有配置信息和zavvix收集到的数据都被存储再数据库中zabbixweb界面为了从任何地方和任何......
  • CentOS7部署Kubernetes高可用集群(上)
    目录kubernetes介绍kubernetes具备的功能kubernetes集群角色kubernetes集群类型kubernetes集群规划kubernetes集群环境准备 部署HAProxy及Keepalivedkubernetes集群部署方式介绍kubeadm部署kubernetes集群kubernetes集群初始化部署Pod网络插件Calico部署Nginx测试......
  • 痞子衡嵌入式:英飞凌MirrorBit工艺NOR Flash的扇区架构设计
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家讲的是英飞凌MirrorBit工艺NORFlash的扇区架构设计。NORFlash大家都很熟悉,其内部按组织从小到大分为Page(128B/256B/512B)、Sector(4KB)、Block(32KB/64KB/128KB/256KB)、Chip,其中Page是编程单元,Sector/Bloc......
  • 代码构建软件架构图的工具介绍
    代码构建软件架构图的工具介绍     我们越来越多地看到各种工具,它们允许你以代码的形式创建软件架构和其他图表。使用这一概念的主要好处是,大多数以代码形式创建的图表工具都可以被脚本化并集成到构建流程中,以自动生成文档。另一个导致以代码形式创建软件架构的图表工具越来......