Kubernetes简介

K8S概念和特性

部署发展历程

我们的项目部署也在经历下面的这样一个历程

传统部署 -> 虚拟化部署时代 -> 容器部署时代

image-20201122104102715

  • 物理机部署时代:在早期架构中,应用直接运行在物理服务器上,每台机器通常只承载一个核心业务以避免冲突。这种方式虽然性能最好,但资源利用率极低,且缺乏隔离机制,应用之间容易相互影响,扩容只能依赖增加物理设备,成本高且不具备弹性
  • 虚拟机部署时代:为了解决资源利用率和隔离问题,引入了虚拟化技术,通过 Hypervisor 在一台物理机上运行多个虚拟机,每个虚拟机拥有独立的操作系统,实现了较强的隔离性和更高的资源利用率。但虚拟机本身较为笨重,启动慢、资源开销大,仍然存在一定程度的资源浪费。
  • 容器部署时代:容器通过共享宿主机内核,利用 Namespace 和 Cgroups 实现进程级的隔离与资源控制,相比虚拟机更加轻量,启动速度快、部署效率高,并具备良好的可移植性。但当容器规模扩大后,管理、调度、网络和故障恢复等问题变得复杂,因此需要 Kubernetes 这样的编排系统来进行统一管理。
1
2
3
4
5
6
传统物理机部署存在资源利用率低和无法隔离的问题
→ 引入虚拟化,提高资源利用率并实现隔离
→ 但虚拟机过重,启动慢、资源浪费
→ 引入容器,基于内核实现轻量级隔离
→ 但容器数量增加后,管理复杂度爆炸
→ Kubernetes 诞生,用于容器编排和自动化管理

容器的优势,本质可以收敛为4类:

  • 标准化交付(最核心):容器将应用及其依赖打包成镜像,实现“一次构建,到处运行”,保证开发、测试、生产环境一致。
  • 轻量高效:容器共享宿主机内核,无需完整操作系统,资源开销小,启动速度快,可以实现高密度部署。
  • 易于自动化(DevOps核心):容器镜像具有不可变性,支持版本化管理,可以方便地进行持续集成、持续部署和快速回滚。
  • 架构演进支撑(微服务):容器为微服务架构提供了良好的运行和交付基础,使应用可以拆分为多个独立服务并灵活部署。
1
2
3
4
5
容器之所以流行,主要得益于以下几个方面:
首先,容器通过镜像实现应用及其依赖的标准化封装,保证了环境一致性和跨平台可移植性;
其次,容器基于共享内核实现轻量化运行,启动速度快、资源利用率高;
同时,容器镜像具有不可变性,天然支持 CI/CD 流程,便于持续交付和快速回滚;
最后,容器为微服务架构提供了良好的支撑,使应用可以以更灵活的方式进行拆分和部署。

K8S概述

Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化管理多主机上的容器化应用。 它通过声明式的方式,对应用的部署、扩缩容、更新和故障恢复进行统一管理,使容器集群的运维自动化。

相比传统基于脚本或虚拟机的部署方式,Kubernetes 将应用运行环境与底层基础设施解耦,通过容器实现轻量化和可移植性,同时通过编排能力解决容器规模化后的调度、网络和管理问题。

在 Kubernetes 中,多个容器会被组织成一个最小调度单位(Pod),以更好地进行管理和服务发现。

Kubernetes 的核心能力包括自动部署、自动扩缩容、自愈能力、服务发现与负载均衡,以及滚动更新与回滚。

K8S功能

① 调度能力(Scheduling)

自动将 Pod 分配到合适的节点运行


② 自愈能力(Self-healing)

自动修复异常状态,使系统始终接近期望状态


③ 自动扩缩容(Scaling)

根据负载动态调整 Pod 数量(HPA)


④ 服务发现与负载均衡

通过 Service 和 Ingress 实现访问和流量分发


⑤ 应用发布能力

支持滚动更新、灰度发布、版本回滚


⑥ 配置与存储管理

提供 ConfigMap、Secret、PV/PVC 管理配置和数据

1
2
3
4
5
6
7
Kubernetes 提供了一系列核心能力,用于实现容器化应用的自动化运维。
首先,Kubernetes 具备调度能力,可以根据资源情况自动将 Pod 分配到合适的节点运行;
其次,通过自愈机制,系统可以自动恢复异常状态,例如 Pod 重建、节点故障迁移等;
同时,Kubernetes 支持基于负载的自动扩缩容,实现资源的动态调整;
在网络方面,通过 Service 和 Ingress 提供服务发现和负载均衡能力;
在应用发布方面,支持滚动更新和版本回退,保证业务无中断升级;
此外,Kubernetes 还提供配置管理(ConfigMap、Secret)和存储编排(PV/PVC),满足有状态应用的需求。

K8S架构组件

完整架构图

image-20200928103059652

image-20200928110124821

Kubernetes 架构组成

Kubernetes 集群由控制平面(Control Plane)和工作节点(Node)组成。

控制平面(Control Plane)/master节点架构图

image-20201122113057343

Node节点架构图

202507291519748

k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;

  • 控制平面(Control Plane)

    负责整个集群的管理和调度,是集群的大脑。

    • API Server 集群的统一入口,所有组件都通过它进行通信,负责请求处理、认证授权以及数据存储交互。
    • etcd 分布式键值存储,用于保存集群的所有状态数据,是集群的“数据库”。
    • Scheduler 负责 Pod 的调度,根据资源情况和调度策略选择合适的 Node。
    • Controller Manager 通过控制循环(Control Loop)不断将当前状态调整为期望状态,例如副本数控制、节点故障处理等。
  • 工作节点(Node)

    负责运行实际的应用容器。

    • kubelet 运行在每个节点上的代理,负责与 API Server 通信,并管理本节点上的 Pod 生命周期。
    • kube-proxy 负责网络转发,实现 Service 的负载均衡(基于 iptables 或 IPVS)。
    • Container Runtime 容器运行时(如 containerd),负责容器的创建和运行。

    可选组件

    • Fluentd / 日志系统 用于日志采集与集中管理(非核心组件)

c99d50b6-2b08-44db-bd29-197da8f70f3f

K8S核心概念

Kubernetes 通过一系列核心对象来管理容器化应用,这些对象可以分为运行、控制、访问和管理几个层面。

Pod(最小运行单元)

  • Kubernetes 中最小的调度单位
  • 由一个或多个容器组成
  • 共享网络和存储
  • 本身是短暂的,但在 Controller 管理下可自动恢复

Volume(存储)

  • 为 Pod 提供数据持久化能力
  • 可以挂载到多个容器
  • 支持本地、网络和云存储

Controller(控制器)

  • 用于维持资源的期望状态(Control Loop)

    常见类型:

    • Deployment(无状态应用)
    • StatefulSet(有状态应用)
    • DaemonSet(每节点一个)
    • Job / CronJob(任务)

Deployment(最常用控制器)

  • 管理 Pod 副本数量
  • 支持滚动更新和版本回滚
  • 通过 ReplicaSet 间接管理 Pod

Service(服务)

  • 通过 Label 选择一组 Pod
  • 提供稳定访问地址
  • 实现服务发现和负载均衡

Label(标签)

  • 用于标识资源对象
  • 是 Kubernetes 进行调度、选择和管理的核心机制

Namespace(命名空间)

  • 提供集群内的逻辑隔离
  • 支持资源配额与访问控制

API(接口)

  • Kubernetes 是一个 API 驱动系统
  • 所有操作都通过 API Server 完成

Pod 为什么存在?为什么不是直接用容器?

Kubernetes 不直接调度容器,而是通过 Pod 作为最小调度单位,将一组强相关的容器封装在一起,使它们共享网络、存储和生命周期,从而解决多容器协同运行的问题。