Kubernetes(简称 K8s)是当今云原生领域最核心的容器编排平台。自 2014 年由 Google 开源以来,它已经从一个实验性项目成长为事实上的行业标准,被 Netflix、Uber、Spotify 以及无数中小企业广泛采用。无论是运维工程师、DevOps 从业者还是后端开发,掌握 Kubernetes 已经从”加分项”变成了”必备技能”。

在本系列接下来的 30 天里,我们将从零基础开始,循序渐进地带你走完全栈 K8s 运维之路。今天的第一篇,我们要解决的恰恰是最根本的问题——Kubernetes 到底是什么,它的核心架构如何工作,为什么它能成为容器编排的王者。
一、Kubernetes 与容器技术的关系
在深入架构之前,我们需要理清几个容易混淆的概念。容器(Container)是通过操作系统级别的虚拟化技术,将应用及其依赖打包成独立运行单元的技术,最典型的实现是 Docker。而容器编排(Container Orchestration)则是在多台物理机或虚拟机上,对容器的部署、调度、扩缩容、服务发现、负载均衡进行自动化管理。
Kubernetes 正是解决容器编排问题的最成熟工具。想象一下,如果你的应用需要运行在 100 台服务器上,每台服务器部署 50 个容器,当一台服务器宕机时,你需要手动的把上面的容器迁移到其他地方,还要重新配置网络、存储、负载均衡……这几乎是不可能的任务。Kubernetes 自动帮你完成了这一切。
# 一个最简单的 Kubernetes 部署示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
上面的 YAML 告诉 Kubernetes:请帮我运行 3 个 nginx 容器,如果其中任何一个挂了,就自动补一个新的。这就是 K8s 最基础的能力——声明式 API。你只需告诉系统你想要的”期望状态”,Kubernetes 负责将其变为现实。
二、Kubernetes 核心架构总览
Kubernetes 的架构设计遵循”控制平面 + 工作节点”的模式,由控制平面负责集群决策和全局视图,工作节点负责运行实际的应用容器。
2.1 控制平面(Control Plane)
控制平面是集群的”大脑”,包含以下核心组件:
控制平面组件
├── kube-apiserver # API 服务器,所有操作的入口
├── etcd # 分布式键值存储,保存集群所有状态
├── kube-scheduler # 调度器,决定 Pod 分配到哪个节点
├── kube-controller-manager # 控制器管理器,运行各类控制器
└── cloud-controller-manager # 云控制器管理器(可选)
kube-apiserver 是整个集群的网关,所有组件(包括用户使用的 kubectl 命令)都必须通过它进行交互。它暴露 HTTP REST API,验证请求并更新 etcd 中的集群状态。
etcd 是一个高可用的分布式键值数据库,Kubernetes 所有的集群状态——Pod 信息、配置、Secret、网络规则——都存储在 etcd 中。etcd 的可靠性直接决定了整个集群的可靠性,生产环境中通常部署 3 或 5 个 etcd 节点以实现高可用。
kube-scheduler 负责监听新创建的 Pod,根据资源需求、节点状态、亲和性规则等因素,选择最合适的节点来运行 Pod。它不做任何资源预留,只发出调度决策,实际的资源占用由 kubelet 负责。
kube-controller-manager 运行多个控制器进程,包括 Node 控制器(监控节点状态)、ReplicaSet 控制器(确保副本数正确)、Deployment 控制器(管理滚动更新)等。每个控制器本质上是一个”控制循环”——不断比较当前状态与期望状态,并驱动系统向期望状态靠拢。
2.2 工作节点(Worker Node)
工作节点是实际运行应用容器的地方,包含以下组件:
工作节点组件
├── kubelet # 节点代理,管理本节点上的 Pod 生命周期
├── kube-proxy # 网络代理,实现 Service 网络
├── Container Runtime # 容器运行时(containerd / Docker / CRI-O)
└── Pods # 实际运行的应用容器
kubelet 是控制平面在工作节点上的”代理人”。它从 API Server 拉取分配给本节点的 Pod 规格,调用容器运行时创建和管理容器,同时向 API Server 汇报节点状态。kubelet 每秒都在检查容器的健康状态,如果容器退出,会根据重启策略自动重启。
kube-proxy 负责 Service 的网络转发。它为每个 Service 在节点上维护 iptables 或 IPVS 规则,确保发往 Service Cluster IP 的流量被正确转发到后端 Pod。
Container Runtime 是实际创建和运行容器的引擎。早期 K8s 使用 Docker,现在推荐使用 containerd 或 CRI-O,它们更符合 Kubernetes 的 CRI(Container Runtime Interface)标准。
2.3 核心抽象对象
Kubernetes 定义了一套丰富的抽象对象来描述集群状态,其中最基础的包括:
| 对象 | 作用 |
|---|---|
| Pod | 最小调度单位,包含一个或多个紧密耦合的容器 |
| Deployment | 管理无状态应用的副本和滚动更新 |
| Service | 为一组 Pod 提供稳定的网络端点 |
| ConfigMap | 存储非敏感配置数据 |
| Secret | 存储敏感数据(密码、密钥) |
| Namespace | 实现集群内资源隔离 |
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "example-pod",
"namespace": "default"
},
"spec": {
"containers": [
{
"name": "app",
"image": "my-app:latest",
"ports": [{"containerPort": 8080}]
}
]
}
}
三、Kubernetes 与 Docker 的关系
很多人把 Kubernetes 和 Docker 混为一谈,其实它们定位完全不同。Docker 解决了”如何打包和运行一个容器”的问题,Kubernetes 解决的是”如何在大规模分布式环境中管理成千上万个容器”的问题。
# Docker 层面:运行一个容器
docker run -d --name my-nginx -p 80:80 nginx:1.21
# Kubernetes 层面:通过 kubectl 管理 Pod
kubectl create deployment my-nginx --image=nginx:1.21 --replicas=3
kubectl expose deployment my-nginx --port=80 --type=ClusterIP
kubectl scale deployment my-nginx --replicas=10
在 Kubernetes 中,你不再直接操作 Docker 命令,而是通过 kubectl 和声明式 YAML 与集群交互。Kubernetes 通过 CRI 接口支持多种容器运行时,Docker 只是其中之一。
四、为什么选择 Kubernetes
除了功能强大,Kubernetes 还有几个不可替代的优势:
声明式 API 与期望状态驱动:你只需描述”我想要什么”,而不是”怎么做”。这让运维工作从手工脚本变成了声明式配置,更容易版本化、审查和回滚。
成熟的生态系统:CNCF 基金会下围绕 K8s 形成了完整的生态——Helm 负责打包、Prometheus 负责监控、Istio 负责服务网格、ArgoCD 负责 GitOps。你几乎能找到任何场景的成熟工具。
多云与混合云能力:Kubernetes 不绑定任何特定云平台,你可以在 AWS、阿里云、腾讯云、私有机房之间自由切换,实现真正的多云部署。
自动化的运维能力:自动扩缩容(HPA)、自动故障恢复、滚动更新、蓝绿发布等高级特性,让应用的运维可靠性大幅提升。
五、常见问题
Q1:学习 Kubernetes 需要什么前置知识?
建议先掌握 Linux 基本命令、Docker 容器技术、YAML 语法和网络基础知识。理解了这些之后,再学习 K8s 会顺畅很多。
Q2:Kubernetes 适合小型团队吗?
K8s 的复杂度确实偏高,对于只有几台服务器的场景,直接使用 Docker Compose 可能更简单。但当你的应用开始扩展到多台服务器、多个团队时,K8s 的自动化和治理能力会展现出巨大价值。
Q3:K8s 和 Docker Swarm 有什么区别?
Docker Swarm 更简单轻量,但功能也相应较弱。K8s 功能全面,生态成熟,是社区和企业的首选。
六、总结
今天我们完成了 Kubernetes 全景之旅的第一站:理解了容器编排的概念、Kubernetes 的核心架构(控制平面 + 工作节点)、关键组件的职责,以及它与 Docker 的关系。记住一个核心思想——Kubernetes 通过声明式 API 和期望状态驱动,帮你自动化管理分布式容器应用的一切。
在接下来的 29 天里,我们会逐篇深入:从环境搭建开始,到 Pod、Deployment、Service 等核心对象,再到存储、网络、安全、监控、CI/CD、GitOps 等高级主题,最终帮你建立完整的 K8s 运维知识体系。
# 验证你的 K8s 环境是否就绪
kubectl version --short
kubectl cluster-info
kubectl get nodes
下期预告:明天我们将进入实操环节,学习如何使用 minikube 和 kubeadm 快速搭建一套 Kubernetes 集群,从零开始亲手创建一个属于自己的 K8s 环境。


















暂无评论内容