k8s 架构

主要组件

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.mzph.cn/news/584893.shtml

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

相关文章

GaussDB数据库中的同义词SYNONYM

目录 一、前言 二、GasussDB数据库中的Synonym 1、Synonym的概念 2、语法介绍 3、Synonym的用途 三、Synonym在GaussDB数据库中是如何使用的 1、表的同义词使用(示例) 2、视图的同义词使用(示例) 3、函数的同义词使用&am…

YOLO训练results.csv文件可视化(原模型与改进模型对比可视化)

一、单独一个文件可视化(源码对应utils文件夹下的plots.py文件的plot_results类) from pathlib import Path import matplotlib.pyplot as plt import pandas as pd def plot_results(fileruns/train/exp9/results.csv, dir):# Plot training results.c…

前后端分离nodejs+vue医院预约挂号系统6nrhh

医院预约挂号系统主要有管理员、用户和医生三个功能模块。以下将对这三个功能的作用进行详细的剖析。 运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架:Express/koa 前端:Vue.js 数据库:mysql 开发软件:VScode/webstorm/hbuiderx均…

YOLOv8改进 | 细节创新篇 | iAFF迭代注意力特征融合助力多目标细节涨点

一、本文介绍 本文给大家带来的改进机制是iAFF(迭代注意力特征融合),其主要思想是通过改善特征融合过程来提高检测精度。传统的特征融合方法如加法或串联简单,未考虑到特定对象的融合适用性。iAFF通过引入多尺度通道注意力模块(我…

JDK9及之后版本使用 jlink 生成定制化的 JRE

许多java软件的运行需要依赖jre,在 jdk8 之后,不再提供默认的 jre,后续如果项目中还是想用 jre 的形式发布软件,那么可以使用 jlink 工具生成 jre。 一、jlink 命令详解 jlink 二、查看jdk中包含的所有模块 如果在 jdk 安装文件夹…

Hadoop之Yarn 详细教程

1、yarn 的基本介绍和产生背景 YARN 是 Hadoop2 引入的通用的资源管理和任务调度的平台,可以在 YARN 上运行 MapReduce、Tez、Spark 等多种计算框架,只要计算框架实现了 YARN 所定义的 接口,都可以运行在这套通用的 Hadoop 资源管理和任务调…

【经典算法】有趣的算法之---蚁群算法梳理

every blog every motto: You can do more than you think. 0. 前言 蚁群算法记录 1. 简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性…

VSCode远程开发配置

目录 概要远程开发插件安装开始连接SSH无密码登录开发环境配置 概要 现在很多公司都是直接远程到服务器上写代码,使用远程开发,可以在与生产环境相同的环境中开发、测试和部署代码,减少因环境不同而导致的问题。当下VSCode远程开发是支持的比…

ClickHouse基础知识(六):ClickHouse的副本配置

副本的目的主要是保障数据的高可用性,即使一台 ClickHouse 节点宕机,那么也可以 从其他服务器获得相同的数据。 1. 副本写入流程 2. 配置步骤 ➢ 启动 zookeeper 集群 ➢ 在hadoop101的/etc/clickhouse-server/config.d目录下创建一个名为metrika.xml…

002文章解读与程序——中国电机工程学报EI\CSCD\北大核心《计及源荷不确定性的综合能源生产单元运行调度与容量配置两阶段随机优化》已提供下载资源

👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆下载资源链接&#x1f4…

Collector收集器的高级用法

Collectors收集器的高级用法 场景1:获取关联的班级名称 原先如果需要通过关联字段拿到其他表的某个字段,只能遍历List匹配获取 for (Student student : studentList) {Long clazzId student.getClazzId();// 遍历班级列表,获取学生对应班级…

HarmonyOS4.0系统性深入开发08服务卡片架构

服务卡片概述 服务卡片(以下简称“卡片”)是一种界面展示形式,可以将应用的重要信息或操作前置到卡片,以达到服务直达、减少体验层级的目的。卡片常用于嵌入到其他应用(当前卡片使用方只支持系统应用,如桌…

鸿鹄电子招投标系统:基于Spring Boot、Mybatis、Redis和Layui的企业电子招采平台源码与立项流程

在数字化时代,企业需要借助先进的数字化技术来提高工程管理效率和质量。招投标管理系统作为企业内部业务项目管理的重要应用平台,涵盖了门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理等…

服务器被入侵后如何查询连接IP以及防护措施

目前越来越多的服务器被入侵,以及攻击事件频频的发生,像数据被窃取,数据库被篡改,网站被强制跳转到恶意网站上,网站在百度的快照被劫持等等的攻击症状层出不穷,在这些问题中,如何有效、准确地追…

使用Vscode远程debug报错找不到Module找不到File

1..报第一个错 提示我无法导入自己写的module 如图: 解决办法: stackoverflow上说的在launch.json中加了一条 env,就解决了。 "env": { "PYTHONPATH":"/home/zt/ge-sc-master/ge-sc-master"}, 2.解决完第一个…

软件测试/测试开发丨Python、pycharm 安装与环境配置

Python 安装与环境配置 1. Python 安装 版本推荐 3.10.0下载地址:www.python.org/downloads/w… 若需要安装旧版本,在页面下方选择对应版本即可,MacOS选择对应系统即可 图示下载windows 3.11.4版本 安装Python 执行安装程序,安…

numpy数组03-数组的计算

一.数组与数字之间进行计算 numpy中的数组与数字进行计算是广播形式,数组-*/数字,则数组中的每一个数字都会进行相应的四则运算。 1.1数组与数字之间的四则运算 示例代码如下: import numpy as npa np.arange(24) b a.reshape(4, 6) pr…

【Maven】<scope>provided</scope>

在Maven中,“provided”是一个常用的依赖范围,它表示某个依赖项在编译和测试阶段是必需的,但在运行时则由外部环境提供,不需要包含在最终的项目包中。下面是对Maven scope “provided”的详细解释: 编译和测试阶段可用…

帆软FineBi V6版本经验总结

帆软FineBi V6版本经验总结 BI分析出现背景 ​ 现在是一个大数据的时代,每时每刻都有海量的明细数据出现。这时大数据时代用户思维是:1、数据的爆炸式增长,人们比起明细数据,更在意样本的整体特征、相互关系。2、基于明细的“小…

数据结构之树 --- 二叉树

目录 定义二叉树的结构体 二叉树的遍历 递归遍历 非递归遍历 链式二叉树的实现 二叉树的功能接口 先序遍历创建二叉树 后序遍历销毁二叉树 先序遍历查找树中值为x的节点 层序遍历 上篇我们对二叉树的顺序存储堆进行了讲述,本文我们来看链式二叉树。 定…