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

Kubernetes (K8s) 底层原理

Kubernetes (K8s) 的底层原理涉及多个关键组件和概念,确保容器化应用程序的自动化部署、扩展和管理。以下是 Kubernetes 的底层原理及其关键组件的详细描述。

核心组件

  1. Etcd

    • 功能:分布式键值存储,用于存储集群的所有数据,包括配置、状态等。
    • 作用:提供可靠的数据存储,确保所有组件能够一致地访问集群状态。
  2. Kube-API Server

    • 功能:Kubernetes 控制平面的核心组件,负责处理 RESTful API 请求。
    • 作用:管理和协调所有其他组件的操作,包括 Pod、Service、Namespace 等资源的管理。
  3. Kube-Scheduler

    • 功能:负责根据调度策略将新创建的 Pod 分配到合适的 Node 上。
    • 作用:确保资源的合理分配,满足负载均衡和资源利用率优化。
  4. Kube-Controller Manager

    • 功能:运行集群的控制循环,监控集群状态并确保期望状态与实际状态一致。
    • 作用:包括节点控制器、复制控制器、端点控制器和服务帐户控制器等。
  5. Kubelet

    • 功能:运行在每个 Node 上,负责管理该节点上的容器。
    • 作用:监控 Pod 的状态,确保容器按照 Pod 规范运行。
  6. Kube-Proxy

    • 功能:负责为 Kubernetes 服务提供网络代理功能。
    • 作用:管理网络规则,处理 Pod 间的网络通信和负载均衡。
  7. Container Runtime

    • 功能:在容器中运行应用程序。
    • 作用:支持 Docker、containerd、CRI-O 等容器运行时。

工作流程

  1. API 请求:用户通过 kubectl 或 API 调用与 Kube-API Server 交互,提交资源配置请求(例如创建 Pod)。
  2. 持久化存储:Kube-API Server 将请求数据存储在 Etcd 中。
  3. 调度:Kube-Scheduler 从 Etcd 中读取新创建的 Pod 资源,根据调度策略将其分配到适当的 Node 上。
  4. Pod 创建:Kubelet 接收到调度任务后,通过 Container Runtime 创建并启动容器。
  5. 状态监控:Kube-Controller Manager 不断监控资源状态,确保实际状态与期望状态一致。
  6. 网络代理:Kube-Proxy 管理网络通信,确保 Pod 间和外部访问的网络连接正常。

架构图示

+-------------------------------+
|        Kube-API Server        |
|                               |
|  +-------------------------+  |
|  |         Etcd            |  |
|  +-------------------------+  |
|                               |
+---------------+---------------+|
+---------------v---------------+
|       Kube-Scheduler          |
+---------------+---------------+|
+---------------v---------------+
|   Kube-Controller Manager     |
+---------------+---------------+|
+---------------v---------------+
|        Nodes (Workers)        |
|                               |
|  +-------------------------+  |
|  |         Kubelet         |  |
|  +-------------------------+  |
|                               |
|  +-------------------------+  |
|  |       Kube-Proxy        |  |
|  +-------------------------+  |
|                               |
|  +-------------------------+  |
|  |    Container Runtime    |  |
|  +-------------------------+  |
|                               |
+-------------------------------+

核心概念

  1. Desired State & Actual State:Kubernetes 使用声明式 API,用户定义所需的集群状态(Desired State),Kubernetes 控制平面通过不断对比实际状态(Actual State)和期望状态,确保二者一致。
  2. Controller Loop:控制器不断监控集群状态,自动纠正偏差,确保资源按照定义配置和运行。
  3. Label & Selector:通过标签(Label)和选择器(Selector)实现资源的灵活管理和筛选。
  4. Namespace:用于资源隔离和分组管理,实现多租户支持。
  5. Service Discovery:通过 Service 和 DNS 机制,实现 Pod 之间和外部系统的自动发现和通信。

总结

Kubernetes 通过其分布式架构和自动化控制机制,提供了高度可扩展和可靠的容器编排能力。其底层原理涵盖了从资源调度、状态管理到网络通信的各个方面,确保容器化应用程序的高效运行和管理。

相关文章:

  • 一个强大的分布式锁框架——Lock4j
  • 定位线上同步锁仍然重复扣费的Bug定位及Redis分布式锁解决方案
  • JDK 为什么需要配置环境变量
  • 单片机IO
  • 项目实战--Spring Boot + Minio文件切片上传下载
  • PyTorch(六)优化模型参数
  • 2.2.5 C#中显示控件BDPictureBox 的实现----ROI交互续2
  • Golang中defer和return顺序
  • LabVIEW幅频特性测试系统
  • 前端工程化08-新的包管理工具pnpm
  • python系列30:各种爬虫技术总结
  • MySQL增删改查
  • Java Nio核心概念理解
  • 关于 Mybatis 的开启二级缓存返回对象不一致问题
  • 嵌入式PCB制图面试题及参考答案(2万字长文)
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 03Go 类型总结
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Apache的基本使用
  • co.js - 让异步代码同步化
  • express + mock 让前后台并行开发
  • Flex布局到底解决了什么问题
  • Git 使用集
  • HTTP中GET与POST的区别 99%的错误认识
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js
  • maya建模与骨骼动画快速实现人工鱼
  • mysql 数据库四种事务隔离级别
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Vue2.x学习三:事件处理生命周期钩子
  • 初识 beanstalkd
  • 对象引论
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 聊聊flink的TableFactory
  • 悄悄地说一个bug
  • 一道面试题引发的“血案”
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • #QT(智能家居界面-界面切换)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)fread与fwrite详解
  • (TOJ2804)Even? Odd?
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (转)C#调用WebService 基础
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .net framework4与其client profile版本的区别
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net开发时的诡异问题,button的onclick事件无效
  • .net开发引用程序集提示没有强名称的解决办法