【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指定资源使用的标签。可以给资源对象添加一个或多个键值对标签,再通过标签选择器进行资源的分组和过滤

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

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

相关文章

梳理你的思路(从OOP到架构设计)_简介EIT造形

目录 1、 复习<基类 /子类>的扩充(extends)结构 典型的<基类/子类>代码结构 <基类/子类>代码结构的变形 2、 从<基类/子类>结构到EIT造形 3、 EIT造形的基本形与变形 1、 复习<基类 /子类>的扩充(extends)结构 典型的<基类/子类>代码…

Rust vs C: PNG解码器性能之争的启示

在系统编程领域,C语言一直是性能标杆。但最近一个现象引发了广泛讨论:用 Rust 实现的 PNG 解码器性能竟然超越了 C 语言版本。这个看似反直觉的结果背后,折射出现代编程语言发展的新趋势。 让我们深入解析这个有趣的技术现象。PNG解码本质上是把压缩的图像数据还原成像素数据的…

【收藏】Cesium 限制相机倾斜角(pitch)滑动范围

1.效果 2.思路 在项目开发的时候&#xff0c;有一个需求是限制相机倾斜角&#xff0c;也就是鼠标中键调整视图俯角时&#xff0c;不能过大&#xff0c;一般 pitch 角度范围在 0 至 -90之间&#xff0c;-90刚好为正俯视。 在网上查阅了很多资料&#xff0c;发现并没有一个合适的…

MyBatis-Plus 实用工具:SqlHelper

SqlHelper 是MyBatis-Plus的一款SQL 辅助工具类&#xff0c;提供了一些常用的方法&#xff0c;简便我们的操作&#xff0c;提高开发效率。文档 最常用的是SqlHelper.table(Obj.class) 返回的 TableInfo 对象通常包含以下常用方法&#xff1a; 1. getTableName() 获取表名。示例…

游戏无界,RayLink远程控制电脑打造极致游戏体验

在数字化浪潮席卷全球的今天&#xff0c;电子游戏已经成为我们日常生活中不可或缺的娱乐方式。“游戏无界限”的理念正在逐步改变着玩家们的游戏体验。远程操控电脑技术的兴起&#xff0c;仿佛为游戏世界打开了一扇新的大门&#xff0c;打破了时间和空间的限制&#xff0c;让玩…

【LeetCode】2406、将区间分为最少组数

【LeetCode】2406、将区间分为最少组数 文章目录 一、数据结构-堆、贪心1.1 数据结构-堆、贪心1.2 多语言解法 二、扫描线2.1 扫描线 一、数据结构-堆、贪心 1.1 数据结构-堆、贪心 题目已知一些区间, 需要尽量合并, 使 组 最少. 可以用图解画一下 因为尽量合并, 为了紧凑, …

彻底理解如何优化接口性能

作为后端研发&#xff0c;必须要掌握怎么优化接口的性能或者说是响应时间&#xff0c;这样才能提高系统的系能&#xff0c;本文通过如下两个方面进行分析&#xff1a; 一.后端代码 有如下几步&#xff1a; 1.缓存机制 这是最场景的方式&#xff0c;当使用了缓存后&#xff0c;…

Java性能调优 - JVM性能监测及调优

JVM 内存模型概述 堆 堆是JVM内存中最大的一块内存空间&#xff0c;该内存被所有线程共享&#xff0c;几乎所有对象和数组都被分配到了堆内存中。堆被划分为新生代和老年代&#xff0c;新生代又被进一步划分为Eden和Survivor区&#xff0c;最后Survivor由From Survivor和To Su…

【计算机网络】期末考试预习复习|上

作业讲解 物理层作业 共有4个用户进行CDMA通信。这4个用户的码片序列为&#xff1a; A: (–1 –1 –1 1 1 –1 1 1)&#xff1b;B: (–1 –1 1 –1 1 1 1 –1) C: (–1 1 –1 1 1 1 –1 –1)&#xff1b;D: (–1 1 –1 –1 –1 –1 1 –1) 现收到码片序列&#xff1a;(–1 1 –…

Element plus 下拉框组件选中一个选项后显示的是 value 而不是 label

最近刚进行 Vue3 Element plus 项目实践&#xff0c;在进行表单二次封装的时候&#xff0c;表单元素 select 下拉框组件选中一个选项后显示的是 value 而不是 label&#xff0c;下面上代码&#xff1a; 原来的写法&#xff1a; <el-selectv-if"v.type select"…

SpringBoot2+Vue2开发工作管理系统

项目介绍 在工作中使用的管理系统&#xff0c;可以随手记录一些笔记、可以汇总一些常用网站的链接、可以管理自己负责的项目、可以记录每日日报和查看历史日报、可以记录加班情况、可以记录报销内容、可以编写文章文档。 系统功能 我的笔记快捷入口项目管理今日日报我的日报…

C语言实现八大排序算法

目录 1.插入排序 1.1 直接插入排序 1.2 希尔排序 2. 选择排序 2.1 直接选择排序 2.2 堆排序 *TopK问题&#xff1a; 3. 交换排序 3.1 冒泡排序 3.2 快速排序 1. Hoare版本 2. 挖坑法 3. 前后指针法 4. 快速排序优化 5. 非递归快速排序 4.归并排序 1.递归式归并…

SpringCloudAlibaba | Sentinel从基础到进阶

一、Sentinel简介 Sentinel是SpringCloudAlibaba的一个组件&#xff0c;主要用于解决微服务架构中的高可用性和稳定性问题&#xff08;雪崩问题&#xff09;。 常见的使用场景有&#xff1a; 流量控制舱壁模式&#xff08;线程隔离&#xff09;超时处理熔断降级 二、流量控…

51c嵌入式~单片机~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、STM32代码远程升级之IAP编程 IAP是什么 有时项目上需要远程升级单片机程序&#xff0c;此时需要接触到IAP编程。 IAP即为In Application Programming&#xff0c;解释为在应用中编程&#xff0c;用户自己的…

Spring Boot 集成 Elasticsearch怎样在不启动es的情况下正常启动服务

解释 在spingboot 集成es客户端后&#xff0c;每当服务启动时&#xff0c;服务默认都会查看es中是否已经创建了对应的索引&#xff0c;如果没有索引则创建。基于上面的规则我们可以通过配置不自动创建索引来达到在没有es服务的情况下正常启动服务。 解决办法 在entity类的Docu…

Linux在Ubuntu系统下安装MySQL数据库(全网最详细)

1.在ubuntu下安装MySQL数据库 第一步要先&#xff1a;切换到root用户 以我自己的为例&#xff08;自行输入密码&#xff09; ljwVM-16-16-ubuntu:~$ su - 1.1 查看操作系统版本 rootVM-16-16-ubuntu:~# lsb_release -a 1.2 添加MySQL APT源 1.2.1 访问下载⻚⾯并下载发布包…

vs code 2024编译环境问题记录

之前vs code环境配置了好一会&#xff0c;现在将遇到的问题记录一下&#xff0c;并贴上解决方法。 在这之前&#xff0c;关键的gcc编译器竟然在Python生成exe的过程中不小心下载了Mingw64&#xff0c;然后导致gcc编译器已经安装好在某个目录下了 命令行查看发现&#xff0c;原…

linux网络编程 | c | epoll实现IO多路转接服务器

epoll实现IO多路转接服务器 可通过以下视频学习 06-opell函数实现的多路IO转接_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 文章目录 epoll实现IO多路转接服务器1.思路&功能核心思路 2.代码实现multi_epoll_sever.c运行图 1.思路&功能 **功能&#xff1a;**客…

植物大战僵尸辅助【控制台版本】

前面介绍了使用CE和OD的简单使用&#xff1a;CE和OD介绍和使用CE查找阳光的教学&#xff1a;阳光基地址和偏移地址&#xff0c;下面先使用最简单的控制台程序来实现修改阳光的功能。 项目地址 1.分析程序 我们的控制台程序想要修改植物大战僵尸游戏内的数据&#xff0c;它们…

elasticsearch 使用Painless脚本

文章目录 1. 创建索引2. 插入模拟数据Painless 脚本的基本特点&#xff1a;Painless 脚本的常见用途1. 脚本查询和过滤示例&#xff1a;基于脚本的查询 2. 脚本字段示例&#xff1a;脚本字段 3. 聚合中的脚本示例&#xff1a;脚本聚合 4. 文档更新中的脚本示例&#xff1a;文档…