当前位置: 首页 > news >正文

【k8s集群应用】Kubernetes 容器编排系统

文章目录

  • Kubernetes 容器编排系统
    • 背景与发展
    • Kubernetes 基本概念
    • Kubernetes 集群架构与组件
      • Kubernetes 核心组件
        • Master 组件
        • 配置存储中心
        • Node 组件
    • Kubernetes核心概念
      • 1. Pod
      • 2. Pod控制器
      • 3. Label与Label选择器
      • 4. Service
      • 5. Ingress
      • 6. Volume
      • 7. Name与Namespace
    • K8S创建Pod资源对象的工作流程
    • 总结

Kubernetes 容器编排系统

背景与发展

更高级的容器编排工具:

工具名称描述所属公司/组织
docker-swarmDocker旗下的容器跨主机编排工具,是实现在多机上Docker容器及其管理调度的工具Docker
mesos + marathonmesos:分布式资源管理框架,可以对集群中的多台主机的硬件资源进行统一调度和管理
marathon:mesos的容器编排框架,用来调度和运行容器服务
Apache
kubernetesGoogle旗下的容器跨主机编排工具,已经成为当前容器编排工具的事实标准Google

物理机时代
物理机存在诸多局限,如部署慢、成本高、资源浪费以及扩展和迁移困难。每台物理服务器需要单独安装操作系统和应用程序环境,配置繁琐且硬件资源利用率低。
虚拟机时代
虚拟机(如VMware)通过虚拟化技术解决了物理机的部分问题。虚拟机可以在物理机上快速部署,实现资源池化,提高资源利用率,并通过资源隔离确保虚拟机之间的独立性。然而,虚拟机仍需安装完整的操作系统,导致资源消耗较大。
容器化时代
容器化技术(如Docker)进一步解决了虚拟机的缺点。容器共享主机操作系统内核,无需安装完整的操作系统,从而实现了更高效的资源利用。容器具有一致的运行环境,启动速度快,且镜像体积小,便于分发和管理。然而,单机上的容器编排存在诸多挑战,如节点管理、负载均衡、自动化运维等。

Kubernetes 基本概念

全称与缩写
全称为 Kubernetes (K12345678S)(简称K8s)是一个用于自动部署、扩展和管理容器化应用程序的开源系统。K8s的名字来源于希腊语的舵手或飞行员,寓意着它作为容器集群的“领航者”。

由来与发展
K8s起源于Google的Borg系统(博格系统,google内部使用的大规模容器编排工具),后经GO语言重写并捐献给云原生计算基金会(CNCF)开源。随着容器的广泛使用,K8s已成为容器编排工具的事实标准。

作用与特点
K8s是一个生态极其丰富的容器编排框架工具,负责自动化运维管理多个容器化程序。它提供了自动化管理、弹性伸缩、高可用性、负载均衡和跨平台支持等特点,大大提高了应用部署和管理的效率。

Kubernetes 集群架构与组件

主从设备模型
K8s采用主从设备模型(Master-Slave架构),其中Master节点负责集群的调度、管理和运维,而Worker Node节点则负责运行工作负载。
Master组件

  • API Server:集群的统一入口,负责处理RESTful API请求。
  • Scheduler:负责根据调度算法将Pod调度到合适的Node上。
  • Controller Manager:负责集群内各种资源的自动化管理,如ReplicaSet、Deployment等。
  • etcd:一个高可用的分布式键值数据库,用于存储集群的配置信息和状态。

Worker Node组件

  • kubelet:Node的代理,负责监听API Server的指令并执行相应的操作。
  • kube-proxy:实现Service的负载均衡和内部通信。
  • Docker(或其他容器运行时):负责容器的创建和管理。

其他组件

  • Addon:K8s的扩展组件,如DNS、Ingress Controller、Dashboard等。

在这里插入图片描述

Kubernetes 核心组件

Master 组件

1. Kube-apiserver

  • 功能
    • 暴露 Kubernetes API,作为集群的统一入口。
    • 处理所有资源请求或调用操作,通过 HTTP Restful API 提供服务。
    • 验证请求的合法性,并将请求转发给相应的控制器进行处理。
    • 存储资源对象的状态到 Etcd 中。
  • 工作原理
    1. 监听特定端口,接收来自客户端的 HTTP 请求。
    2. 对请求进行认证和授权。
    3. 验证请求中的数据格式和内容。
    4. 将请求信息存储到 Etcd 中,并更新集群状态。
    5. 提供其他模块之间的数据交互和通信的枢纽。

2. Kube-controller-manager

  • 功能
    • 运行管理控制器,处理 K8S 集群中的常规任务。
    • 监控和管理集群中的各种资源,确保集群处于预期的工作状态。
  • 包含的控制器
    • Node Controller:负责节点故障发现和响应。
    • Replication Controller:确保 Pod 副本数始终保持预设值。
    • Endpoints Controller:填充端点对象,连接 Services 和 Pods。
    • Service Account & Token Controllers:为新的命名空间创建默认帐户和 API 访问令牌。
    • ResourceQuota Controller:确保资源对象不会超量占用系统资源。
    • Namespace Controller:管理 namespace 的生命周期。
    • Service Controller:K8S 集群与外部云平台之间的接口控制器。
  • 工作原理
    1. 通过 API Server 定期获取资源的状态信息。
    2. 根据资源的定义和当前状态,计算期望状态。
    3. 如果当前状态与期望状态不一致,采取相应的行动。

3. Kube-scheduler

  • 功能
    • 负责资源调度,将待调度的 Pod 分配到合适的节点上运行。
  • 调度策略
    • 预选策略(predicate):过滤不符合条件的节点。
    • 优选策略(priorities):优先级排序,选择优先级最高的节点。
  • 工作原理
    1. 从 API Server 获取尚未分配到节点的 Pod 信息。
    2. 根据 Pod 的资源需求和节点的可用资源,筛选出符合条件的节点。
    3. 为符合条件的节点计算优先级。
    4. 选择优先级最高的节点,并将 Pod 调度到该节点上。
配置存储中心

Etcd

  • 功能
    • K8S 的存储服务,保存集群的所有配置和状态信息。
    • 仅 API Server 具备读写权限,其他组件通过 API Server 接口读写数据。
  • 工作原理
    1. 以键值对的形式存储 K8S 集群的配置数据、资源对象的定义和状态等。
    2. 通过 Raft 一致性算法确保数据的一致性和可靠性。
    3. 在多个 Etcd 节点之间同步数据,实现高可用性。
Node 组件

1. Kubelet

  • 功能
    • Master 在 Node 节点上的 Agent 代理程序,管理 Pod 和容器的生命周期。
    • 将每个 Pod 转换成一组容器。
  • 工作原理
    1. 向 API Server 注册节点信息。
    2. 根据 API Server 的指令,启动、停止和监控 Pod 中的容器。
    3. 定期收集节点的资源使用情况,并上报给 API Server。

2. Kube-proxy

  • 功能
    • 实现 K8S 中的服务发现和负载均衡功能。
    • 在 node 节点上实现 Pod 网络代理,维护网络规则和四层负载均衡工作。
  • 工作原理
    1. 监听 API Server 中 service 和 endpoint 的变化情况。
    2. 根据 service 的定义,在节点上配置网络规则,实现请求的分发和负载均衡。
    3. 定期检查后端 Pod 的健康状况。

3. Container Runtime

  • 功能
    • 容器引擎,负责运行容器。
    • 常见的实现包括 Docker、Containerd 等。
  • 工作原理
    1. 根据 Pod 中容器的定义,从镜像仓库拉取所需的镜像。
    2. 创建和启动容器,并配置相应的网络和存储。
    3. 实现容器之间的资源隔离和限制。

Kubernetes核心概念

1. Pod

  • 定义:Pod是Kubernetes中最小的可部署的计算单元,它包含一个或多个容器,这些容器共享网络、存储等资源,并在同一台Node节点上运行。
  • 特点
    • 一个Pod可以运行多个容器,称为边车模式(SideCar),常用于日志收集、监控等辅助任务。
    • Pod内的容器可以通过localhost互相访问,并可以挂载Pod内的所有数据卷。
    • 不同的Pod之间不能通过localhost访问,也不能挂载其他Pod的数据卷。

2. Pod控制器

  • 定义:Pod控制器用于确保Pod按照用户的预期运行,包括副本数、生命周期、健康状态检查等。
  • 常用控制器
    • Deployment:无状态应用部署,用于管理和控制Pod和ReplicaSet。
    • ReplicaSet:确保预期的Pod副本数量,受Deployment控制。
    • DaemonSet:确保所有节点运行同一类Pod,常用于系统级后台任务。
    • StatefulSet:有状态应用部署,适用于需要稳定且唯一的网络标识符的应用。
    • Job:一次性任务,Pod完成任务后自动退出。
    • CronJob:周期性计划性任务。

3. Label与Label选择器

  • Label:用于分类管理资源对象,可以附加到Node、Pod、Service等资源上,通过key-value键值对定义。
  • Label选择器:用于查询和筛选拥有特定Label的资源对象,支持等值关系和集合关系选择器。

4. Service

  • 定义:Service是Kubernetes中用于访问一组Pod的抽象层,提供稳定的对外访问接口和负载均衡功能。
  • 特点
    • Service通过标签选择器定义作用于哪些Pod。
    • Service有固定的虚拟IP(Cluster IP),自动绑定后端Pod,实现流量转发和负载均衡。
    • Service支持多种流量调度模式,如iptables和ipvs。

5. Ingress

  • 定义:Ingress是Kubernetes集群的接入层,负责集群内外通讯,支持HTTP/HTTPS协议。
  • 特点
    • Ingress可以调度不同业务域、不同URL访问路径的业务流量。
    • Ingress通常与Service配合使用,实现外部访问集群内部服务。

6. Volume

  • 定义:Volume是Pod访问文件系统的抽象层,支持多种后端存储,如本地存储、NFS网络存储、云存储等。
  • 特点
    • Volume可以被挂载在Pod中一个或多个容器的指定路径下。
    • Volume提供了Pod间数据共享和持久化的能力。

7. Name与Namespace

  • Name:资源在Kubernetes中的唯一标识符,通常定义在资源的元数据(metadata)信息里。
  • Namespace:用于逻辑上隔离Kubernetes内的各种资源,不同Namespace内的资源名称可以相同,但相同Namespace内的同种资源名称必须唯一。
  • 常用Namespace
    • default:默认Namespace,未指定Namespace时使用的Namespace。
    • kube-system:Kubernetes系统创建的Namespace,用于存放系统级资源。
    • kube-public:Kubernetes自动创建的Namespace,用于存放整个集群范围内可见的资源。

K8S创建Pod资源对象的工作流程

  1. 用户通过客户端发送创建Pod的请求给apiserver
  2. apiserver接收到请求并验证后,会先将请求信息存入到etcd中,etc写入完成后,会发送创建Pod的事件给apiserver,再由apiserver转发给controller-manager
  3. controller-manager通过list-watch监听到apiserver发来的事件后,会根据请求信息中的资源配置创建Pod资源
  4. controller-manager创建好Pod资源后会通过apiserver将Pod资源的信息写入到etcd中,etc写入完成后,再发送事件给apiserver,再由apiserver转发给scheduler
  5. scheduler通过list-watch监听到apiserver发来的事件后,开始调度新创建的Pod,会先根据调度算法的预选策略过滤掉不符合条件的node节点,再根据优选策略选择优先级最高的node节点来调度Pod
  6. scheduler调度好Pod资源后会通过apiserver更新Pod资源的信息到etcd中,etc更新完成后,再发送事件给apiserver,再由apiserver转发node节点上的kubelet
  7. node节点上的kubelet通过list-watch监听到apiserver发来的事件后,会在node节点上调用容器引擎创建Pod及其容器,并管理它们的生命周期
  8. kubelet之后会定期收集Pod资源的状态并上报给apiserver
  9. 用户还可以通过apiserver在kube-proxy上创建service的网络规则,实现对Pod的网络代理和负载均衡

总结

K8S资源对象

资源对象描述
PodK8S能够创建和管理的最小单元,一个Pod里可以包含一个或多个容器,容器间共享网络、存储等资源
Deployment部署无状态应用,管理replicaset和Pod
StatefulSet部署有状态应用
DaemonSet在每个node节点上都部署同一类的Pod
Job一次性的部署短期任务的Pod
CronJob周期性的部署短期任务的Pod
Service在K8S集群内部,为通过标签选择器关联的一组Pod提供统一的访问入口和负载均衡
Ingress作为K8S集群外部的访问入口,支持七层代理转发
Volume存储卷,Pod中的容器可以挂载使用的文件系统

K8S资源配置字段

字段描述
apiversion指定资源对象使用的api版本
kind指定资源对象的类型
metadata指定资源对象的元数据信息
spec指定资源对象的配置属性
status资源对象在当前的运行状态

元数据信息配置字段

字段描述
name指定资源名称
namespace指定资源对象所在的命名空间。在同一个命名空间中,同类型资源的名称是唯一的
label指定资源使用的标签。可以给资源对象添加一个或多个键值对标签,再通过标签选择器进行资源的分组和过滤

相关文章:

【k8s集群应用】Kubernetes 容器编排系统

文章目录 Kubernetes 容器编排系统背景与发展Kubernetes 基本概念Kubernetes 集群架构与组件Kubernetes 核心组件Master 组件配置存储中心Node 组件 Kubernetes核心概念1. Pod2. Pod控制器3. Label与Label选择器4. Service5. Ingress6. Volume7. Name与Namespace K8S创建Pod资源…...

Unity3D仿星露谷物语开发2之工程初始化

1、依赖包安装 进入【Window -> Package Manager】 安装如下插件: 1)Cinemachine 它是一套专门控制Unity Camera的模块,适用于各种游戏场景中物体的移动变化,解决了许多关于摄像机间的复杂控制,混合&#xff0c…...

Kafka篇之参数优化进而提高kafka集群性能

1. Kafka性能优化分类 Kafka集群的性能优化涉及多个方面,包括硬件资源、网络、配置文件参数等。 调优目标通常是为了提高吞吐量、减少延迟、提升稳定性和故障恢复能力。 以下是Kafka集群调优的常见策略,以及调优后的配置文件示例。 1. 硬件资源调优 C…...

关于SAP Router连接不稳定的改良

这个也是网上看来的,之前在用的时候也在想是不是建立一个长连接,就不至于断线。今天正好看到。 关于SAP Router连接不稳定的改良 我们在使用SAPRouter时经常会碰到断线,其发生原因有很多,如:网络不稳定、操作间隔时间…...

使用pygame做游戏(2):2048游戏的进一步改造,以失败告终

前言 受《Python树莓派编程从零开始》里的示例启发,我决定将上篇的2048游戏进行“面向对象化”改造。 这次除了要建立一些对象,还要能有移动效果,并能显示中文。 另外我还发现一个bug:方块放满了不代表输了,还要检查能…...

【CSS in Depth 2 精译_078】12.6 调整字间距,提升可读性 + 12.7 本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体12.3 谷歌字体12.4 font-fac…...

泷羽sec学习打卡-brupsuite7搭建IP炮台

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-Brup-IP炮台搭建 搭建炮台服务端安装zmap1、更新系统和安装基础依赖&#xff…...

使用Svelte构建轻量级应用详解

文章目录 前言一、为什么选择Svelte?二、快速上手Svelte三、理解Svelte的核心概念四、优化性能与用户体验五、案例研究:构建一个待办事项应用结语 前言 Svelte是一款新兴的前端框架,以其小巧的体积、高效的性能和直观的API赢得了开发者的青睐…...

Qt设置部件的阴影效果

QT中的比如QWidget,QLabel,QPushbutton,QCheckBox都可以设置阴影效果,就像这样: 以QWidget为例,开始尝试使用样式表的形式添加阴影,但没有效果,写法如下: QWidget#widget1::shadow{color: rgb…...

Python 助力 DBA:高效批量管理数据库服务器的多线程解决方案-多库查询汇总工具实现

批量数据库服务器连接测试与数据汇总:Python实现方案 作为数据库服务器运维人员,我们经常需要面对大量服务器的连接测试和数据汇总工作。本文将介绍一个使用Python实现的高效解决方案,可以帮助我们快速完成这些任务。 需求概述 从配置文件…...

vue响应式数据-修改对象的属性值,视图不更新

如图: 一:问题是: 我把数据处理后能console.log()打印出来,但是页面的内容不能同步的更新渲染; 二:要求: 在数组循环列表里面,我点击单个的item按钮时,需要实时加载进度…...

【OpenCV计算机视觉】图像处理——平滑

本篇文章记录我学习【OpenCV】图像处理中关于“平滑”的知识点,希望我的分享对你有所帮助。 目录 一、什么是平滑处理 1、平滑的目的是什么? 2、常见的图像噪声 (1)椒盐噪声 ​编辑(2) 高斯噪声 &a…...

C#编程报错- “ComboBox”是“...ComboBox”和“...ComboBox”之间的不明确的引用

1、问题描述 在学习使用C#中的Winform平台编写一个串口助手程序时, 在编写一个更新ComboBox列表是遇到了问题,出错的代码是 2、报错信息 CS1503 参数 2: 无法从“System.Windows.Forms.ComboBox”转换为“System.Windows.Forms.ComboBox” CS1503 …...

JAVA:访问者模式(Visitor Pattern)的技术指南

1、简述 访问者模式(Visitor Pattern)是一种行为型设计模式,允许你将操作分离到不同的对象中,而无需修改对象本身的结构。这种模式特别适合复杂对象结构中对其元素进行操作的场景。 本文将介绍访问者模式的核心概念、优缺点,并通过详细代码示例展示如何在实际应用中实现…...

YashanDB共享集群产品能力观测:细节足见功底

本文基于前泽塔数科研发总监-王若楠2024年11月在“2024年国产数据库创新生态大会”-“根”技术专场的演讲整理形成,主要对崖山共享集群YAC的架构、功能、高可用性、性能四大方面进行全面测试,并分享了测试环境和测试结论。 年初,基于某些商业…...

【Linux】—简单实现一个shell(myshell)

大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦! 本文由:残念ing原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客&…...

@FeignClient用于Nacos微服务间的接口调用

依赖&#xff1a;<!-- spring-boot启动依赖 --> <!-- 提供者 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- openFeign --> <…...

认识javascript中的模块化

什么是模块化&#xff1f; 将程序⽂件依据⼀定规则拆分成多个文件&#xff0c;拆分出来每个⽂件就是⼀个模块&#xff0c;模块中的数据都是私有的&#xff0c;模块之间互相隔离。如果不进行隔离&#xff0c;可能会造成模块间的变量定义有冲突&#xff0c;导致程序崩溃 为啥要使…...

容器设计模式:Sidecar

文章目录 容器设计模式&#xff1a;Sidecar 模式1. 什么是 Sidecar 模式&#xff1f;2. Sidecar 模式的原理2.1 工作机制2.2 常见用途 3. Sidecar 模式示例示例&#xff1a;日志收集 4. Sidecar 模式的架构图图例&#xff1a; 5. Sidecar 模式的优点6. Sidecar 模式的局限性7. …...

ensp 静态路由配置

A公司有广州总部、重庆分部和深圳分部3个办公地点&#xff0c;各分部与总部之间使用路由器互联。广州、重庆、深圳的路由器分别为R1、R2、R3&#xff0c;为路由器配置静态路由&#xff0c;使所有计算机能够互相访问&#xff0c;实训拓扑图如图所示 绘制拓扑图 给pc机配置ip地址…...

MATLAB图卷积神经网络GCN处理分子数据集节点分类研究

全文链接&#xff1a;https://tecdat.cn/?p38570 本文主要探讨了如何利用图卷积网络&#xff08;GCN&#xff09;对图中的节点进行分类。介绍了相关的数据处理、模型构建、训练及测试等环节&#xff0c;通过对分子数据集的操作实践&#xff0c;展示了完整的节点分类流程&#…...

Android-Glide详解

目录 一&#xff0c;介绍 二&#xff0c;使用 三&#xff0c;源码分析思路 四&#xff0c;with源码分析 五&#xff0c;模拟Glide生命周期管理 一&#xff0c;介绍 Glide目前是安卓最主流的加载图片的框架&#xff0c;也是源码最为复杂的框架之一。 要想完完全全吃透Glide的源…...

2.Nuxt学习 组件使用和路由跳转相关

组件定义和使用 普通组件的使用 在Nuxt的项目中&#xff0c;可以直接在components文件夹下建立组件 在页面中直接使用 无需引入 多层级组件的使用 我们有时候会需要多层级组件来简化代码结构 比如我们需要给Banner组件添加一个子组件 我们直接建立其名称的文件夹 写入子组…...

代码开发相关操作

使用Vue项目管理器创建项目&#xff1a;&#xff08;vue脚手架安装一次就可以全局使用&#xff09; windowR打开命令窗口&#xff0c;输入vue ui&#xff0c;进入GUI页面&#xff0c;点击创建-> 设置项目名称&#xff0c;在初始化git下面输入&#xff1a;init project&…...

动态导出word文件支持转pdf

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、功能说明二、使用步骤1.controller2.工具类 DocumentUtil 导出样式 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff…...

登陆harbor发现证书是错误的, 那么如何更新harbor的证书呢

Error response from daemon: Get "https://172.16.21.35/v2/": tls: failed to verify certificate: x509: certificate is valid for 127.0.0.1, ::1, 172.16.21.30, not 172.16.21.35 版本 v2.10.1-b7b88476 不需要从头看, 直接看最下面的成功的证书创建 这里面首…...

【Leetcode Top 100】199. 二叉树的右视图

问题背景 给定一个二叉树的 根节点 r o o t root root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 数据约束 二叉树的节点个数的范围是 [ 0 , 100 ] [0,100] [0,100] − 100 ≤ N o d e . v a l ≤ 100…...

React自学:如何使用localStorage,以及如何实现删除笔记操作

1. 初始化notes 以下这段代码完成了这些操作&#xff1a; 调用 localStorage.getItem("notes") 从浏览器的本地存储中获取名为 “notes” 的数据。使用 JSON.parse 将获取到的字符串解析成数组。如果本地存储中没有 “notes” 数据&#xff08;返回值为 null&#…...

go语言使用websocket发送一条消息A,持续接收返回的消息

在Go语言中实现一个WebSocket客户端&#xff0c;可以使用gorilla/websocket这个非常流行的库来处理WebSocket连接。下面是一个简单的示例&#xff0c;展示了如何创建一个WebSocket客户端&#xff0c;向服务器发送消息"A"&#xff0c;并持续接收来自服务器的响应。 首…...

如何对小型固定翼无人机进行最优的路径跟随控制?

控制架构 文章继续采用的是 ULTRA-Extra无人机&#xff0c;相关参数如下&#xff1a; 这里用于guidance law的无人机运动学模型为&#xff1a; { x ˙ p V a cos ⁡ γ cos ⁡ χ V w cos ⁡ γ w cos ⁡ χ w y ˙ p V a cos ⁡ γ sin ⁡ χ V w cos ⁡ γ w sin ⁡ χ…...