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

Kubernetes(K8S)全面解析:核心概念、架构与实践指南

Kubernetes(K8S)全面解析:核心概念、架构与实践指南

一、Kubernetes(K8S)核心定义与起源

Kubernetes(简称K8S,因“K”与“S”之间有8个字母得名)是目前业界主流的容器编排与自动化运维平台,旨在解决容器化应用的大规模部署、管理与扩展问题。

1.1 核心定位与价值

K8S的核心作用是自动化部署、扩展和管理容器化应用程序,可理解为:

  • 对Docker等容器引擎的“上层管理系统”,负责调度集群中多个容器的运行;
  • 一个生态丰富的“容器集群操作系统”,统一管理集群资源(CPU、内存、存储、网络),确保应用始终运行在用户期望的状态。

1.2 起源与技术背景

  • 原型基础:源于Google内部的Borg系统(大规模容器编排工具,支撑Google搜索、YouTube等核心业务的集群管理);
  • 开源历程:2014年Google用Go语言重写Borg思路的系统并开源,2015年捐赠给CNCF(云原生计算基金会) ,成为CNCF首个毕业项目;
  • 名称含义:词根源于希腊语“舵手、飞行员”,象征其对容器集群的“操控与领航”作用。

1.3 官方资源与版本演进

(1)官方渠道
  • 英文官网:https://kubernetes.io
  • 中文文档:https://kubernetes.io/zh-cn/docs
  • GitHub仓库:https://github.com/kubernetes/kubernetes(核心源码与发行版)
(2)版本更新节奏与关键里程碑

K8S采用一年4个版本的迭代节奏(每季度一个稳定版),以下为影响深远的关键版本:

版本发布时间核心里程碑特性
1.122018年8月引入容器存储接口(CSI)稳定版,标准化存储扩展;支持Windows容器集群
1.152019年11月服务网格接口(SMI)支持;Ingress API进入Beta阶段
1.202020年12月移除对Docker Swarm的支持;CSI迁移加速
1.242022年5月重大转折:正式弃用dockershim(Docker运行时接口),需通过第三方插件(如cri-dockerd)兼容Docker;支持IPv6集群化;令牌重载授权服务稳定
1.282023年8月容器运行时接口(CRI)v1正式稳定;增强StatefulSet弹性伸缩能力
1.302024年4月支持Pod级别的资源配额精细化控制;Ingress Gateway API进入Beta阶段
1.312024年8月增强对ARM架构的优化;存储卷快照(Volume Snapshot)功能全面稳定

二、为什么需要Kubernetes?——解决传统部署与Docker裸跑痛点

K8S的诞生源于传统应用部署与容器裸跑的局限性,其核心目标是让容器化应用的管理“简单、高效、自动化”。

2.1 传统应用部署的痛点

传统后端部署(如直接在服务器上运行二进制包)依赖人工干预,存在明显短板:

  1. 扩容缩容滞后:业务高峰时需人工新增服务器、部署服务、接入负载均衡,响应慢;
  2. 运维成本高:需手动维护守护脚本监控程序状态,故障恢复依赖人工排查;
  3. 环境一致性差:不同服务器的依赖、配置差异易导致“开发环境正常,生产环境报错”;
  4. 资源利用率低:服务器资源无法动态分配,易出现部分节点过载、部分节点空闲的情况。

2.2 Docker裸跑(无编排)的局限性

Docker解决了“环境一致性”问题,但单机运行容器时仍无法支撑大规模场景:

  • 无集群能力:仅能单机管理容器,无法跨机器调度;
  • 无容灾自愈:容器崩溃后需手动重启,节点故障会导致服务中断;
  • 无统一调度:容器数量增多时,手动分配资源(CPU、内存)效率极低;
  • 无网络与存储管理:跨机器容器通信需手动配置网络,存储无法灵活挂载;
  • 无配置与密钥安全:敏感信息(如数据库密码)需嵌入镜像,存在泄露风险。

2.3 Kubernetes的核心解决能力

K8S通过“自动化+集群化”,针对性解决上述问题,核心能力包括:

  • 自动化运维:无需人工干预,实现容器的部署、扩容、缩容、故障恢复;
  • 资源高效利用:动态调度集群资源,避免节点资源浪费;
  • 服务高可用:通过自我修复、负载均衡确保服务不中断;
  • 标准化管理:统一配置、存储、网络接口,降低跨环境适配成本;
  • 生态扩展性:支持对接监控(Prometheus)、日志(ELK)、服务网格(Istio)等工具。

三、Kubernetes集群架构与核心组件

K8S采用Master-Worker Node(主从)架构:Master节点作为“集群大脑”负责调度与管理,Worker Node节点作为“工作节点”负责运行容器。所有组件通过kube-apiserver交互,核心数据存储在etcd中。

3.1 架构整体概览

[Master节点]                [Worker Node节点1]       [Worker Node节点2]
┌─────────────────────┐    ┌─────────────────────┐    ┌─────────────────────┐
│  kube-apiserver     │    │  kubelet            │    │  kubelet            │
│  (请求入口)        │    │  (节点监控与控制)  │    │  (节点监控与控制)  │
├─────────────────────┤    ├─────────────────────┤    ├─────────────────────┤
│  kube-controller-manager │  kube-proxy         │    │  kube-proxy         │
│  (资源控制器)      │    │  (网络代理/负载均衡)│    │  (网络代理/负载均衡)│
├─────────────────────┤    ├─────────────────────┤    ├─────────────────────┤
│  kube-scheduler     │    │  容器引擎          │    │  容器引擎          │
│  (资源调度器)      │    │  (containerd/Docker)│    │  (containerd/Docker)│
├─────────────────────┤    └─────────────────────┘    └─────────────────────┘
│  etcd               │
│  (集群数据存储)    │
└─────────────────────┘

3.2 Master节点组件(集群控制核心)

Master节点是集群的“决策层”,负责接收用户请求、调度资源、监控集群状态,建议独立部署(避免单点故障可部署多Master)。

(1)kube-apiserver:集群请求入口
  • 核心作用:暴露Kubernetes API(RESTful风格),是所有组件(如kube-controller-manager、kube-scheduler、kubelet)的“通信枢纽”;
  • 工作流程
    1. 接收用户请求(如kubectl命令、UI界面操作);
    2. 验证请求合法性(权限、资源是否存在);
    3. 将请求对应的资源变更写入etcd
    4. 通知其他组件执行相应操作(如调度Pod、修复故障容器);
  • 关键特性:仅kube-apiserver拥有etcd的读写权限,其他组件需通过其接口间接操作数据,确保数据一致性。
(2)kube-controller-manager:资源自动化控制器
  • 核心作用:运行一系列“控制器”,监控集群资源状态,确保实际状态与用户期望状态一致(如Pod副本数、节点健康度);
  • 核心控制器分类
控制器名称核心功能
Node Controller(节点控制器)监控节点健康状态,节点故障时标记为“不可用”,并迁移其上的Pod
Replication Controller(副本控制器)确保RC(Replication Controller)关联的Pod副本数始终等于预设值(已被Deployment替代)
Deployment Controller(部署控制器)管理Deployment资源,控制Pod的创建、更新、回滚(如滚动更新、版本回退)
Endpoints Controller(端点控制器)维护Service与Pod的关联关系(Endpoints对象),确保Service能找到后端Pod
Namespace Controller(命名空间控制器)管理Namespace的生命周期(创建、删除、状态维护)
ResourceQuota Controller(资源配额控制器)限制Namespace内的资源使用(如最大Pod数、CPU/内存上限),避免资源滥用
(3)kube-scheduler:Pod调度器
  • 核心作用:为新创建的Pod选择“最合适的Worker Node节点”,确保资源合理分配;
  • 调度流程(两步策略)
    1. 预选策略(Predicate):过滤不符合条件的节点(如节点资源不足、端口冲突、标签不匹配);
      • 例:Pod需2C4G资源,过滤掉剩余内存<4G的节点;
    2. 优选策略(Priority):对预选通过的节点打分(权重基于资源剩余率、负载率、亲和性等),选择得分最高的节点;
      • 例:剩余CPU/内存越多、负载越低的节点,得分越高。

3.3 配置存储中心:etcd

  • 核心定位:分布式键值(Key-Value)存储系统,是K8S集群的“数据库”;
  • 存储内容
    • 集群核心配置(如节点信息、Namespace、资源配额);
    • 用户定义的资源(如Pod、Service、Deployment);
    • 集群状态数据(如Pod运行状态、节点健康状态);
  • 关键特性
    • 强一致性:支持分布式部署,确保多节点数据同步;
    • 高可用:通过多副本(如3/5个节点)避免单点故障;
    • 只读权限控制:仅kube-apiserver可读写,其他组件需通过API间接访问。

3.4 Worker Node节点组件(容器运行层)

Worker Node是集群的“执行层”,负责运行Pod及容器,接收Master节点的调度指令。

(1)kubelet:Node节点的“管家”
  • 核心作用:Master在Node节点上的“代理”,负责管理Pod的生命周期(创建、启动、停止、销毁);
  • 工作流程
    1. 定期向kube-apiserver汇报Node节点的资源状态(CPU、内存、存储)和Pod运行状态;
    2. 接收kube-apiserver下发的“Pod期望状态”(如运行3个Nginx容器);
    3. 调用容器引擎(如containerd)创建/删除容器,确保Pod实际状态与期望一致;
    4. 通过cAdvisor(内置监控工具)收集容器资源使用情况,上报给监控系统;
  • 附加功能:清理节点上的无用镜像和退出容器,避免磁盘/资源占用过高。
(2)kube-proxy:网络代理与负载均衡
  • 核心作用:实现Kubernetes Service的网络功能,包括“服务发现”和“四层负载均衡”;
  • 工作原理
    1. 监听kube-apiserver中Service和Endpoints的变更;
    2. 在Node节点上配置网络规则(如iptables/ipvs),将Service的虚拟IP(Cluster IP)映射到后端Pod的真实IP;
    3. 接收外部请求,通过负载均衡算法(如轮询)转发到后端Pod;
  • 三种流量调度模式对比
模式核心原理性能稳定性适用场景
userspace基于用户态进程转发早期版本,已废弃
iptables基于Linux内核iptables规则转发一般中小型集群,濒临废弃
ipvs基于Linux内核ipvs模块转发大型集群,生产环境推荐
(3)容器引擎:容器运行基础
  • 核心作用:负责容器的创建、启动、停止等底层操作,需兼容K8S的CRI(容器运行时接口);
  • 主流选择
    • containerd:Docker的核心组件,轻量级、性能好,是K8S 1.24+的默认推荐;
    • Docker:需安装cri-dockerd插件(因1.24+弃用dockershim),适合习惯Docker生态的场景;
    • CRI-O:专为K8S设计的轻量级容器引擎,兼容性强,适合极简部署。

四、Kubernetes核心概念——理解资源对象与调度逻辑

K8S通过“资源对象”定义集群中的所有实体(如Pod、Service、Deployment),所有对象均存储在etcd中,K8S通过“监控对象状态差异”实现自动化控制。

4.1 Pod:K8S最小部署单元

  • 定义:Pod是K8S创建和管理的最小单位,代表集群中“一个正在运行的进程”,可包含1个或多个容器;
  • 类比理解:Pod像“豌豆荚”,里面的容器像“豌豆”——多个容器共享Pod的资源,紧密协作。
  • 核心特性
    1. 资源共享:同一Pod内的容器共享网络(可通过localhost通信)、存储(共享Pod挂载的数据卷)和主机名;
    2. 生命周期与Pod一致:Pod内所有容器同时启动、同时停止,一个容器故障会导致整个Pod重启;
    3. 场景化组合
      • 单容器Pod:最常见(如一个Nginx容器);
      • 多容器Pod(SideCar模式):用于“主容器+辅助容器”场景(如主容器运行应用,辅助容器收集日志/监控)。
  • 注意事项:不同Pod的容器无法通过localhost通信,需通过Service实现跨Pod访问。

4.2 Pod控制器:确保Pod按期望运行

Pod控制器是“Pod的管理模板”,定义Pod的运行规则(如副本数、生命周期、更新策略),避免手动创建Pod的繁琐与不可靠。

主流Pod控制器对比
控制器类型核心作用适用场景示例(Nginx部署)
Deployment管理无状态应用,支持滚动更新、版本回滚、弹性伸缩Web服务(Nginx、Tomcat)、API服务等无状态应用kubectl create deployment nginx --image=nginx:1.24
StatefulSet管理有状态应用,确保Pod名称、网络标识、存储持久化(不随Pod重建变化)数据库(MySQL、PostgreSQL)、分布式存储(Etcd)部署MySQL主从集群,需固定Pod名称和存储
DaemonSet确保所有Worker Node节点(或指定节点)运行1个相同的Pod节点监控(Prometheus Node Exporter)、日志收集(Fluentd)在所有节点部署日志代理,收集节点日志
Job执行一次性任务,任务完成后Pod自动退出(成功/失败后停止)数据备份、批量计算(如CSV数据处理)执行一次数据库备份脚本,完成后Pod退出
CronJob基于时间调度的Job(类似Linux Crontab),定期执行任务定时备份(每天凌晨2点备份数据库)、定时报表生成每天凌晨2点执行数据库备份Job

4.3 Label与Label Selector:资源分组与筛选

Label(标签)是K8S中“资源分类的核心工具”,通过键值对(Key-Value)为资源(如Pod、Node、Service)打标签,再通过Label Selector(标签选择器)筛选资源。

(1)Label规则
  • 键(Key):需唯一,格式为[命名空间/]名称(如app=nginxenv=prod);
  • 值(Value):最大63个字符,需以字母/数字开头和结尾,可包含-_.
  • 动态性:资源创建后可随时添加/删除Label,不影响资源运行。
(2)Label Selector:标签匹配方式
匹配类型语法示例含义
等值匹配app=nginx筛选Label为app: nginx的资源
不等值匹配app!=nginx筛选Label为app但值不等于nginx的资源
集合匹配(包含)app in (nginx, tomcat)筛选Label为app: nginxapp: tomcat的资源
集合匹配(不包含)app not in (nginx)筛选Label为app但值不等于nginx的资源
存在匹配app筛选包含app标签的所有资源
(3)应用场景
  • 部署Pod时通过Label分组(如env=prod表示生产环境Pod,env=test表示测试环境Pod);
  • Service通过Label Selector关联后端Pod(如Service的app=nginx关联所有Label为app: nginx的Pod)。

4.4 Service:解决Pod IP动态问题

Pod的生命周期短暂(重建后IP会变化),Service通过“固定虚拟IP”为一组Pod提供统一访问入口,实现“服务发现”和“负载均衡”。

(1)核心作用
  1. 固定访问地址:为一组Pod分配一个固定的虚拟IP(Cluster IP),客户端通过Cluster IP访问服务,无需关心Pod的IP变化;
  2. 四层负载均衡:将请求通过轮询/会话保持等算法转发到后端Pod,实现流量分担;
  3. 跨Node访问:无论Pod运行在哪个Node节点,Service都能通过Cluster IP转发请求。
(2)Service的4种类型
类型核心特点适用场景
Cluster IP仅集群内部可访问的虚拟IP,默认类型集群内部服务间通信(如API服务调用数据库服务)
NodePort在每个Node节点开放一个固定端口,外部通过“Node IP:NodePort”访问测试环境外部访问集群服务
LoadBalancer结合云厂商负载均衡器(如AWS ELB、阿里云SLB),外部通过LB IP访问生产环境外部访问集群服务(需云厂商支持)
ExternalName将Service映射到外部服务域名(如externalName: db.example.com集群内部服务访问外部服务(如外部数据库)

4.5 Ingress:集群外部7层访问入口

Service仅支持“四层(TCP/UDP)负载均衡”,无法基于域名、URL路径转发请求;Ingress作为“集群7层网关”,实现基于HTTP/HTTPS的精细化路由。

(1)核心作用
  1. 域名路由:将不同域名的请求转发到不同Service(如www.abc.com→Nginx Service,api.abc.com→API Service);
  2. 路径路由:将同一域名下不同路径的请求转发到不同Service(如www.abc.com/static→静态资源Service,www.abc.com/api→API Service);
  3. SSL终结:统一管理HTTPS证书,解密HTTPS请求后转发到后端Service(避免每个Service单独配置SSL)。
(2)工作依赖

Ingress本身仅为“路由规则定义”,需部署Ingress Controller(如Nginx Ingress Controller、Traefik)才能实现路由转发——Ingress Controller通过监听Ingress规则,动态配置自身(如Nginx配置文件),接收外部请求并转发。

(3)路由示例
外部请求流程:
http://www.abc.com → Ingress Controller(80端口) → Ingress规则匹配 → Nginx Service → Nginx Pod
http://api.abc.com → Ingress Controller(80端口) → Ingress规则匹配 → API Service → API Pod

4.6 Namespace:资源逻辑隔离

Namespace(命名空间)是K8S中“资源隔离的工具”,将集群划分为多个“虚拟子集群”,实现不同环境(如开发、测试、生产)的资源隔离。

(1)核心特性
  1. 名称隔离:不同Namespace内的资源名称可重复(如生产环境和测试环境均可有nginx Deployment);
  2. 资源配额隔离:可为每个Namespace设置资源上限(如生产环境Namespace最多使用100C CPU,测试环境最多使用20C CPU);
  3. 权限隔离:可通过RBAC(基于角色的访问控制)为不同Namespace分配不同权限(如开发人员仅能操作测试Namespace)。
(2)K8S默认Namespace
  • default:默认Namespace,未指定Namespace的资源会创建在此;
  • kube-system:K8S系统组件(如kube-apiserver、etcd)所在的Namespace;
  • kube-public:公共Namespace,所有用户均可访问(通常用于存储公共配置)。

五、Kubernetes常见部署方式对比

K8S的部署方式需根据场景(学习、测试、生产)选择,不同方式的复杂度、可控性差异较大。

部署方式核心原理复杂度可控性适用场景部署文档地址
Minikube单节点微型K8S,基于虚拟机(如VirtualBox、Docker)运行极低学习K8S基础特性、本地测试https://kubernetes.io/docs/setup/minikube
Kubeadm自动化部署工具,通过kubeadm init(初始化Master)和kubeadm join(加入Node)快速搭建集群测试环境、中小型生产集群https://kubernetes.io/docs/reference/setup-tools/kubeadm
二进制部署从官网下载K8S组件二进制包(如kube-apiserver、kubelet),手动部署每个组件、配置TLS证书大型生产集群、需要深度定制https://github.com/kubernetes/kubernetes/releases

部署方式选择建议

  • 学习/本地测试:优先Minikube,部署简单,一键启动单节点集群;
  • 快速验证/中小型生产:选择Kubeadm,降低部署门槛,适合资源有限的场景;
  • 大型生产/企业级集群:必须二进制部署——虽然手动配置繁琐,但可深度定制组件参数、TLS证书、高可用策略,后期排障更高效。

六、Kubernetes核心价值总结

K8S通过“自动化、集群化、标准化”,成为容器时代的核心运维平台,其核心价值可概括为7点:

  1. 弹性伸缩:基于CPU/内存使用率自动扩容/缩容,高峰保障可用性,低峰节省资源;
  2. 自我修复:Pod崩溃自动重启、节点故障自动迁移,确保服务不中断;
  3. 服务发现与负载均衡:通过Service/Ingress实现统一访问入口,自动分发流量;
  4. 自动发布与回滚:支持滚动更新(避免服务中断),更新失败可一键回滚;
  5. 配置与密钥管理:集中存储配置文件和敏感信息(如密码、证书),避免嵌入镜像;
  6. 存储编排:支持NFS、Ceph、云存储等多种存储类型,灵活挂载到Pod;
  7. 生态扩展性:对接监控、日志、服务网格等工具,构建完整的云原生运维体系。

K8S不仅是“容器编排工具”,更是云原生应用的“操作系统”,是企业实现数字化转型、云原生架构落地的核心基础设施。

http://www.dtcms.com/a/464946.html

相关文章:

  • 软件测试分类指南(上):从目标、执行到方法,系统拆解测试核心维度
  • 李宏毅机器学习笔记18
  • 深圳做网站优化工资多少长沙官网seo分析
  • 深入理解SELinux:从核心概念到实战应用
  • W5500接收丢数据
  • 【深度学习新浪潮】大模型推理实战:模型切分核心技术(下)—— 流水线并行+混合并行+工程指南
  • 烟台建站价格推荐门户网站建设公司
  • Node.js/Python 实战:编写一个淘宝商品数据采集器​
  • 网站html模板贵州网站开发流程
  • 【分布式训练】分布式训练中的资源管理分类
  • 重生归来,我要成功 Python 高手--day24 Pandas介绍,属性,方法,数据类型,基本数据操作,排序,算术和逻辑运算,自定义运算
  • 如何在关闭浏览器标签前,可靠地发送 HTTP 请求?
  • http cookie 与 session
  • Asp.net core appsettings.json` 和 `appsettings.Development.json`文件区别
  • ICRA-2025 | 机器人具身探索导航新策略!CTSAC:基于课程学习Transformer SAC算法的目标导向机器人探索
  • ManipulationNet:开启真实世界机器人操作基准测试新时代
  • 物流公司网站模版网页设计与制作做网站
  • 北京网站 百度快照单位如何建设网站
  • 英语文章工具: 提取、过滤文章单词在线工具
  • 良策金宝AI:为光伏工程师打造专属“智能外脑”
  • 《C++ STL list 完全指南:从基础操作到特性对比,解锁链表容器高效用法》
  • 刀客doc:亚马逊广告再下一城,拿下微软DSP广告业务
  • Agent 开发设计模式(Agentic Design Patterns )第 3 章:并行化模式
  • 配电系统接地 | TT, TN-C, TNC-S,TN-S, IT
  • Qemu-NUC980(七):Timer定时器
  • 20251009
  • CanFestival 主站-NMT初始化
  • Transformer基础之注意力机制
  • 模板式网站价格网页设置快捷键
  • 重要通知:spring-ai-hunyuan 已兼容 Spring AI 稳定版!