Kubernetes 技术介绍
什么是 Kubernetes?
Kubernetes(常简称为 K8s)是一个用于自动部署、扩展和管理“容器化应用程序”的开源平台。

您可以将它想象成“容器操作系统的内核”,它负责调度、运行和维护一堆容器,就像您的电脑操作系统负责调度和管理 CPU、内存、进程一样。
-
为什么需要它? 当您只有几个容器时,手动管理还可行,但当容器数量达到几十、几百甚至上千时,手动操作(如启动、停止、更新、发现故障)将变得极其困难和不可靠,Kubernetes 就是为了解决这个大规模容器管理难题而生的。
-
核心目标:
- 服务自愈: 如果一个容器或节点挂了,Kubernetes 能自动重启或替换它。
- 弹性伸缩: 您可以根据负载情况,自动增加或减少容器的数量。
- 服务发现与负载均衡: 自动为容器分配 IP 和 DNS 名,并实现负载均衡,让用户请求可以平滑地分发到多个容器上。
- 自动化发布与回滚: 您可以轻松地更新应用版本,如果新版本有问题,可以一键回滚到旧版本。
- 配置与密钥管理: 管理应用的配置信息和敏感数据(如密码、API Key),而无需将它们硬编码在镜像中。
核心概念与架构
理解 Kubernetes 的关键在于理解它的核心组件和抽象概念,我们可以从它的控制平面和工作节点两部分来理解其架构。

1 控制平面
控制平面是 Kubernetes 的大脑,负责做出集群决策,例如调度应用、维护应用状态、伸缩等。
kube-apiserver(API 服务器): 所有组件的统一入口,它暴露了 Kubernetes 的 API,并负责处理所有 REST 请求,您可以通过kubectl命令行工具或直接发送 HTTP 请求与之交互。etcd(键值存储): Kubernetes 的“数据库”,它是一个高可用的键值存储系统,用于持久化存储集群的所有数据,包括节点信息、Pod 状态、配置等。etcd的数据一致性和可靠性是整个集群稳定运行的基石。kube-scheduler(调度器): 负责为新创建的 Pod(见下文)选择一个合适的工作节点来运行,它会考虑多种因素,如节点的资源是否充足、是否有特定的硬件/软件要求、亲和性/反亲和性规则等。kube-controller-manager(控制器管理器): 运行“控制器”的进程,控制器是集群中“期望状态”与“实际状态”的协调者,如果期望有 3 个副本的 Pod,但其中一个挂了,控制器就会负责创建一个新的 Pod 来弥补这个差距,常见的控制器有 Node Controller、Replication Controller 等。
2 工作节点
工作节点是真正运行您应用程序容器的地方。
kubelet(节点代理): 每个节点上运行的代理,它负责与 API 服务器通信,确保节点上的 Pod(容器)都处于运行状态,它也负责管理容器的生命周期,包括启动、停止、监控等。kube-proxy(网络代理): 负责维护节点上的网络规则,实现 Kubernetes 的服务抽象,它允许集群内的网络通信,并负责实现负载均衡,当有新的 Service 创建时,kube-proxy会在节点上设置规则(如 iptables 或 IPVS)将流量转发到正确的后端 Pod。- 容器运行时: 负责实际运行容器的软件,最常见的是 Docker,但 Kubernetes 也支持其他容器运行时,如 containerd, CRI-O 等。
3 核心抽象对象
您在 Kubernetes 中操作的主要是这些 API 对象,它们定义了您集群的“期望状态”。
- Pod (波德): Kubernetes 中最小的可部署单元,一个 Pod 包含一个或多个紧密相关的容器,这些容器共享网络命名空间(IP 地址和端口)和存储卷,Pod 通常是短暂的,生命周期很短,被设计为可以被轻易地创建和销毁。
- Deployment (部署): 这是您最常用来管理无状态应用的对象,它描述了应用的期望状态,比如应该运行多少个 Pod 副本、使用哪个 Docker 镜像等,Deployment 控制器会确保实际状态始终与期望状态一致,它还支持滚动更新和回滚。
- Service (服务): 为一组功能相同的 Pod 提供一个统一的网络入口,Service 为这组 Pod 提供了一个稳定的虚拟 IP(ClusterIP)和 DNS 名称,无论后端的 Pod 如何变化(比如被重新调度、IP 地址改变),Service 的入口保持不变,实现了服务发现和负载均衡。
- Namespace (命名空间): 用于在单个集群内隔离不同的资源,您可以将命名空间视为一个虚拟的子集群,常用于隔离开发、测试、生产等不同环境的资源。
- Volume (存储卷): 为 Pod 提供持久化存储,Pod 本身是短暂的,但数据需要持久化,Volume 允许您将存储挂载到 Pod 中的容器,即使 Pod 被销毁,Volume 中的数据也可以保留。
- ConfigMap & Secret (配置映射与密钥): 用于将配置和敏感数据与容器镜像解耦,ConfigMap 用于存储非敏感的配置(如环境变量、配置文件),Secret 用于存储敏感数据(如密码、Token)。
关键特性与优势
-
服务自愈:
- 健康检查:
liveness探针(存活探针)和readiness探针(就绪探针)可以检测容器是否存活或准备好接收流量。 - 自动重启:
liveness探针失败,kubelet会重启容器。 - 自动替换: 如果一个节点本身挂了,控制器会在其他健康的节点上创建新的 Pod 来替代它。
- 自动扩缩容: 可以根据 CPU 使用率等指标自动增减 Pod 数量。
- 健康检查:
-
服务发现与负载均衡:
- 无需手动配置,Kubernetes 会为每个 Service 分配一个 DNS 名称和集群 IP,Pod 只需向这个 Service 名称发送请求,
kube-proxy就会自动将请求负载均衡到后端的健康 Pod 上。
- 无需手动配置,Kubernetes 会为每个 Service 分配一个 DNS 名称和集群 IP,Pod 只需向这个 Service 名称发送请求,
-
存储编排:
Kubernetes 支持多种存储后端(如本地存储、公有云存储、网络存储 NFS、Ceph 等),您可以像挂载一个普通目录一样,将持久化存储挂载到 Pod 中。
-
自动化发布与回滚:
Deployment 支持滚动更新,可以逐步用新版本的 Pod 替换旧版本,实现零停机发布,如果新版本出现问题,可以一键回滚到之前的稳定版本。
-
批量执行:
- 使用
Job和CronJob对象,可以一次性运行任务(如数据处理、报表生成)或定时任务。
- 使用
-
密钥与配置管理:
将配置和敏感信息与容器镜像分离,使得应用配置更加灵活和安全。
典型工作流程
- 用户提交请求: 用户通过
kubectl命令行工具向kube-apiserver发送一个请求,例如创建一个 Deployment。 - API 服务器处理:
apiserver验证请求并将其写入etcd数据库。 - 控制器响应:
Deployment控制器通过apiserver监听到 Deployment 被创建,它会读取etcd中的期望状态。 - 创建 ReplicaSet: Deployment 控制器会创建一个对应的
ReplicaSet对象,并指定副本数量(3)。 - ReplicaSet 控制器响应:
ReplicaSet控制器启动工作,发现当前有 0 个符合要求的 Pod。 - 调度 Pod:
ReplicaSet控制器创建 3 个 Pod 对象。kube-scheduler监听到这些待调度的 Pod,并为它们选择合适的工作节点。 - 节点执行: 目标节点上的
kubelet接收到指令,使用容器运行时(如 Docker)来拉取镜像并启动容器。 - 状态更新:
kubelet将 Pod 的运行状态(如Running)报告给apiserver,apiserver再更新到etcd。 - 服务暴露: 用户创建一个 Service,并将其指向这些 Pod 的标签。
kube-proxy在节点上设置规则,将流量转发到这些 Pod。
应用场景
- 微服务架构: Kubernetes 是部署和管理微服务的理想平台,因为它可以轻松地为每个微服务创建独立的部署、服务和扩缩容策略。
- 持续集成与持续部署: Kubernetes 提供了强大的自动化能力,可以与 CI/CD 工具(如 Jenkins, GitLab CI, Argo CD)无缝集成,实现应用的快速、可靠交付。
- 混合云与多云: Kubernetes 提供了统一的 API 和抽象,使得应用可以在本地数据中心、公有云(AWS, Azure, GCP)或任何支持 Kubernetes 的环境中以相同的方式运行,增强了业务的灵活性和可移植性。
- 批处理与大数据: 通过
Job和CronJob,可以高效地运行计算密集型任务、数据处理管道等。 - 边缘计算: Kubernetes 也可以被轻量化,用于在边缘节点上运行和管理应用,满足低延迟和高带宽的需求。
Kubernetes 已经成为现代云原生应用的事实标准,它不仅仅是一个工具,更是一套强大的理念和生态系统,通过自动化、声明式配置和丰富的生态系统(如 Helm 包管理、Istio 服务网格、Prometheus 监控等),Kubernetes 极大地简化了复杂应用的运维,让开发者能够更专注于业务逻辑本身,从而加速创新和交付。
对于任何希望构建可扩展、高可用、易于维护的现代应用的组织来说,学习和掌握 Kubernetes 都是一项至关重要的投资。
