K8s 核心概念与集群结构
Kubernetes 不是"更高级的 Docker"——它是一个集群操作系统,解决的是"如何在多台机器上可靠地运行、扩展和自愈容器"这个问题。在上 K8s 之前,先懂清楚它的结构。
集群结构总览
graph TB
subgraph Control Plane ["Control Plane(管理节点)"]
API["API Server\n所有操作入口"]
ETCD["etcd\n集群状态存储"]
SCHED["Scheduler\n决定 Pod 去哪个节点"]
CM["Controller Manager\n维持期望状态"]
end
subgraph Node1 ["Worker Node 1"]
K1["kubelet\n节点代理"]
KP1["kube-proxy\n网络规则"]
P1["Pod A\n(容器 1+2)"]
P2["Pod B\n(容器 3)"]
end
subgraph Node2 ["Worker Node 2"]
K2["kubelet"]
KP2["kube-proxy"]
P3["Pod C"]
end
API --> ETCD
API --> SCHED
SCHED --> K1
SCHED --> K2
K1 --> P1
K1 --> P2
K2 --> P3
核心对象速查表
| 对象 | 作用 | 常用场景 |
|---|---|---|
| Pod | 最小调度单位,1+ 容器的组 | 不直接创建(用 Deployment 管理) |
| Deployment | 管理 Pod 副本数量与滚动更新 | 无状态应用(Web/API) |
| StatefulSet | 有序部署,稳定的网络标识 | 数据库、消息队列 |
| Service | 为 Pod 组提供稳定的 IP 和 DNS | 内部服务发现 |
| Ingress | HTTP/HTTPS 流量路由(类 Nginx) | 对外暴露服务、域名绑定 |
| ConfigMap | 非敏感配置(环境变量/配置文件) | 应用配置分离 |
| Secret | 加密存储敏感数据 | 密码、API Key、TLS 证书 |
| Namespace | 逻辑隔离多个环境或团队 | production / staging |
| PersistentVolume | 跨 Pod 存活的持久化存储 | 数据库数据目录 |
最小 K8s 环境:选择安装方式
# 选项 A:本地学习 —— kind(K8s in Docker)
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64
chmod +x ./kind && mv ./kind /usr/local/bin/kind
kind create cluster --name dev
# 选项 B:单节点生产替代 —— k3s(轻量 K8s)
curl -sfL https://get.k3s.io | sh -
sudo k3s kubectl get nodes
# 选项 C:托管集群(推荐生产)
# GKE: gcloud container clusters create my-cluster --num-nodes=2 --zone=asia-southeast1-a
# EKS: eksctl create cluster --name my-cluster --region ap-southeast-1 --nodes=2
# AKS: az aks create -g mygroup -n mycluster --node-count 2
K8s vs Docker Compose 决策
| 维度 | Docker Compose | Kubernetes |
|---|---|---|
| 服务数量 | < 10 | 10+ |
| 机器数量 | 1–3 台(单机为主) | 3+ 台多节点 |
| 自动扩容 | ❌ 手动 | ✅ HPA 自动 |
| 自愈(Pod 崩溃重启) | ✅ restart policy | ✅ 更完善 |
| 运维复杂度 | 低 | 高 |
| 推荐场景 | 中小项目、个人/小团队 | 高并发、跨团队平台 |
本节执行清单
- [ ] 用 kind 或 k3s 搭建一个本地单节点集群
- [ ] 运行
kubectl get nodes确认集群就绪 - [ ] 创建一个
testNamespace:kubectl create namespace test - [ ] 了解 Control Plane 和 Worker Node 各自的职责
下一节:kubectl 操作与应用部署