Kubernetes 集群部署
Kubernetes 集群部署
本章介绍如何部署 Kubernetes 集群,包括在线部署和离线部署两种方案,以及单节点和高可用两种架构。
部署方案概览
根据网络环境和集群规模的不同,Kubernetes 提供了多种部署方案:
部署方式分类
├── 在线部署(有互联网连接)
│ ├── 单节点部署(开发/测试)
│ └── 高可用部署(生产环境)
└── 离线部署(内网隔离)
├── 单节点部署(开发/测试)
└── 高可用部署(生产环境)
一、在线部署 vs 离线部署
在线部署
特点:
- ✅ 部署简单快速
- ✅ 自动下载最新版本
- ✅ 官方文档支持完善
- ❌ 依赖网络连接
- ❌ 国内访问速度较慢
适用场景:
- 有互联网连接的开发环境
- 云平台环境(AWS、Azure、GCP)
- 测试和演示环境
详细教程:
离线部署
特点:
- ✅ 不依赖外网连接
- ✅ 部署速度快(无需下载)
- ✅ 版本可控,稳定性高
- ✅ 符合安全合规要求
- ❌ 准备工作复杂
- ❌ 更新维护相对繁琐
适用场景:
- 内网隔离环境
- 安全要求高的生产环境
- 政企单位、军工、金融行业
- 无法访问互联网的数据中心
详细教程:
二、单节点部署 vs 高可用部署
单节点部署
架构:
┌─────────────────────────────┐
│ Master + Worker │
│ ┌─────────────────────┐ │
│ │ Control Plane │ │
│ │ - API Server │ │
│ │ - etcd │ │
│ │ - Scheduler │ │
│ │ - Controller Mgr │ │
│ └─────────────────────┘ │
│ ┌─────────────────────┐ │
│ │ Worker Components │ │
│ │ - kubelet │ │
│ │ - Pod Runtime │ │
│ └─────────────────────┘ │
└─────────────────────────────┘
特点:
- 💻 最小配置:2 核 CPU + 4GB 内存
- 🚀 快速部署:10-15 分钟完成
- 💰 成本低:单台服务器即可
- ⚠️ 无高可用:节点故障导致服务中断
- 🎯 适合场景:学习、开发、测试
部署步骤:
# 1. 初始化 Master 节点(允许调度 Pod)
kubeadm init --pod-network-cidr=10.244.0.0/16
# 2. 移除 Master 节点的污点,允许调度工作负载
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
# 3. 安装网络插件
kubectl apply -f calico.yaml
# 4. 验证
kubectl get nodes
kubectl get pods --all-namespaces
资源配置建议:
| 用途 | CPU | 内存 | 磁盘 |
|---|---|---|---|
| 学习环境 | 2 核 | 4GB | 20GB |
| 开发环境 | 4 核 | 8GB | 50GB |
| 小型测试 | 8 核 | 16GB | 100GB |
高可用部署(HA)
架构:
┌──────────────┐
│ 负载均衡器 │
│ (HAProxy) │
│ VIP: x.x.x.100
└──────┬───────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ Master 1 │ │ Master 2 │ │ Master 3 │
│ ┌────────┐ │ │ ┌────────┐ │ │ ┌────────┐ │
│ │ API │ │ │ │ API │ │ │ │ API │ │
│ │ etcd │◄├────┤ │ etcd │◄├────┤ │ etcd │ │
│ │ Sched │ │ │ │ Sched │ │ │ │ Sched │ │
│ │ Ctrl │ │ │ │ Ctrl │ │ │ │ Ctrl │ │
│ └────────┘ │ │ └────────┘ │ │ └────────┘ │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└───────────────────┼───────────────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ Worker 1 │ │ Worker 2 │ │ Worker 3 │
│ ┌────────┐ │ │ ┌────────┐ │ │ ┌────────┐ │
│ │ kubelet│ │ │ │ kubelet│ │ │ │ kubelet│ │
│ │ Pods │ │ │ │ Pods │ │ │ │ Pods │ │
│ └────────┘ │ │ └────────┘ │ │ └────────┘ │
└─────────────┘ └─────────────┘ └─────────────┘
特点:
- 🛡️ 高可用:任意节点故障不影响服务
- 📈 可扩展:支持水平扩展
- 🔄 负载均衡:请求分发到多个 Master
- 💾 数据冗余:etcd 集群保证数据安全
- ⚙️ 复杂度高:配置和维护更复杂
- 💰 成本高:至少需要 6 台服务器
部署步骤:
# 1. 初始化第一个 Master
kubeadm init \
--control-plane-endpoint="192.168.1.100:6443" \
--upload-certs \
--pod-network-cidr=10.244.0.0/16
# 2. 加入其他 Master 节点
kubeadm join 192.168.1.100:6443 \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--control-plane \
--certificate-key <cert-key>
# 3. 加入 Worker 节点
kubeadm join 192.168.1.100:6443 \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash>
# 4. 安装网络插件
kubectl apply -f calico.yaml
# 5. 验证集群
kubectl get nodes
kubectl get pods --all-namespaces
资源配置建议:
| 节点类型 | 数量 | CPU | 内存 | 磁盘 |
|---|---|---|---|---|
| Master 节点 | 3 | 4 核 | 8GB | 100GB SSD |
| Worker 节点 | 3+ | 8 核 | 16GB | 200GB SSD |
| 负载均衡器 | 2 | 2 核 | 4GB | 50GB |
高可用关键组件:
负载均衡器(HAProxy + Keepalived)
- 提供 VIP(虚拟 IP)
- 健康检查和故障转移
- 请求分发到多个 Master
etcd 集群(3 或 5 节点)
- 数据一致性(Raft 协议)
- 自动故障恢复
- 建议独立部署
多 Master 节点(3 或 5 节点)
- API Server 负载均衡
- Scheduler 和 Controller Manager 主备切换
- 证书共享
三、部署方案对比
完整对比表
| 对比项 | 在线单节点 | 在线高可用 | 离线单节点 | 离线高可用 |
|---|---|---|---|---|
| 部署难度 | ⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ |
| 部署时间 | 15 分钟 | 1-2 小时 | 30 分钟 | 2-4 小时 |
| 服务器数量 | 1 台 | 6+ 台 | 1 台 | 6+ 台 |
| 最小成本 | ¥500/月 | ¥5000/月 | 一次性 | 一次性 |
| 可用性 | 单点故障 | 99.9%+ | 单点故障 | 99.9%+ |
| 网络依赖 | 需要 | 需要 | 不需要 | 不需要 |
| 维护难度 | ⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ |
| 适用场景 | 学习/开发 | 生产环境 | 内网开发 | 内网生产 |
选择建议
选择决策树:
1. 是否有互联网连接?
├─ 有 → 考虑在线部署
└─ 无 → 必须离线部署
2. 是生产环境吗?
├─ 是 → 推荐高可用部署
└─ 否 → 单节点即可
3. 预算充足吗?
├─ 充足 → 高可用部署
└─ 有限 → 单节点部署
4. 对可用性要求?
├─ 高(99.9%+) → 必须高可用
└─ 一般 → 单节点可接受
推荐配置:
| 场景 | 推荐方案 |
|---|---|
| 🎓 个人学习 | 在线单节点 |
| 💻 团队开发 | 在线单节点(或 Minikube) |
| 🧪 测试环境 | 在线单节点 |
| 🏢 小型生产 | 在线高可用(3 Master + 3 Worker) |
| 🏭 大型生产 | 在线高可用(5 Master + N Worker) |
| 🔒 内网开发 | 离线单节点 |
| 🏛️ 政企生产 | 离线高可用(5 Master + N Worker) |
四、部署前准备
硬件要求
最低配置(学习环境):
- CPU:2 核
- 内存:4GB
- 磁盘:20GB
- 网络:1Gbps
推荐配置(生产环境):
- Master:4 核 / 8GB / 100GB SSD
- Worker:8 核 / 16GB / 200GB SSD
- 网络:10Gbps
软件要求
- 操作系统:Ubuntu 22.04 / CentOS 8+ / RHEL 8+
- 内核版本:>= 4.19
- 容器运行时:containerd 1.7+ / CRI-O 1.30+
- 网络插件:Calico / Flannel / Cilium
网络规划
集群网络规划:
Pod 网络: 10.244.0.0/16
Service 网络: 10.96.0.0/12
节点网络: 192.168.1.0/24
端口规划:
API Server: 6443
etcd: 2379-2380
kubelet: 10250
NodePort: 30000-32767
五、快速开始
在线单节点部署(10 分钟)
# 1. 安装 kubeadm、kubelet、kubectl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
# 2. 初始化集群
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 3. 配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 4. 移除 Master 污点(单节点)
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
# 5. 安装网络插件
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
# 6. 验证
kubectl get nodes
kubectl get pods -A
👉 详细步骤: 在线单节点部署
离线单节点部署(30 分钟)
# 1. 准备离线包(在联网环境)
# 下载二进制、镜像、配置文件并打包
# 2. 传输离线包到目标服务器
scp k8s-offline-v1.30.0.tar.gz root@server:/root/
# 3. 解压并执行部署脚本
tar -xzf k8s-offline-v1.30.0.tar.gz
cd k8s-offline
sudo ./scripts/deploy-offline.sh
# 4. 选择节点角色: master
# 5. 输入 IP 地址
# 6. 等待部署完成
👉 详细步骤: 离线单节点部署
六、下一步
完成集群部署后,建议进行以下操作:
1. 安装必要组件
# Metrics Server(资源监控)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# Ingress Controller(外部访问)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
# Dashboard(图形界面)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
2. 部署第一个应用
# 创建 Deployment
kubectl create deployment nginx --image=nginx --replicas=3
# 暴露服务
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看服务
kubectl get svc nginx
3. 学习后续章节
- 📚 Kubernetes 核心概念
- 🔧 应用部署管理
- 🌐 服务发现
- 📊 监控与日志
七、常见问题
Q1: 单节点集群适合生产环境吗?
A: 不推荐。单节点没有高可用保障,节点故障会导致整个集群不可用。仅适合开发、测试或学习环境。
Q2: 高可用集群至少需要几个节点?
A: 最少需要 6 个节点:
- 3 个 Master 节点(或 5 个更好)
- 3 个 Worker 节点(可按需增加)
Q3: 在线部署和离线部署可以混合使用吗?
A: 可以。例如初始部署使用在线方式,后续升级使用离线包。但建议统一使用一种方式以简化维护。
Q4: 如何从单节点迁移到高可用?
A: 需要重新部署高可用集群,然后迁移应用。无法直接将单节点升级为高可用架构。
Q5: Master 节点数量必须是奇数吗?
A: 强烈建议使用奇数(3、5、7),这是 etcd Raft 协议的最佳实践,能更好地处理脑裂问题。
小结
本章介绍了 Kubernetes 集群部署的方案选择:
✅ 在线 vs 离线:根据网络环境选择
✅ 单节点 vs 高可用:根据场景和预算选择
✅ 部署对比:完整的方案对比和选择建议
✅ 快速开始:10 分钟单节点部署
✅ 详细教程:在线和离线部署完整指南
选择建议:
- 🎓 学习/开发 → 在线单节点
- 🧪 测试环境 → 在线单节点
- 🏢 生产环境 → 在线高可用
- 🔒 内网生产 → 离线高可用
下一步:
- 选择适合的部署方案
- 参考详细教程完成部署
- 学习 Kubernetes 核心概念