k8s 架构

news2024/11/24 22:43:50

主要组件

k8s有如下的主要组件:

  • Control plane(s) and worker node(s)
  • Operators
  • Services
  • Pods of containers
  • Namespaces and quotas
  • Network and policies
  • Storage.
    一个k8s集群是有一个或多个 cp(控制平面)节点和一组worker 节点组成的。这个集群全都是由对operators的api call驱动的。一个网络插件帮助处理内部和外部流量。我们接下来会更加仔细地查看这些组建。
    大部分进程是在容器内部进行的。
    当省级一个集群的时候,需要注意每个组件的版本匹配。 kubeadm upgrade plam 命令对观测此类信息非常有用。
    在这里插入图片描述

Control Plane Node (cp Node)

Kubernetes cp 为集群运行各种服务器和管理器进程。随着软件的成熟,新的组件被创建来处理专用需求,例如云控制器管理器(cloud-controller-manager);它处理曾经由kube-controller-manager处理的任务,以便与其他工具交互,例如用于第三方集群管理和报告的 Rancher 或 DigitalOcean。

有几个附加组件对于典型的生产集群至关重要,例如 DNS 服务。其他的是第三方解决方案,Kubernetes 尚未开发本地组件,例如集群级别的日志记录和资源监控。

作为一个概念,负责确保集群当前状态与所需状态匹配的各种 Pod 称为控制平面(control plane)。

使用 kubeadm 构建集群时,kubelet 进程由 systemd 管理。运行后,它将启动/etc/kubernetes/manifests/中找到的每个 pod 。

control plane node 的组件

  • kube-apiserver

kube -apiserver是 Kubernetes 集群运行的核心。所有请求(包括内部和外部流量)均通过此代理处理。所有操作均由该代理接受并验证,并且它是与etcd数据库的唯一连接。它验证和配置 API 对象的数据,并为 REST 操作提供服务。因此,它充当整个集群的 cp 进程,并充当集群共享状态的前端。

Konnectivity 服务从 v1.18 中开始作为测试版功能,提供了将用户发起的流量与服务器发起的流量分开的能力。在开发这些功能之前,大多数网络插件都会混合流量,这会对性能、容量和安全性产生影响。

  • kube-scheduler

kube -scheduler使用一种算法来确定哪个节点将托管容器 Pod。调度程序将尝试查看要绑定的可用资源(例如卷),然后根据可用性和成功情况尝试重试部署 Pod。有多种方法可以影响算法,或者可以使用自定义调度程序。您还可以将 Pod 绑定到特定节点,但 Pod 可能由于其他设置而保持挂起状态。第一个参考的设置是 Pod 是否可以在当前配额限制内部署。如果是,则使用 Pod 的污点、容忍度和标签(the taints and tolerations, and labels of the Pods)以及节点的元数据来确定正确的放置位置。

  • etcd Database

集群的状态、网络和其他持久信息保存在etcd数据库中,或者更准确地说,保存在 b+tree 键值存储中。值始终附加到末尾,而不是查找和更改条目。然后,对数据的先前副本进行标记,以供将来通过压缩过程删除。它与curl和其他HTTP库一起使用,并提供可靠的监视查询。

更新值的同时请求都通过kube-apiserver传输,然后将请求一系列地传递给etcd 。第一个请求将更新数据库。第二个请求将不再具有相同的版本号,在这种情况下,kube-apiserver将向请求者回复错误 409。服务器端只负责提供响应,没有其它多余的逻辑,这意味着客户端需要预料到这一点并根据拒绝更新采取行动。

有一个领导者(Leader)数据库以及可能的追随者(followers)或正在加入集群的无投票权的学习者(non-voting Learners)。他们不断地相互沟通,以确定谁将成为领导者,并在发生失败时确定另一个领导者。虽然速度非常快并且可能很耐用,但新工具(例如kubeadm )以及整个集群升级等功能却出现了一些问题。

虽然大多数 Kubernetes 对象都被设计为解耦的,但无需过多关注etcd即可终止的瞬态微服务是例外。事实上,整个集群的持久状态必须受到保护和保障。在升级或维护之前,您应该计划备份etcd。etcdctl命令允许快照保存和快照恢复。

  • Other Agents

kube -controller-manager是一个核心控制循环守护进程,它与kube-apiserver交互以确定集群的状态。如果状态不匹配,管理器将联系必要的控制器以匹配所需的状态。有几个正在使用的operators,例如端点endpoints、命名空间namespace和复制replication。随着 Kubernetes 的成熟,完整列表也在不断扩大。

自 v1.11 起仍处于测试阶段,云控制器管理器( ccm ) 与云外部的代理进行交互。它处理曾经由kube-controller-manager处理过的任务。这样可以在不改变核心 Kubernetes 控制流程的情况下实现更快的更改。每个 kubelet 必须使用传递给二进制文件的–cloud-provider-external设置。您还可以开发自己的 ccm,它可以作为守护程序集部署为树内部署或独立的树外安装。云控制器管理器是一个可选代理,需要几个步骤才能启用。您可以在线了解有关云控制器管理器的更多信息。

根据选择的网络插件,可能有各种 pod 来控制网络流量。为了处理 DNS 查询、Kubernetes 服务发现和其他功能,CoreDNS服务器已取代kube-dns。使用插件链(提供的或自定义编写的插件之一),服务器可以轻松扩展。

Worker Nodes

所有节点都运行 kubelet 和 kube-proxy,以及容器引擎,例如 Docker 或 cri-o,等等。部署其他管理守护进程来监视这些代理或提供 Kubernetes 中尚未包含的服务。

kubelet 与同样安装在所有节点上的底层容器引擎进行交互,并确保需要运行的容器确实正在运行。kube-proxy 负责管理容器的网络连接。它通过使用 iptables 条目来实现这一点。它还具有用户空间模式,在该模式下,它使用随机端口通过 ipvs 代理流量来监视服务和端点。根据所使用的插件,可能会找到网络插件 pod,例如 calico-node。

每个节点可以在不同的引擎中运行。Kubernetes 很可能会支持额外的容器运行时引擎。

Supervisord 是传统 Linux 环境中使用的轻量级进程监视器,用于监视和通知其他进程。在非 systemd 集群中,该守护进程可用于监控 kubelet 和 docker 进程。如果失败,它将尝试重新启动它们并记录事件。虽然不是典型安装的一部分,但有些人可能会添加此监视器以添加报告。

Kubernetes 还没有集群范围的日志记录。相反,使用另一个 CNCF 项目,称为Fluentd。实施后,它为集群提供一个统一的日志记录层,用于过滤、缓冲和路由消息。

集群范围的指标是另一个功能有限的领域。指标服务器 SIG 提供基本的节点和 Pod CPU 和内存利用率。对于更多指标,许多人使用 Prometheus 项目。

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

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

相关文章

ChatGPT使用注意事项有哪些?

一、环境注意事项 1、需要构造稳定的环境,很多人说自己的号为什么突然被封,被封的原因是因为有些环境会自动换IP,所以你要设置好 2、搭建美国住宅IP 3、注册时也不要使用香港,最好选择美国、新加坡等地区注册 二、API调用注意事…

(已解决)(pytorch指定了gpu但还是占用了一点0号gpu)以及错误(cuDNN error: CUDNN_STATUS_INTERNAL_ERROR)

文章目录 错误原因解决问题 错误原因 出现错误cuDNN error: CUDNN_STATUS_INTERNAL_ERROR,从这个名字就可以看出,出错原因其实有可能有很多种,我这里说一种比较常见的,就是:显存不足。 一个困惑点在于,在…

k8s的陈述式资源管理(命令行操作)

(一)k8s的陈述式资源管理 1、命令行:kubectl命令行工具——用于一般的资源管理 (1)优点:90%以上ce场景都可以满足 (2)特点:对资源的增、删、查比较方便,对…

【neo4j】desktop下载

【neo4j】desktop下载 https://neo4j.com/download/ 点击download,填写表格 之后就可以正常使用了

Jackson进行Json反序列化对于一个小写字母开头后跟大写字母无法识别反序列成功问题

问题描述 json数据:{“pTargetId”:“123”} javaBean: Datapublic static class Test {private String pTargetId;}运行下面代码: public static void main(String[] args) throws JsonProcessingException {String json "{\"pT…

docker入门概念详解

本篇文章对docker的一些基础概念和周边概念进行了详细解释。帮助你可以很好的理解docker是用来干什么的,docker是怎么工作的。其中有docker所运用到的技术解释,docker的不同发展版本,dokcer的架构,docker的生态等等详解。希望本片…

flink generic log-based incremental checkpoints 设计

背景 flink 在1.15版本后开始提供generic log-based incremental checkpoints的检查点方案,目的在于减少checkpoint的耗时,尽量缩短端到端的数据处理延迟,本文就来看下这种新类型的checkpoint的设计 generic log-based incremental checkpo…

GPT-3: Language Models are Few-Shot Learners

GPT-3 论文 数据集 CommonCrawl:文章通过高质量参考语料库对CommonCrawl数据集进行了过滤,并通过模糊去重对文档进行去重,且增加了高质量参考语料库以增加文本的多样性。WebText:文章采用了类似GPT-2中的WebText文档收集清洗方…

【FFI】N-API的JS堆对象生命周期管理

N-API的JS堆对象生命周期管理 N-API是Node API的简写,同时也是nodejs的JS VM(链)接入原生模块.node文件的应用程序二进制接口(i.e. ABI)。借助N-API引入的抽象隔离,升级nodejs运行时(虚拟机) 【编译】不要求…

米表网PHP域名销售管理系统网站源码 自适应电脑+手机端

PHP域名销售管理系统网站源码 自适应电脑手机端 功能使用简单,不复杂,非常适合个人米表使用,带广告栏 源码下载:https://download.csdn.net/download/m0_66047725/88646799

Spring Boot整合GraphQL

RPC选型入门测试系列文章 GraphQL是一种用于API开发的查询语言和运行时环境。它由Facebook开发并于2015年开源。GraphQL的主要目标是提供一种更高效、灵活和易于使用的方式来获取和操作数据。与传统的RESTful API相比,GraphQL允许客户端精确地指定需要的数据&#…

C语言实例_stdlib.h库函数功能及其用法详解

一、前言 C语言作为一种高效、灵活的编程语言,标准库的使用对于开发人员来说是不可或缺的。其中,stdlib.h是C语言中一个重要的标准库头文件,提供了许多常用的函数和工具,以便开发人员能够更加便捷地进行内存管理、字符串处理、随…

《深入理解JAVA虚拟机笔记》运行时栈帧、方法分派、动态类型

运行时栈帧结构 Java 虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈…

电气产品外壳常用材质PA、PC、PBT、ABS究竟是什么?

在如今工业制造领域,各种改性塑料、复合材料以及轻质合金材料的运用日趋成熟。在电气领域,不同电气产品的外壳、组件材质采用不同材料,以同为科技(TOWE)电气产品为例,工业连接器系列产品采用PA6外壳材质、机…

python+django网上购物商城系统o9m4k

语言:Python 框架:django/flask可以定制 软件版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发工具pycharm/vscode都可以 前端框架:vue.js 系统使用过程主要涉及到管理员和用户两种角色,主要包含个…

javascript实现数据双向绑定

ES5中的双向绑定 ES5中的对象属性类型有两种:分别是数据属性和访问器属性 一,数据属性 数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有4个描述其行为的特性 1,configurable:表示能否通过delete删除属性而重新定义…

利用Pandas进行高效网络数据获取

利用Pandas进行高效网络数据获取 背景: ​ 最近看到一篇关于使用Pandas模块进行爬虫的文章,觉得很有趣,这里为大家详细说明。 基础铺垫: ​ pd.read_html pandas 库中的一个函数,用于从 HTML 页面中读取表格数据并…

CEC2017(Python):五种算法(PSO、RFO、SSA、DE、HHO)求解CEC2017

一、5种算法简介 1、粒子群优化算法PSO 2、红狐优化算法RFO 3、麻雀搜索算法SSA 4、差分进化算法DE 5、哈里斯鹰优化算法HHO 二、CEC2017简介 参考文献: [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem de…

详解“量子极限下运行的光学神经网络”——相干伊辛机

量子计算和量子启发计算可能成为解答复杂优化问题的新前沿,而经典计算机在历史上是无法解决这些问题的。 当今最快的计算机可能需要数千年才能完成高度复杂的计算,包括涉及许多变量的组合优化问题;研究人员正在努力将解决这些问题所需的时间缩…

白话机器学习的数学-2-分类

1、设置问题 图片分类:只根据尺寸把它分类为 纵向图像和横向图像。 如果只用一条线将图中白色的点和黑色的点分开: 这次分类的目的就是找到这条线。 2、内积 找到一条线,这是否意味着我们要像学习回归时那样,求出一次函数的斜率…