首页 > 其他分享 >(装)K8s 总体架构及目录结构

(装)K8s 总体架构及目录结构

时间:2024-09-18 10:04:22浏览次数:8  
标签:容器 插件 kube 架构 apiserver kubelet 组件 K8s 目录

原文:https://www.guoshaohe.com/cloud-computing/kubernetes-source-read/1249

1. kubernetes 总体架构

目前想对kubernetes 1.21 的源码进行一次阅读分析,本篇文章是对k8s的整体架构进行一个大致分析,先要搞清楚每个组件的功能和任务,在根据不同的组件进行深度的源码分析。

Kubernetes的总体架构图如下所示:

 

1.1 kubectl & client-go

下面介绍kubectl组件的具体作用:

  1. client-go 是通过编程的方式与kube-apiserver进行交互,实现与kubectl相同的功能。
  2. client-go 简单、易用,Kubernetes系统的其他组件与kube-apiserver通信的方式也基于client-go实现
  3. 如果需要对kubernetes做二次开发,可以使用 client-go
  4. 熟练使用并掌握 client-go 对 k8s 的二次开发有着关键作用。

1.2 Master节点组件

  1. Kubernetes集群中的所有组件都通过 kube-apiserver 组件操作资源对象。
  2. kube-apiserver 组件也是集群中唯一与 Etcd 集群进行交互的核心组件。
    1. 例如:通过kubectl创建了一个Pod资源对象,请求通过kube-apiserver的HTTP接口将Pod资源对象存储至Etcd集群中。
    2. Etcd集群是分布式键值存储集群,其提供了可靠的强一致性服务发现。
  3. Kubernetes 系统中的所有资源对象都封装成 RESTful 风格的 API 接口进行管理。
  4. 拥有丰富的集群安全访问机制,以及认证、授权及准入控制器。
  5. 提供了集群各组件的通信和交互功能。

1.3 Node 节点组件

  1. kubelet 组件运行在 Node 节点上,用于管理节点。
  2. kubelet 组件的作用主要有:
    • 接收、处理、上报 kube-apiserver 组件下发的任务。
    • kubelet 进程启动时会向 kube-apiserver 注册节点自身信息。
    • kubelet 主要负责所在节点(Node)上的Pod资源对象的管理,例如Pod资源对象的创建、修改、监控、删除、驱逐及Pod生命周期管理等。
    • kubelet 组件会定期监控所在节点的资源使用状态并上报给 kube-apiserver 组件,这些资源数据可以帮助 kube-scheduler 调度器为 Pod 资源对象预选节点。
    • kubelet也会对所在节点的镜像和容器做清理工作,保证节点上的镜像不会占满磁盘空间、删除的容器释放相关资源。
  3. kubelet组件实现了3种开放接口:
    • Container Runtime Interface(CRI) : 容器运行时接口,提供容器运行时通用插件接口服务。
      1. CRI 定义了容器和镜像服务的接口
      2. CRI 将 kubelet 组件与容器运行时进行解耦,将原来完全面向 Pod 级别的内部接口拆分成面向 Sandbox 和 Container 的 gRPC 接口,并将镜像管理和容器管理分离给不同的服务。
      3. CRI 是 K8S 定义的一套容器运行时接口,基于 gRPC 通讯,但是 docker 不是基于 CRI 的,因此 kubelet 又把 docker 封装了一层,搞了一个所谓的shim,也即是 dockershim 的东西,dockershim 作为一个实现了 CRI  接口的 gRPC 服务器,供 kubelet 使用。
      4. 这样的过程其实就是,kubelet 作为客户端 通过 gRPC 调用 dockershim 服务器,dockershim 内部又通过 docker 客户端走 http 调用 docker daemon api,多走了一次通讯的开销。下图是目前默认使用 docker 作为容器引擎的时候,调用过程。
    • Container Network Interface(CNI) : 容器网络接口,提供网络通用插件接口服务。
      1. CNI 定义了 Kubernetes 网络插件的基础,容器创建时通过 CNI 插件配置网络。
      2. CNI 仅关心容器创建时的网络分配,和当容器被删除时释放网络资源。
      3. CNI 的主要功能就是: 为容器分配IP地址、不同容器之间的互通
    • Container Storage Interface(CSI) : 容器存储接口,提供存储通用插件接口服务。
      1. CSI 定义了容器存储卷标准规范,容器创建时通过 CSI 插件配置存储卷。
      2. CSI 可以用来创建动态卷,但是需要安装对应的 CSI 插件,例如,使用 NFS 插件,来动态创建 pv ,
      3. CSI 持久化卷具有以下字段可供用户指定: driver(指定要使用的卷驱动程序的名称),volumeHandle(唯一标识从 CSI 卷插件的 CreateVolume 调用返回的卷名),readOnly(可选,指示卷是否被发布为只读)。
 

2. Kubernetes 源码的目录结构

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

标签:容器,插件,kube,架构,apiserver,kubelet,组件,K8s,目录
From: https://www.cnblogs.com/liujiacai/p/18417979

相关文章

  • 系统架构设计师 大数据架构篇二
    大数据架构......
  • PointNet++改进策略目录
    后续我将如何使用文章中创新点加入的PointNet++中代码实现部分进行更新题目原理解析代码改进PointNet++改进策略:模块改进|LFA|RandLA-Net,通过随机采样与局部特征聚合提升大规模3D点云处理效率✔️❌PointNet++改进策略:模块改进|ResidualMLP|PointMLP,简化原本复......
  • 论软件系统架构风格
    目录前言摘要正文最后前言软件系统架构风格是决定软件质量和可维护性的关键因素。随着技术的发展和应用场景的变化,理解和选择合适的架构风格变得至关重要。本文在探讨不同的软件系统架构风格,分析各自的优缺点,并讨论在不同场景下如何选择最适合的架构方案。通过对比......
  • Windows的树形目录结构
    一、文件、文件夹(目录)、逻辑盘、路径的概念·文件:是操作系统用来存储和管理信息的基本单位·文件夹也叫目录:是文件的集合体,文件夹中可包含多个文件,也可包含多个子文件夹。每个文件夹都有一个唯一的名称,用于在文件系统中标识和访问。·逻辑盘,计算机的外存储器一般都是硬盘,为......
  • 系统架构设计师教程 第5章 5.7 软件项目管理 笔记
    5.7软件项目管理★★☆☆☆5.7.1项目管理概述软件项目管理的对象是软件工程项目。它所涉及的范围覆盖了整个软件工程过程。为使软件项目开发获得成功,关键问题是必须对软件项目的工作范围、可能风险、需要资源(人、硬件/软件)、要实现的任务、经历的里程碑、花费工作量......
  • root@rust:~/EuclidOLAP/olap-engine# pwd /root/EuclidOLAP/olap-engine 如何配置ubu
    在Ubuntu中,默认的终端提示符会显示完整的当前工作目录路径(例如/root/EuclidOLAP/olap-engine)。如果你希望终端提示符只显示当前目录的名称(例如olap-engine),你需要修改PS1环境变量,该变量控制Bash提示符的外观。以下是设置提示符只显示当前目录名称的步骤:1.修改.bashrc......
  • 架构设计——概念和基础
    ......
  • 容器目录清理
    过程分析在异常节点后台使用“df-h|grepdev”命令查看磁盘使用率,发现/var/lib/docker/目录所在磁盘分区达到了70%以上。而后通过cdvar/lib/docker下执行du-sh*|grepG查看当前路径下子目录的大小,发现containers目录的占用极大。该情况下的资源利用率异常应该是日志占......
  • 基于通信协议与技术架构的API接口分类探讨
    API的全称是“ApplicationProgrammingInterface”,意为“应用程序编程接口”API接口的分类:按照技术分WebAPI:基于Web的API,通过HTTP和HTTPS协议与应用程序交互,如RESTfulAPI和SOAPAPI。云API:用于在云计算环境中管理和操作云服务,例如AmazonWebServicesAPI和MicrosoftA......
  • k8s集群负载均衡
    动一下小手点一下赞。谢谢!你的赞就是我更新的动力。Kubernetes(K8S)是一个用于自动部署、扩展和管理容器化应用程序的开源平台。在K8S集群中,负载均衡是非常重要的一环,可以实现将流量分发到不同的节点,保证集群的稳定和高可用性。在本文中,我将向您介绍如何在K8S集群中实现负载均衡,并通......