Kubernetes集群架构与组件介绍

news2024/10/5 14:05:31

个人博客

一、集群架构

集群架构

二、主要组件

1.kubelet

该组件运行在每个Kubernetes节点上,用于管理节点。用来接收、处理、上报kube-apiserver组件下发的任务。

主要负责所在节点上的Pod资源对象的管理,例如Pod资源对象的创建、修改、监控、删除、驱逐及Pod生命周期管理等。 kubelet组件会定期监控所在节点的资源使用状态并上报给kube-apiserver组件,这些资源数据可以帮助kube-scheduler调度器为Pod资源对象预选节点。kubelet也会对所在节点的镜像和容器做清理工作,保证节点上的镜像不会占满磁盘空间、删除的容器释放相关资源。 kubelet组件实现了3种开放接口:

  • Container Runtime Interface:简称CRI(容器运行时接口)提供容器运行时通用插件接口服务。CRI定义了容器和镜像服务的接口。CRI将kubelet组件与容器运行时进行解耦,将原来完全面向Pod级别的内部接口拆分成面向Sandbox和Container的gRPC接口,并将镜像管理和容器管理分离给不同的服务。
  • Container Network Interface:简称CNI(容器网络接口),提供网络通用插件接口服务。CNI定义了Kubernetes网络插件的基础,容器创建时通过CNI插件配置网络。
  • Container Storage Interface:简称CSI(容器存储接口),提供存储通用插件接口服务。CSI定义了容器存储卷标准规范,容器创建时通过CSI插件配置存储卷。

2.client-go

client-go是从Kubernetes代码中抽离出来的包,作为官方提供的GO语言的客户端发挥作用。client-go简单、易用,Kubernetes系统的其他组件与Kubernetes API Server通信的方式也是基于client-go实现。

3.kube-apiserver

在 Kubernetes 中,API 服务器是 Kubernetes 控制平面的组件, 该组件公开了 Kubernetes API,API Server 是整个系统的核心组件之一,它是 Kubernetes API 的前端。API Server 接收 RESTful API 请求,并根据请求的内容执行相应的操作,比如创建、更新或删除资源对象。API Server 还负责对请求进行身份验证、授权和准入控制等安全相关的操作,以确保 Kubernetes 系统的安全性。

API Server 的另一个重要作用是提供了一个统一的入口,使得 Kubernetes 中的各个组件可以相互通信和协作。除了 Kubernetes 自身的组件,第三方开发的工具和应用程序也可以通过 API Server 访问 Kubernetes API,以实现对 Kubernetes 集群的管理和监控等操作。

总之,API Server 是 Kubernetes 系统中非常重要的组件之一,它为整个系统提供了一个统一的入口和管理接口,使得 Kubernetes 的各个组件可以相互协作,从而实现对 Kubernetes 集群的管理和监控等操作。

kube-apiserver组件也是集群中唯一与Etcd集群进行交互的核心组件。Kubernetes将所有的数据存储在Etcd集群中前缀为registry的目录下。 kube-apiserver的特性:

  • 将Kubernetes系统中所有资源对象都封装成RESTful风格的API接口进行管理。
  • 可进行集群状态管理和数据管理,是唯一与Etcd集群交互的组件。
  • 拥有丰富的集群安 全访问机制,以及认证,授权及准入控制器。
  • 提供了集群各组件的通信和交互功能。

4.kube-controller-manager

它负责管理Kubernetes集群中的节点(Node),Pod副本,服务,端点(Endpoint),命名空间(Namespace),服务账户(ServiceAcconut),资源定额(ResourceQuota)等。

包括:

  • 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应
  • 任务控制器(Job Controller):监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
  • 端点分片控制器(EndpointSlice controller):填充端点分片(EndpointSlice)对象(以提供 Service 和 Pod 之间的链接)。
  • 服务账号控制器(ServiceAccount controller):为新的命名空间创建默认的服务账号(ServiceAccount)。

5.kube-scheduler

该组件是Kubernetes集群默认的调度器,它负责在Kubernetes集群中为一个Pod资源对象找到合适的节点并在该节点上运行。在调度的过程中每次只负责调度一个Pod资源对象。调度算法分为两种,分别为预选调度算法和优选调度算法。

6.kubectl

kubectl是Kubernetes官方提供的命令行工具CLI,用户可以通过命令行的方式与Kubernetes API Server进行操作,通信协议使用HTTP/JSON。

7.kube-proxy

该组件运行在Kubernetes集群中每个节点上,作为节点上的网络代理。它监控kube-apiserver的服务和端点资源变化,并通过iptables/ipvs等配置负载均衡器,为一组Pod提供统一的TCP/UDP流量转发和负载均衡功能。但是kube-proxy组件与其他负载均衡服务的区别在于kube-proxy代理只想Kubernetes服务及其后端Pod发出请求。

8.Add-ons

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns负责为整个集群提供DNS服务
  • Ingress Controller为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询

三、Kubernetes Project Layout 设计

源码目录说明
cmd/可执行文件的入口代码,每个可执行文件都会对应一个main函数
pkg/主要实现,核心库代码,并且可被项目内部或外部直接引用,
vendor/项目依赖的库代码,一般为第三方库代码
api/OpenAPI/Swagger的spce文件,包括JSON、Protocol的定义等
build/与构建相关的脚本
test/测试工具及测试数据
docs/设计或用户使用文档
hack/构建、测试等相关代码
third_party第三方工具、代码或者其他组件
plugin/Kubernetes插件代码目录,例如认证、授权等相关插件
staging/部分核心库的暂存目录
translations/i18n(国际化)语言包的相关文件,可以在不修改内部代码的情况下支持不同语言及地区

四、源码分析

https://github.com/longpi1/Reading-notes/tree/main/kuberneters/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90

参考链接

1.https://raw.githubusercontent.com/kubernetes

2.https://juejin.cn/post/6999610929105240094

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

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

相关文章

内网安全:初探隧道技术

目录 防火墙必备知识 域控-防火墙组策略对象同步 域控 - 防火墙组策略不出网上线 MSF上线 CS - ICMP上线 注意:隧道技术是后渗透手段,是在已经取得权限后的手段 域控-组策略同步 防火墙必备知识 学习防火墙的目标是知道了解防火墙的一些常见配置…

ChatGPT应用助推跨境电商发展,低代码凭啥不行?!

随着互联网信息技术的不断发展,随之衍生的诸多产业也在蓬勃发展,而跨境电商就是互联网信息技术发展下的典型产物。 如何定义? 跨境电商指的是通过互联网销售商品或服务,跨越国家或地区边界,实现国际贸易的一种商业模式…

Linux 实操篇-实用指令

Linux 实操篇-实用指令 指定运行级别 基本介绍 运行级别说明: 0 :关机 1 :单用户【找回丢失密码】 2:多用户状态没有网络服务 3:多用户状态有网络服务 4:系统未使用保留给用户 5:图形界…

开发移动端官网总结_Vue2.x

目录 1、自定义加载中效果 2、HTML页面注入环境变量 / 加载CDN和本地库 3、在 Vue 中使用 wow.js 4、过渡路由 5、全局监听当前设备,切换PC端和移动端 6、移动端常用初始化样式 7、官网默认入口文件 8、回到顶部滑动过渡效果(显示与隐藏、滑动置…

由于找不到vcruntime140_1.dll无法继续执行此代码的三个解决方法

vcruntime140_1.dll是Microsoft Visual C Redistributable for Visual Studio的一部分,它是一个DLL文件,包含用于运行Microsoft Visual C创建的应用程序所需的Microsoft Visual C组件的代码和数据。这个DLL通常会随着应用程序安装到Windows系统中。如果这…

Dart语法学习

最近在学习flutter相关方面的知识,里面用到了Dart语言,于是写下这篇博客记录学习的一门过程。如果你有其他编程语言的经验(尤其是Java和JavaScript),可以很快的上手Dart语言,Dart 在设计时应该是同时借鉴了…

Spring Cloud Alibaba - Nacos源码分析

目录 一、源码 1、为什么要分析源码 2、看源码的方法 二、Nacos服务注册与发现源码剖析 1、Nacos核心功能点 2、Nacos服务端/客户端原理 2.1、nacos-example 2.2、Nacos-Client测试类 3、项目中实例客户端注册 一、源码 1、为什么要分析源码 1. 提升技术功底&#x…

Golang内存泄露场景与定位方式

个人博客 一、产生原因 Golang有自动垃圾回收机制,但是仍然可能会出现内存泄漏的情况。以下是Golang内存泄漏的常见可能原因: 循环引用:如果两个或多个对象相互引用,且没有其他对象引用它们,那么它们就会被垃圾回收机…

【计算机网络实验】BGP和OSPF协议仿真实验

实验内容  BGP和OSPF协议仿真实验 实验目的 (1)学习BGP协议的配置方法; (2)验证BGP协议的工作原理; (3)掌握网络自治系统的划分方法; (4)验证…

3分钟快速了解—App自动化测试是怎么实现H5测试的?

移动端 app 自动化框架很多,但是有一些框架因为不支持混合应用测试,一直没有完全流行。比较典型的是经典的 Python 框架 uiautomator2, 这个框架简单好用,没有 appium 那样复杂的 api 调用,受到不少 python 自动化工程师的青睐。 …

C++《stack和queue的一些OJ题目》

本文主要讲解C中stack和queue的一些OJ题目 文章目录 1、[最小栈](https://leetcode.cn/problems/min-stack/)2、[栈的压入、弹出序列](https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId13&&tqId11174&rp1&ru/activity/oj&qru/ta…

路径规划算法:基于乌鸦优化的路径规划算法- 附代码

路径规划算法:基于乌鸦优化的路径规划算法- 附代码 文章目录 路径规划算法:基于乌鸦优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法乌鸦…

驱动开发:内核解析PE结构节表

在笔者上一篇文章《驱动开发:内核解析PE结构导出表》介绍了如何解析内存导出表结构,本章将继续延申实现解析PE结构的PE头,PE节表等数据,总体而言内核中解析PE结构与应用层没什么不同,在上一篇文章中LyShark封装实现了K…

ChatGPT国内免费使用方法【国内免费使用地址】

当下人工智能技术的快速发展,聊天机器人成为了越来越多人们日常生活和工作中的必备工具。如何在国内免费使用ChatGPT聊天机器人,成为了热门话题。本文将为你详细介绍ChatGPT国内免费使用方法,让你轻松拥有聊天机器人助手,提高工作…

基于Halcon卡尺测量: Metrology批量测量矩形和圆

处理图如下: 原图如下: 主要思想: 1.准备一次性将图中12个圆和2个矩形都检测出来 2.初步确定12个圆的圆心坐标和半径,初步确定两个矩形的中心坐标,角度,长短边长 3.创建计量模型 4.定义计量模型尺寸 5.增加检测矩形和圆形的信息参数 6.应用计量模型,获取结果 7.显示…

什么是 IMU?惯性测量单元工作和应用

术语IMU代表“惯性测量单元”,我们用它来描述测量工具的集合。当安装在设备中时,这些工具可以捕获有关设备移动的数据。IMU 包含加速度计、陀螺仪和磁力计等传感器。 IMU 如何工作? IMU 可以测量各种因素,包括速度、方向、加速度、…

vue 单点登录的方法

vue 单点登录的方法 当我们在使用 vue开发项目时,一般都是只有一个用户帐号,如果要实现多个帐号的单点登录,可以使用 Session和 LocalStorage这两个技术。这两个技术在实现单点登录时,都需要有一个用户名和一个密码,而…

【C++】C++ 11 智能指针

【C】C 11 智能指针 文章目录 【C】C 11 智能指针1.为什么需要智能指针2. C中智能指针和指针的区别是什么?3. C中的智能指针有哪些?分别解决的问题以及区别?(1)auto_ptr(C98的方案,C11已经弃用&…

JavaEE进阶(Mybatis)5/31

目录 1. SQL注入 2.concat()用于like模糊查询 3.resultMap 4. 5.动态SQL 6.foreach标签 1. SQL注入 $问题会导致SQL注入 因为$是直接替换的,and的优先级高于or true or false #不存在SQL注入的问题,因为他是预编译的&…

坚持的工作好习惯

工作好习惯 目录概述需求: 设计思路实现思路分析1.工作好习惯的重要性2.谈下自己的工作方法2.希望有时也从别人那里也学习一下看看 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,s…