【Kubernetes 基本概念】Kubernetes 的架构和核心概念
目录
- 一、Kurbernetes
- 1.1 简介
- 1.2 为什么要用K8s?
- 1.3 K8s的特性
- 二、Kurbernetes集群架构与组件
- 三、Kurbernetes的核心组件
- 3.1 Master组件
- 3.1.1 Kube-apiserver
- 3.1.2 Kube-controller-manager
- 3.1.3 Kube-scheduler
- 3.2 配置存储中心——etcd
- 3.3 Node组件
- 3.3.1 Kubelet
- 3.3.2 Kube-Proxy
- 3.3.3 容器引擎/容器运行时
- 3.4 推荐的插件(补充知识)
- 四、Kurbernetes创建Pod资源的工作流程(重要)
- 五、Kubernetes核心概念之资源对象
- 5.1 Pod
- 5.2 Pod控制器
- 5.3 Service
- 5.3.1 为什么要用到Service(服务)?
- 5.3.2 Service
- 5.4 Ingress
- 六、Kubernetes核心概念之资源配置信息
- 6.1 apiversion
- 6.2 kind
- 6.3 metadata
- 6.3.1 label
- 6.3.2 laber selector
- 6.3.3 annotation
- 6.3.4 name
- 6.3.5 namespance
- 6.4 spec
- 6.5 status
- 6.3.4 name
- 6.3.5 namespance
- 6.4 spec
- 6.5 status
一、Kurbernetes
1.1 简介
Kurbernetes是Google旗下的容器跨主机编排工具。
Kurbernetes可以自动化应用容器的部署、扩展和操作,提供以容器为中心的基础架构。
1.2 为什么要用K8s?
从生态圈的角度来看
- Google 的业内最成熟的容器编排管理经验的输出
- 2017 年战胜 Docker Swarm 和 Apache Mesos,成为云原生应用唯一值得绑定的容器编排管理平台
- 传统云平台提供商的全面支持:Google k8s engine、Red Hat 的 OpenShift、Microsoft 的 Azure container service、IBM 的 cloud container service 等j
从云应用角度来看
- 容器管理、调度和编排的事实标准:摆脱锁定,支持跨云
- 先进的 Workload 管理之经验模型:Pod 和 Controllers
- 原生支持微服务抽象:服务注册、服务发现和自动负载均衡
在生产环境中使用 Kubernetes 的主要优势在于它提供了在物理机或虚拟机集群上调度和运行容器的平台。
更宽泛地说,它能帮你在生产环境中实现可以依赖的基于容器的基础设施。
而且,由于 Kubernetes 本质上就是运维任务的自动化平台,你可以执行一些其它应用程序平台或管理系统支持的操作,只不过操作对象变成了容器。
1.3 K8s的特性
1)强大的容器编排能力
作为容器编排管理平台,拥有强大的容器编排能力。
Kubernetes 与 Docker 共同发展并且深度集成了 Docker,因此适应容器的特点,比如容器组合、标签选择和服务发现等,可以满足企业级的需求,具体表现如下:
- 以 Pod(容器组)为基本的编排和调度单元以及声明式的对象配置模型(控制器、configmap、secret 等)
- 资源配额与分配管理
- 健康检查、自愈、伸缩与滚动升级
2)轻量级
轻量级,对微服务架构有很好的支撑。
微服务架构的核心是将一个巨大的单体应用分解为很多小的互相连接的微服务,一个微服务可能由多个实例副本支撑,副本的数量可以随着系统的负荷变化进行调整。
整个系统划分出各个功能独立的组件,组件之间边界清晰、部署简单,以及很多功能实现了插件化,可以非常方便地进行扩展和替换:
- 服务发现、服务编排与内部路由支持
- 服务快速部署和自动负载均衡
- 提供对“有状态”服务的支持
3)便携性
无论公有云、私有云、混合云还是多云架构都全面支持,可以随时随地地将系统整体进行“搬迁”。
Kubernetes 架构方案中屏蔽了底层网络的细节,基于服务的虚拟 IP 地址的设计方式让架构和底层硬件无关,无需改变配置文件就可以将系统从物理机迁移到公有云上,并且谷歌云(GCE)、华为云(CCE)、阿里云(ACK)和腾讯云(TKE)都支持 Kubernetes 集群。
二、Kurbernetes集群架构与组件
Kubernetes 采用主从分布式架构,节点在角色上分为 Maste 和 Node。
Kubernetes Master
是控制节点,负责k8s集群的调度、管理等运维工作,组件有apiserver、controller-manager、scheduler、etcd。
Kubernetes Node
是运行节点,负责运行工作负载,即容器应用,组件有kubelet、kuber-proxy、容器引擎/容器运行时(docker、containerd)等。
三、Kurbernetes的核心组件
3.1 Master组件
3.1.1 Kube-apiserver
所有服务请求的统一访问入口
提供认证、授权、访问控制、API 注册和发现等机制,其中封装了核心对象的增删改查操作。
外部的客户端和内部的组件可以通过调用 REST API 接口的方式获取数据信息,这些数据信息都存储到了 Etcd 中。
3.1.2 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集群与外部的云平台之间的一个接口控制器 |
3.1.3 Kube-scheduler
功能
可视为资源调度器,负责集群中的Pod资源调度,通过调度算法(预选策略和优选策略)为要部署的Pod选择最适合的Node节点。
调度过程
预选策略(predicate)和 优选策略(priorities)
首先是过滤掉不满足条件的节点,这个过程称为预选(predicate) ;
然后对通过的节点按照优先级排序,这个是优选(priority) ;
最后从中选择优先级最高的节点。
如果中间任何一步骤有错误,就直接返回错误。
3.2 配置存储中心——etcd
可以看作K8s集群的数据库,是一种键值对存储结构的分布式数据库,负责存储K8s集群的所有重要信息,只有apiserver有读写权限。
Etcd 是高可用的键值存储系统,通过 Raft 一致性算法处理日志复制来保证强一致性。
Kubernetes 中的重要数据都持久化到 Etcd 中,所有架构中的各个组件都是无状态的。
3.3 Node组件
3.3.1 Kubelet
1)接收master的apiserver发来的请求,创建和管理Pod与容器,和容器引擎交换来实现容器的生命周期的管理 ;
2)收集node节点的资源信息和Pod的运行状态发送给apiserver。
3.3.2 Kube-Proxy
作为service资源的载体,实现对Pod的网络代理,负责维护Pod集群的网络规则和四层负载均衡工作。
3.3.3 容器引擎/容器运行时
用于运行容器。
Kubernetes Container Runtime
,容器运行时,Node 是使用容器运行的节点,可以使用多种容器。
3.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核心概念之资源对象
5.1 Pod
Pod是K8s能够创建和管理的最小单位,一个Pod里可以包含一个或者多个容器应用,Pod里的容器之间共享网络、存储等资源。
一个 Pod 里可以运行多个容器,又叫边车模式(SideCar)。
而在生产环境中一般都是单个容器或者具有强关联互补的多个容器组成一个 Pod。
同一个 Pod 之间的容器可以通过 localhost 互相访问,并且可以挂载 Pod 内所有的数据卷;
但是不同的 Pod 之间的容器不能用 localhost 访问,也不能挂载其他 Pod 的数据卷。
5.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)集群服务中,把某一台服务器抽离出去,过一段时间再加入到集群中,如果服务集群还是正常工作(相互之间不用数据同步)。
5.3 Service
5.3.1 为什么要用到Service(服务)?
因为 Deployment 的 Pod 可能有多个,并且这些 Pod 所在的 Node 并不固定,因此无法使用固定的 IP 和端口去访问。
Kubernetes 使用 Service 来解决此问题,一个 Service 对应一个应用,代表该应用提供的服务。
5.3.2 Service
在K8S集群内部,为通过标签选择器相关联的一组Pod提供一个统一的访问入口(clusterIP),只支持四层代理转发。
虚拟IP只在集群内部有效。
客户端通过cluster IP 来请求应用服务时,kube-proxy 会将请求转发给 Deployment 中的某个 Pod。
当 Pod 位置发生变化时,kube-proxy 能够及时感知到。
通过 kube-proxy 就解决了单个 Pod 服务的注册和发现问题,同时也实现了负载均衡。
5.4 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 一致
6.1 apiversion
资源对象在K8S中使用的api接口版本
6.2 kind
资源对象的类型
6.3 metadata
资源对象的元数据信息,比如 name资源名称、annotation注释、namespace命名空间、label标签
6.3.1 label
标签,将一个键值对关联到某个资源对象,用于资源对象的分组查询和筛选。
有效的标签值必须为63个字符或更少,并且必须为空或以字母数字字符([a-z0-9A-Z])开头和结尾,中间可以包含横杠(-)、下划线(_)、点(.)和字母或数字。
6.3.2 laber selector
标签选择器,用于查询和筛选拥有某个标签的资源对象。
标签选择器目前有两种:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)。
6.3.3 annotation
注释,用于作资源对象的注释信息或在一些特殊的资源对象里用于作额外的功能特性配置。
注释值没有字符长度限制。
6.3.4 name
资源名称,通常定义在 “资源” 的 “元数据” 信息里。
6.3.5 namespance
命名空间,在同一个命名空间中,同类型的资源对象的名称是唯一的
6.4 spec
资源对象的资源配置清单(配置属性),比如 副本数、镜像、数据卷、标签选择器
6.5 status
资源对象的当前运行状态信息
cornflowerblue’>注释,用于作资源对象的注释信息或在一些特殊的资源对象里用于作额外的功能特性配置。
注释值没有字符长度限制。
6.3.4 name
资源名称,通常定义在 “资源” 的 “元数据” 信息里。
6.3.5 namespance
命名空间,在同一个命名空间中,同类型的资源对象的名称是唯一的
6.4 spec
资源对象的资源配置清单(配置属性),比如 副本数、镜像、数据卷、标签选择器
6.5 status
资源对象的当前运行状态信息
相关文章:

【Kubernetes 基本概念】Kubernetes 的架构和核心概念
目录 一、Kurbernetes1.1 简介1.2 为什么要用K8s?1.3 K8s的特性 二、Kurbernetes集群架构与组件三、Kurbernetes的核心组件3.1 Master组件3.1.1 Kube-apiserver3.1.2 Kube-controller-manager3.1.3 Kube-scheduler 3.2 配置存储中心——etcd3.3 Node组件3.3.1 Kubelet3.3.2 Ku…...
Docker安装部署Elasticsearch+Kibana+IK分词器
Docker安装部署ElasticsearchKibanaIK分词器 Docker安装部署elasticsearch拉取镜像创建数据卷创建网络elasticsearch容器,启动! Docker安装部署Kibana拉取镜像Kibana容器,启动! 安装IK分词器安装方式一:直接从github上…...

PCL setCameraPosition 参数讲解
setCameraPosition 的原型如下void setCameraPosition (double pos_x, double pos_y, double pos_z,double view_x, double view_y, double view_z,double up_x, double up_y, double up_z, int viewport 0);pos_x pos_y pos_z为相机所在的位置view_x view_y view_z 是焦点所…...

有关YOLOV5在测试时,图片大小被调整的问题
执行detect.py文件,在运行栏中出现以下: detect: weightsyolov5s.pt, sourcedata\images, datadata\coco128.yaml, imgsz[640, 640], conf_thres0.25, iou_thres0.45, max_det1000, device, view_imgFalse, save_txtFalse, save_confFalse, save_cropFa…...

【机器学习】四、计算学习理论
1 基础知识 计算学习理论(computational learning theory):关于通过“计算”来进行“学习”的理论,即关于机器学习的理论基础,其目的是分析学习任务的困难本质,为学习算法体统理论保证,并根据结…...

spring解决后端显示时区的问题
spring解决后端显示时区的问题 出现的问题: 数据库中的数据: 解决方法 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: Asia/Shanghai...

大模型冷思考:企业“可控”价值创造空间还有多少?
文 | 智能相对论 作者 | 叶远风 毫无疑问,大模型热潮正一浪高过一浪。 在发展进程上,从最开始的技术比拼到现在已开始全面强调商业价值变现,百度、科大讯飞等厂商都喊出类似“不能落地的大模型没有意义”等口号。 在模型类型上࿰…...

ctfshow-web入门37-52
include($c);表达式包含并运行指定文件。 使用data伪协议 ?cdata://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg 是<?php system(cat flag.php);?> base64加密 源代码查看得到flag 38 多禁用了ph…...
前端项目部署后,需要刷新页面才能看到更新内容
问题背景 前端项目部署更新后,通知业务验证,业务点击收藏的标签,打开网页后没有看到修改的内容,每次都需要手动刷新,用户体验非常不好。 问题原因:缓存未过期,浏览器直接读取本地缓存…...

android 13 write javaBean error at *** 错误
报错代码:红框处。 注意:android10 不会报错,运行正常。android13就报错 错误原因:对象中VerifyDownloadEntity,有个Bitmap成员变量 public class VerifyDownloadEntity {private Bitmap bitmap;private String cooki…...
Only fullscreen opaque activities can request orientation
出现Only fullscreen opaque activities can request orientation是谷歌爸爸在安卓8.0版本时为了支持全面屏,增加了一个限制:如果是透明的Activity,则不能固定它的方向,因为它的方向其实是依赖其父Activity的(因为透明…...

前端实验(一)单页面应用的创建
实验目的 掌握使用vite创建vue3单页面程序命令熟悉所创建程序的组织结构熟悉单页面程序运行原理能够编写简单的单页面程序 实验内容 创建一个名为vue-demo的单页面程序编写简单的单页面程序页面运行单页面程序 实验步骤 使用vite创建单页面程序 创建项目名为目录vue-demo的…...

数字人小灿:始于火山语音,发于 B 端百业
火爆的数字人市场又有新消息来袭:火山语音的数字人小灿来了! 数字人小灿首曝视频 今年以来,在生成式AI浪潮的助推下,大量企业争相布局数字人赛道。市场之所以如此火热,是因为AI数字人已被视为人工智能时代智能交互的入…...

蓝桥杯刷题
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 👉🏻最大降雨量 原题链接࿱…...

Go Metrics SDK Tag 校验性能优化实践
背景 Metrics SDK 是与字节内场时序数据库 ByteTSD 配套的用户指标打点 SDK,在字节内数十万服务中集成,应用广泛,因此 SDK 的性能优化是个重要和持续性的话题。本文主要以 Go Metrics SDK 为例,讲述对打点 API 的 hot-path 优化的…...

二叉树问题——前/中/后/层遍历问题(递归与栈)
摘要 博文主要介绍二叉树的前/中/后/层遍历(递归与栈)方法 一、前/中/后/层遍历问题 144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历 102. 二叉树的层序遍历 103. 二叉树的锯齿形层序遍历 二、二叉树遍历递归解析 // 前序遍历递归LC144_二叉树的前…...

Vue3问题:如何实现级联菜单的数据懒加载?
前端功能问题系列文章,点击上方合集↑ 序言 大家好,我是大澈! 本文约3100字,整篇阅读大约需要5分钟。 本文主要内容分三部分,第一部分是需求分析,第二部分是实现步骤,第三部分是问题详解。 …...

STM32-电源管理(实现低功耗)
电源管理 STM32 HAL库对电源管理提供了完善的函数和命令。 工作模式(高功耗->低功耗):运行、睡眠、停止、待机。 若备份域电源正常供电,备份域内的RTC都可以正常运行,备份域内的寄存器的数据会被保存,不…...

vue 自己捣鼓周日程日历组件
需求:想要一个周日程表,记录每天的计划,点击可查看详情。可自定义时间段通过后台获取时间段显示 分析: 通过需求,超级课程表app这款软件其中课表和这个需求很像,只不过这个需求第一列的时间段是自定义的,不是上午下午两个,但是原理都差不多 原本想找一些第三方插件使…...

【力扣】2127. (分类讨论 + 拓扑排序)参加会议的最多员工数
【力扣】2127. (分类讨论 拓扑排序)参加会议的最多员工数 文章目录 【力扣】2127. (分类讨论 拓扑排序)参加会议的最多员工数1. 题目介绍2. 思路(**分类讨论 拓扑排序**)3. 解题代码4. Danger参考 1. 题…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...
PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础
在构建任何动态、数据驱动的Web API时,一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说,深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言,以及学会如何在Python中操作数据库,是…...
初级程序员入门指南
初级程序员入门指南 在数字化浪潮中,编程已然成为极具价值的技能。对于渴望踏入程序员行列的新手而言,明晰入门路径与必备知识是开启征程的关键。本文将为初级程序员提供全面的入门指引。 一、明确学习方向 (一)编程语言抉择 编…...