引言
在容器化技术席卷全球的今天,Kubernetes(简称 K8s)已成为容器编排领域的事实标准。无论是互联网企业还是传统行业,都在通过 Kubernetes 实现应用的高效部署、弹性扩展和自动化运维。但对于初学者而言,Kubernetes 的概念繁多、架构复杂,往往让人望而却步。
本文基于 Kubernetes 核心文档,从 “是什么”“为什么” 两个维度,全面解析 Kubernetes 的起源、应用部署演变、核心特性、架构组成及现状挑战。内容涵盖基础概念、技术细节和实践要点,确保零基础读者也能透彻理解。文末将附上常见问题排错、总结与思考,帮你夯实 Kubernetes 的理论基础。
一、基础设施变革:应用部署的三次革命
应用部署方式的演变始终围绕 “资源利用率”“隔离性” 和 “效率” 三大核心诉求。从物理服务器到虚拟化,再到容器,每一次变革都推动着技术架构的升级。
1.1 传统部署时代(物理服务器)
- 是什么:直接在物理服务器上运行应用程序,没有资源隔离机制。
- 核心问题:
- 资源分配不均:多个应用共享一台物理机时,可能出现一个应用占用大量 CPU / 内存,导致其他应用性能骤降(例如:一个视频处理应用占用 90% CPU,导致同服务器的 Web 应用响应超时)。
- 资源浪费:若每个应用单独部署在物理机上,低负载时资源利用率极低(例如:一台 8 核服务器仅运行一个轻量博客应用,资源利用率不足 5%)。
- 维护成本高:大量物理服务器的采购、机房租赁、电力消耗成本高昂,且硬件故障会直接导致应用不可用。
- 本质缺陷:无法为应用定义资源边界,导致 “要么争抢资源,要么闲置浪费”。
1.2 虚拟化部署时代(虚拟机 VM)
- 是什么:通过虚拟化技术(如 Hypervisor)在一台物理服务器上运行多台虚拟机(VM),每个 VM 包含独立的操作系统和应用。
- 进步之处:
- 资源隔离:VM 之间通过虚拟化层隔离,避免应用间资源抢占(例如:VM1 的故障不会直接影响 VM2)。
- 资源利用率提升:物理机资源可按需求分配给多个 VM(例如:一台 16 核服务器可划分 4 个 4 核 VM,资源利用率从 20% 提升至 80%)。
- 可扩展性增强:通过虚拟化平台(如 VMware vCenter)可快速创建 / 删除 VM,适应业务波动(例如:电商促销前快速扩容 10 台 VM)。
- 局限性:
- 资源占用高:每个 VM 需要完整的操作系统副本(如 Windows 镜像约 10GB)和硬件模拟(虚拟 CPU / 内存 / 网卡),通常占用 GB 级资源。
- 启动慢:VM 启动需加载操作系统内核、初始化服务,耗时分钟级(对比容器的秒级启动)。
- 灵活性不足:VM 与底层硬件绑定较深,跨平台迁移困难(例如:从 VMware 迁移到 KVM 需重新配置驱动)。
1.3 容器部署时代(容器 Container)
是什么:容器是轻量级的隔离单元,共享主机操作系统内核,仅包含应用及依赖(如库文件、配置),可理解为 “进程级隔离”。
核心优势:
- 轻量高效:无需完整操作系统,仅包含必要依赖(例如:Nginx 容器约 20MB,远小于 VM 的 10GB),启动速度秒级(从创建到运行仅需 2-3 秒)。
- 资源共享:容器共享主机 OS 内核,减少内存 / 磁盘占用(例如:10 个 Nginx 容器共享同一 Linux 内核,总内存占用仅 500MB)。
- 可移植性强:与底层基础设施解耦,可在 Ubuntu、RHEL、公有云(如 AWS)、本地环境中无缝迁移(“一次打包,到处运行”)。
- 隔离适度:既有独立的文件系统、CPU / 内存配额、进程空间,又不过度隔离(共享内核降低开销)。
容器的核心价值:解决了 “隔离性” 与 “资源效率” 的矛盾,让应用部署从 “整机级” 进化到 “进程级”。
1.4 三者对比总结
维度 | 传统部署 | 虚拟化部署 | 容器部署 |
---|---|---|---|
隔离单元 | 物理机 | 虚拟机(VM) | 容器 |
资源占用 | 极高(整机) | 高(完整 OS) | 低(共享 OS 内核) |
启动速度 | 慢(硬件启动) | 较慢(OS 加载) | 快(秒级) |
可移植性 | 差 | 中(依赖 Hypervisor) | 优(跨云 / OS) |
资源利用率 | 低 | 中 | 高 |
二、集群服务模式:IaaS、PaaS、SaaS
云计算服务模式从底层到上层分为 IaaS、PaaS、SaaS,分别对应基础设施、平台和软件服务,Kubernetes 属于 PaaS 层的核心工具。
2.1 IaaS(基础设施即服务)
- 定义:云服务厂商提供虚拟化的计算、存储、网络资源(如虚拟机、云硬盘、弹性 IP),用户可远程管理这些资源,按需付费。
- 核心价值:用户无需购买物理硬件,通过管理平台(如 OpenStack、AWS 控制台)快速获取资源,专注业务而非基础设施维护。
- 典型场景:
- 企业通过 OpenStack 搭建私有云,管理虚拟机和存储资源。
- 初创公司使用 AWS EC2、阿里云 ECS 等公有云虚拟机部署应用。
- 架构特点:底层为多台物理机,每台物理机通过 Hypervisor 运行多个 VM,VM 中运行应用,多物理机构成 IaaS 集群(如图中 “IaaS” 架构所示)。
2.2 PaaS(平台即服务)
- 定义:在 IaaS 基础上,提供应用开发、部署、运行的完整平台,包含开发工具、运行环境、数据库等服务,用户无需关注底层基础设施。
- 核心价值:简化应用生命周期管理,开发者只需上传代码,平台自动处理部署、扩展、运维(例如:上传 Java 代码后,平台自动配置 JVM、数据库连接)。
- 典型工具:Kubernetes、Docker Swarm、Apache Mesos(均为容器编排平台,属于 PaaS 层核心工具)。
- 架构特点:底层为物理机,物理机上运行容器运行时,应用以容器形式部署,平台统一管理容器生命周期(如图中 “PaaS” 架构所示)。
2.3 SaaS(软件即服务)
- 定义:厂商将软件部署在云端,用户通过互联网直接使用(如网页、APP),无需安装、维护软件及硬件,按订阅付费。
- 核心价值:降低用户使用门槛,厂商负责软件更新、安全维护(例如:企业使用 Office 365,无需关心服务器部署和版本升级)。
- 典型场景:办公软件(Office 365)、客户关系管理(Salesforce)、协作工具(钉钉)。
- 与前两者的关系:IaaS 是底层基础设施,PaaS 是中层开发 / 运行平台,SaaS 是上层直接可用的软件,三者构成云计算的完整栈(如图中 “IaaS/PaaS/SaaS” 对比图所示)。
2.4 三者对比(责任划分)
服务模式 | 用户负责 | 厂商负责 | 核心目标 |
---|---|---|---|
IaaS | 应用部署、运维 | 物理硬件、虚拟化层 | 灵活获取基础设施资源 |
PaaS | 应用代码开发 | 平台、基础设施 | 简化应用生命周期管理 |
SaaS | 仅使用软件 | 全栈服务 | 降低软件使用门槛 |
三、容器编排工具对比:Swarm、Mesos、Kubernetes
当容器数量增长到成百上千时,手动管理容器的启动、停止、扩缩容、故障恢复几乎不可能,因此需要容器编排工具。主流工具包括以下三种:
3.1 Docker Swarm
- 定位:Docker 官方推出的集群管理工具,将多台 Docker 主机抽象为一个整体,通过统一入口管理容器资源。
- 核心特点:
- 兼容 Docker API:使用与单机 Docker 相同的命令(如
docker run
),开发者无需改变工作流(例如:在 Swarm 集群中运行容器与在单机上运行命令一致)。 - 节点标签:可通过键值对标签(label)标记节点(如 “env=prod”“disk=ssd”),运行容器时可按标签过滤节点(例如:指定 “env=prod” 的节点部署生产环境应用)。
- 架构简单:由 Manager 节点(调度、管理)和 Worker 节点(运行容器)组成,适合中小规模集群。
- 兼容 Docker API:使用与单机 Docker 相同的命令(如
3.2 Apache Mesos
- 定位:通用集群管理器,不仅支持容器,还能运行 Hadoop、Spark、MPI 等分布式框架,目标是实现跨框架的资源共享。
- 核心特点:
- 资源共享层:底层提供轻量的资源共享层,使各框架(如 Hadoop、容器)通过统一接口访问集群资源(解决框架间资源隔离问题)。
- 不直接调度:Mesos 负责资源分配(委派授权),具体调度由上层框架(如 Marathon 用于容器调度)完成,适合多框架混合部署场景(例如:同一集群同时运行 Hadoop 和容器)。
3.3 Kubernetes
- 定位:Google 开源的容器编排平台,专为容器化应用设计,通过 “Pod” 和 “标签(Label)” 实现逻辑分组,简化集群管理。
- 与前两者的核心区别:
- 以 Pod 为最小调度单元:Pod 是一组紧密协作的容器集合(共享网络、存储),作为一个整体部署和调度(Swarm 和 Mesos 直接调度单个容器)。
- 更全面的功能:内置服务发现、负载均衡、自动扩缩容、滚动更新等,适合复杂生产环境(例如:支持金丝雀部署、蓝绿部署等高级策略)。
- 生态丰富:拥有庞大的周边工具(如监控 Prometheus、日志 ELK、安全工具 Falco),支持公有云、私有云等多种环境。
3.4 市场占有率对比
根据文档数据,容器编排工具中 Kubernetes 占绝对主导地位:
- Kubernetes:77%
- OpenShift(基于 Kubernetes):9%
- Swarm:5%
- Mesos:4%
- 其他:5%
四、Kubernetes 详解
4.1 什么是 Kubernetes?
- 定义:Kubernetes(简称 K8s,因 “K” 和 “s” 之间有 8 个字母)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展、运维和故障恢复。
- 起源:源于 Google 内部的 Borg 集群管理系统(2003 年开始使用),2014 年开源,后捐赠给 CNCF(云原生计算基金会)。
- 核心目标:提供一个弹性运行分布式系统的框架,帮助用户实现应用的自动扩缩、故障转移、部署模式(如金丝雀部署)等。
4.2 Kubernetes 核心特性
Kubernetes 的特性围绕 “自动化”“可靠性”“可扩展性” 设计,以下是关键特性详解:
1. 自动化上线和回滚
- 作用:分步骤部署应用更改(如代码更新、配置调整),同时监控应用状态;若出现问题,自动回滚到上一版本。
- 示例:部署一个 Nginx 应用更新时,K8s 会先更新 10% 的 Pod,确认无故障后再更新剩余 90%;若发现部分 Pod 健康检查失败,会自动将所有 Pod 回滚到旧版本。
2. 服务发现与负载均衡
- 服务发现:为每个 Pod 分配独立 IP,为一组 Pod 提供统一的 DNS 名称(通过 Service 资源),应用无需硬编码 IP,直接通过 DNS 访问(例如:
nginx-service.default.svc.cluster.local
)。 - 负载均衡:Service 自动在 Pod 之间分发请求,实现流量均衡(例如:3 个 Nginx Pod,Service 会将请求平均分配给它们,避免单 Pod 过载)。
3. 自我修复
- 作用:持续监控容器和节点状态,自动处理故障:
- 容器故障:重启失败的容器(例如:Nginx 进程崩溃后,K8s 会自动重启该容器)。
- 节点故障:将故障节点上的 Pod 自动调度到健康节点(例如:Node1 宕机后,其上的 Pod 会在 Node2、Node3 上重建)。
- 健康检查失败:杀死不满足健康检查的容器,待修复后重新启动(例如:Web 应用 5 次请求无响应,K8s 会杀死该容器并重启)。
4. 存储编排
- 作用:自动挂载用户指定的存储系统,支持本地存储、公有云存储(如 AWS EBS)、网络存储(如 NFS、iSCSI)。
- 优势:应用无需关心存储细节,通过声明式配置即可使用存储(例如:定义 “需要 10GB NFS 存储”,K8s 自动挂载)。
5. Secret 和配置管理
- Secret:用于存储敏感信息(如密码、API 密钥),以加密方式存储,避免明文暴露在配置文件或镜像中(例如:数据库密码通过 Secret 挂载,容器内通过文件或环境变量访问)。
- 配置管理:通过 ConfigMap 存储非敏感配置(如数据库地址、日志级别),可在不重建镜像的情况下更新配置(例如:修改日志级别后,只需更新 ConfigMap,容器会自动加载新配置)。
6. 水平扩缩
- 作用:根据业务需求(手动或自动)调整 Pod 数量:
- 手动:通过命令(如
kubectl scale deployment nginx --replicas=5
)将 Pod 数量从 3 扩到 5。 - 自动:基于 CPU 使用率(如使用率≥80% 时扩容,≤20% 时缩容)。
- 手动:通过命令(如
- 优势:灵活应对流量波动(例如:电商大促时自动扩容到 10 个 Pod,低谷时缩容到 2 个节省资源)。
4.3 Kubernetes 的不足
Kubernetes 虽然强大,但并非 “万能解决方案”,需要明确其边界:
- 不是传统 PaaS:不提供完整的开发工具链(如 IDE)、数据库等服务,仅提供容器编排基础,需结合周边工具构建完整平台。
- 不直接部署源代码:需配合 CI/CD 工具(如 Jenkins、GitLab CI)完成代码构建、镜像打包。
- 不内置日志 / 监控解决方案:仅提供指标收集机制,需集成 Prometheus(监控)、ELK(日志)等工具。
- 不管理机器配置:不负责物理机 / VM 的维护(如操作系统更新、硬件故障修复),需依赖底层 IaaS。
五、Kubernetes 现状与挑战
5.1 集群规模增长
Kubernetes 已成为容器编排的主流,企业部署的集群数量快速增长:
- 2022 年数据:仅 12% 的公司拥有≤5 个集群,29% 的公司拥有≥50 个集群(2020 年这一比例仅 15%)。
- 未来计划:近一半企业预计来年集群数量增长≥50%,显示 K8s 在企业中的渗透持续加深。
5.2 企业使用 Kubernetes 的原因
- 提高应用灵活性(62%):容器化 + K8s 使应用更易迁移、扩展(例如:从私有云迁移到公有云无需修改代码)。
- 提高云利用率(59%):优化资源分配,减少云资源浪费(例如:通过自动装箱将资源利用率从 50% 提升至 80%)。
- 提升开发效率(54%):简化部署流程,缩短开发迭代周期(例如:从代码提交到生产部署时间从天级缩短至小时级)。
5.3 带来的核心优势
- 资源利用率提升(59%):通过自动装箱和混合部署,提高 CPU、内存使用率。
- 简化应用升级和维护(49%):滚动更新、自动回滚减少人工操作(例如:零停机更新应用,无需手动启停服务)。
- 支持云迁移和混合云(42%+40%):轻松实现从本地到公有云,或本地 + 公有云的混合部署(例如:核心业务在本地,弹性部分在公有云)。
5.4 成功案例:Pokémon Go
- 背景:2016 年推出的 AR 游戏,短时间内下载量突破 5 亿,日活用户 2000 万,初期服务器无法承载流量(实际流量是预期的 50 倍)。
- 解决方案:借助 Google Cloud 的 Kubernetes 集群,快速扩展至数万个内核,通过自动扩缩容应对突发流量。
- 核心价值:Kubernetes 的弹性扩缩能力帮助游戏在流量激增时保持服务可用,避免服务器崩溃。
5.5 面临的挑战
- 内部技能缺乏(51%):K8s 概念复杂,现有团队难以快速掌握(例如:运维人员不熟悉 Pod、Service 等核心概念)。
- 招聘困难(37%):具备 K8s 技能的专业人才稀缺,招聘成本高(例如:K8s 工程师薪资比传统运维高 50%)。
- 云原生技术变化快(34%):K8s 及周边工具更新频繁,企业难以跟上节奏(例如:K8s 每年发布多个版本,旧版本兼容性问题需持续跟进)。
六、Kubernetes 架构详解
Kubernetes 集群由控制平面(Control Plane) 和节点(Node) 组成,控制平面负责全局决策,节点负责运行容器化应用。
6.1 控制平面组件(Control Plane)
控制平面是集群的 “大脑”,可部署在单节点(测试环境)或多节点(生产环境,确保高可用),包含以下核心组件:
1. kube-apiserver
- 作用:Kubernetes 的 “统一入口”,所有操作(如创建 Pod、查询服务)都通过 API Server 执行。
- 核心功能:
- 提供 RESTful API:支持 HTTP/HTTPS 请求(如
kubectl
命令最终转化为 API 请求)。 - 认证与授权:验证请求者身份(如通过 Token、证书),检查是否有操作权限(例如:普通用户不能删除集群级资源)。
- 数据验证:确保资源配置符合规范(如 Pod 的 CPU 请求不能为负)。
- 数据存储代理:将集群状态写入 etcd,并从 etcd 读取数据。
- 提供 RESTful API:支持 HTTP/HTTPS 请求(如
2. etcd
- 作用:分布式键值存储,作为 Kubernetes 的 “数据库”,保存集群的所有状态(如 Pod 配置、节点信息)。
- 特点:
- 一致性:采用 Raft 协议,确保多节点部署时数据一致(即使部分节点故障,数据仍可靠)。
- 高可用:通常部署 3/5 节点集群,容忍部分节点故障(例如:3 节点集群可容忍 1 个节点故障)。
3. kube-scheduler
- 作用:负责为 “未指定节点” 的 Pod 选择合适的运行节点。
- 调度决策依据:
- 资源需求:Pod 需要的 CPU、内存是否满足节点剩余资源(例如:Pod 需要 2 核 CPU,调度器会过滤出剩余 CPU≥2 核的节点)。
- 约束条件:如 “Pod 不能部署在某节点”“必须与某 Pod 部署在同一节点”(通过节点亲和性 / 反亲和性配置)。
- 其他因素:数据位置(如 Pod 需靠近存储节点)、硬件约束(如 GPU 节点优先部署 AI 应用)。
4. kube-controller-manager
- 作用:运行一系列控制器进程,确保集群状态与预期一致。
- 核心控制器:
- 节点控制器:监控节点健康,节点故障时标记并处理(例如:节点宕机后,将其标记为 “NotReady”,不再调度新 Pod)。
- 副本控制器:确保 Pod 副本数符合预期(如指定 3 个副本,若 1 个故障则新建 1 个)。
- 服务控制器:管理 Service 与 Pod 的关联,实现服务发现(例如:PodIP 变化时,自动更新 Service 的 Endpoint)。
5. kubectl
- 作用:Kubernetes 的命令行工具,用于向 API Server 发送请求,操作集群(如创建 Pod、查看日志)。
- 常用命令示例:
kubectl get pods
:查看所有 Pod 状态。kubectl create deployment nginx --image=nginx
:创建 Nginx Deployment。kubectl logs <pod-name>
:查看 Pod 日志。
6.2 节点组件(Node)
节点是运行容器的工作机器(物理机或 VM),每个节点包含以下组件:
1. kubelet
- 作用:运行在每个节点上,负责维护容器生命周期(创建、更新、销毁)。
- 工作逻辑:
- 接收 API Server 下发的 Pod 配置(PodSpec)。
- 确保 Pod 中描述的容器正常运行且健康(如执行健康检查:定期发送 HTTP 请求,检查应用是否存活)。
- 仅管理 Kubernetes 创建的容器,忽略其他容器(例如:手动用
docker run
启动的容器不受 kubelet 管理)。
2. kube-proxy
- 作用:节点上的网络代理,实现 Kubernetes Service 的网络功能。
- 核心功能:
- 维护节点网络规则:确保 Pod 可被集群内 / 外网络访问(如将 Service 的 IP: 端口映射到后端 Pod)。
- 负载均衡:在多个 Pod 之间分发请求(基于 iptables 或 IPVS,例如:将 Service 的 80 端口请求转发到 3 个 Nginx Pod 的 80 端口)。
3. 容器运行时(Container Runtime)
- 作用:负责容器的实际运行(创建、启动、停止),是 Kubernetes 与容器的接口。
- 支持的运行时:containerd、CRI-O 等(需符合 Kubernetes 的容器运行时接口 CRI 规范)。
6.3 插件(Addons)
插件通过 Kubernetes 资源(如 DaemonSet、Deployment)实现集群级功能,常见插件包括:
- CoreDNS:提供集群内部 DNS 服务,为 Service 和 Pod 分配域名(如
nginx-service.default.svc.cluster.local
),实现服务发现(Pod 可通过域名访问其他 Service)。 - Ingress Controller:实现 7 层负载均衡(HTTP/HTTPS),支持域名路由、SSL 终止(Service 仅支持 4 层 TCP/UDP 负载均衡,例如:通过 Ingress 将
api.example.com
路由到 API 服务,web.example.com
路由到 Web 服务)。 - 网络插件:实现容器网络接口(CNI),负责 Pod IP 分配和跨节点 Pod 通信(如 Calico、Flannel,解决 Pod 跨节点通信问题)。
6.4 附件(Add-ons)
- Dashboard:Web 界面,用于可视化管理集群(查看 Pod 状态、部署应用等,适合不熟悉命令行的用户)。
- 容器资源监控:如 Prometheus+Grafana,收集容器 / 节点指标(CPU、内存使用率),提供监控面板和告警(例如:CPU 使用率≥90% 时发送告警)。
- 集群日志:如 ELK(Elasticsearch+Logstash+Kibana),集中收集容器日志,支持搜索和分析(例如:查询某 Pod 的错误日志,分析故障原因)。
七、常见问题与排错
7.1 节点未就绪(NotReady)
- 可能原因:
- kubelet 未运行:执行
systemctl status kubelet
检查状态,若未启动则systemctl start kubelet
。 - 网络插件未部署:节点间网络不通,需部署 Calico/Flannel 等网络插件(例如:
kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml
)。 - 资源不足:节点内存 / 磁盘不足,清理资源后重启 kubelet(
systemctl restart kubelet
)。
- kubelet 未运行:执行
- 排查命令:
kubectl describe node <节点名>
查看节点事件,定位错误原因(例如:事件中显示 “NetworkPluginNotReady” 表示网络插件未就绪)。
7.2 Pod 启动失败(Pending/Error)
- 可能原因:
- 资源不足:节点剩余 CPU / 内存不足,无法满足 Pod 需求(查看事件中的 “Insufficient cpu” 提示,需扩容节点或调整 Pod 资源请求)。
- 镜像拉取失败:镜像地址错误或仓库不可访问,执行
kubectl describe pod <pod名>
查看拉取日志(例如:“ErrImagePull” 表示镜像拉取失败,检查镜像名称是否正确)。 - 健康检查失败:容器启动后未通过就绪探针(Readiness Probe),需检查应用启动是否正常(例如:就绪探针配置为访问
/health
接口,若应用未实现该接口会导致启动失败)。
7.3 Service 无法访问 Pod
- 可能原因:
- Pod 未就绪:Service 仅转发请求到 “就绪” 状态的 Pod,需确保 Pod 通过就绪检查(
kubectl get pods <pod名> -o wide
查看 Pod 状态)。 - 网络规则问题:kube-proxy 未正确配置 iptables 规则,可重启 kube-proxy(
systemctl restart kube-proxy
)。 - 标签不匹配:Service 通过标签选择器关联 Pod,若标签错误则无法匹配(检查 Service 的
selector
与 Pod 的labels
是否一致,例如:Service selector 为app=nginx
,Pod 需有app=nginx
标签)。
- Pod 未就绪:Service 仅转发请求到 “就绪” 状态的 Pod,需确保 Pod 通过就绪检查(
八、总结
Kubernetes 是容器编排领域的主流平台,其核心价值在于:通过自动化部署、扩缩容、故障恢复等能力,解决容器化应用的大规模管理问题。
- 是什么:Kubernetes 是开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。
- 为什么需要:传统部署 / 虚拟化存在资源利用率低、部署慢等问题,容器化解决了这些问题,但大规模容器需要 Kubernetes 实现自动化管理。
- 核心优势:提高资源利用率、简化运维、支持云原生架构,帮助企业快速响应业务变化。
从应用部署演变到架构细节,Kubernetes 的知识体系虽然复杂,但掌握后能极大提升系统的可靠性和扩展性。对于初学者,建议从实践入手(如部署一个 Nginx 应用),逐步理解核心概念(Pod、Service、Deployment)。
九、思考与答案
思考 1:容器与虚拟机的核心区别是什么?
- 答案:容器共享主机操作系统内核,仅包含应用及依赖,资源占用低(MB 级)、启动快(秒级);虚拟机包含独立操作系统,资源占用高(GB 级)、启动慢(分钟级)。容器是进程级隔离,虚拟机是系统级隔离。
思考 2:Kubernetes 控制平面的核心组件有哪些?各自的作用是什么?
- 答案:
- kube-apiserver:统一入口,处理所有请求。
- etcd:存储集群状态的数据库。
- kube-scheduler:为 Pod 选择合适的运行节点。
- kube-controller-manager:运行控制器,确保集群状态符合预期。
- kubectl:命令行工具,操作集群。
思考 3:为什么说 Kubernetes 消除了 “编排” 的需要?
- 答案:传统编排是按固定流程(A→B→C)执行任务,而 Kubernetes 通过控制器持续将当前状态推向预期状态,用户只需定义 “想要什么”(如 3 个 Pod 副本),无需关心 “如何做”(如如何创建 / 删除 Pod),因此无需手动编排步骤。
思考 4:企业使用 Kubernetes 时面临的最大挑战是什么?如何应对?
- 答案:最大挑战是技能缺口(内部缺乏经验、难以招聘专业人才)。应对方式:
- 内部培训:通过官方文档、认证课程(如 CKA)提升团队技能。
- 采用托管服务:使用云厂商的托管 Kubernetes(如 AWS EKS、阿里云 ACK),减少底层维护成本。
- 引入简化工具:如 Rancher 提供可视化界面,降低操作复杂度。