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

Kubernetes 的架构和核心概念

时间:2024-12-24 19:31:15浏览次数:6  
标签:容器 控制器 架构 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’>注释,用于作资源对象的注释信息或在一些特殊的资源对象里用于作额外的功能特性配置。 注释值没有字符长度限制。

6.spec

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

7.status

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

标签:容器,控制器,架构,Kubernetes,对象,核心,集群,Pod,资源
From: https://blog.csdn.net/qq_63222319/article/details/144700776

相关文章

  • 卷轴模式服务端功能架构实例分析
    卷轴模式系统管理端卷轴任务配置详细解析,以下是卷轴任务系统服务端的功能模块:1.会员模块;2.会员等级任务设置;3.签到任务设置;4.会员权益;5.分销体系设置;6.团队分润模块;7.积分模块;8.任务包模型;9.交易体系;10.商城系统;11.广告模块;12.财务模块;13.数据统计;14.投诉处理模块;15.系统基......
  • 深度探秘神经网络模型:核心要点、多样类型与实践应用
    基本概念神经元与生物启发:人工神经网络受人类大脑中的生物神经元启发,生物神经元由细胞体、树突和轴突等组成,可处于兴奋或抑制状态,通过突触传递信息。神经网络组成:由大量相互连接的神经元组成,包括输入层接收数据、隐藏层处理数据、输出层产生最终结果,各层神经元通过权重连接,还有......
  • 《探索 HarmonyOS NEXT(5.0):开启构建模块化项目架构奇幻之旅 —— 构建基础特性层》
    从无到有,打造模块化项目。构建一个开箱即用的项目,从Git上拉取下来即可直接进行开发,其中涵盖路由通信、上下拉刷新、网络请求、事件通知、顶部tab封装等功能,项目里调用API为鸿洋大佬的wanAndroidAPI。后期将持续完善,若有不足之处,诚邀各位大佬多提宝贵建议,共同进步成长。为啥要模......
  • synchornized核心原理讲解
    前言在此之前先有几个面试题,看大家能答对几题1.1:标准访问ab二个线程,是先打印t1还是t2???publicclassSyncUnit{publicsynchronizedvoidt1(){System.out.println("t1");}publicsynchronizedvoidt2(){System.out.println("t......
  • 软件质量:以用户体验为核心的卓越追求
    在当今数字化飞速发展的时代,软件已成为人们生活、工作和娱乐不可或缺的一部分。从智能手机上琳琅满目的应用到企业运营所依赖的复杂管理系统,软件的身影无处不在。而软件质量作为软件成功与否的关键衡量标准,其中用户体验的重要性更是不言而喻,它宛如软件世界的灵魂,赋予软件生命力与......
  • 《Java核心技术 I》容易忽视和重要的知识点汇总
    本文对《Java核心技术I》中开发者容易忽视和重要的知识点进行总结,不包含一般开发者都知道内容。大标题后括号的数字代表书中对应的章节。一、Java的基本程序设计结构(3)1.整数表示可以为数字字面量加上下划线,这些下划线只是为了让人更易读。Java编译器会去除这些下划线。......
  • 魔搭Modahub AI 应用(包括智能体)平台架构
    魔搭为AI应用(包括智能体)开发人员提供了一站式全链路的AI应用搭建能力,包括应用开发、测评、监控和丰富的发布渠道。如下图所示,空间是魔搭平台的最顶层的资源组织方式,通过工作空间对开发资源进行隔离。空间:空间是资源组织的基础单元,不同空间内的资源和数据相互隔离。一个......
  • docker+kubernetes
    Docker docker 可以在阿里云仓库拉取,需要配置daemon.json dockersearchjava 全文搜索java相关镜像dockerpulljava:8 不输入版本号拉去latest最新版本查询下载dockerimages 看镜像仓库有哪些镜像软件查看具体软件镜像  dockerrun-d-p91:80nginx:......
  • MySQL主从架构
    MySQL主从架构MySQL主从架构(Master-SlaveArchitecture)是一种常见的数据库高可用性和负载均衡的设计模式,通常用于提高系统的可伸缩性和可靠性。它基于数据复制(replication)机制,其中“主”服务器负责处理所有的写操作,而“从”服务器则通过复制主服务器的数据来保持数据一致性,主要用......
  • 梳理你的思路(从OOP到架构设计)_设计模式Observer模式
    目录1、Observer模式2、范例:Android+Observer模式1、Observer模式定义对象间的1:N依赖关系,以便当一个主体对象(如A)的状态发生改变时,所有依赖于它的众多对象(如B,C,D…)都得到通知,然后可向主体对象(A)取得最新状态内容。如果Observer是个纯粹抽象类别(PureA......