Kubernetes集群搭建全面准备指南
搭建生产级Kubernetes集群需要从硬件、软件、网络、安全等多方面进行周密准备。以下是详细的准备工作清单和实施方案:
一、基础设施准备
1. 硬件资源配置
控制平面节点(Master)
| 组件 | 最低配置 | 生产推荐配置 |
|---|---|---|
| API Server | 2核CPU, 4GB内存 | 4核CPU, 16GB内存 |
| Scheduler | 1核CPU, 2GB内存 | 2核CPU, 8GB内存 |
| Controller | 1核CPU, 2GB内存 | 2核CPU, 8GB内存 |
| etcd | 2核CPU, 8GB内存, SSD | 4核CPU, 16GB内存, NVMe SSD |
工作节点(Worker)
| 工作负载类型 | 配置示例 | 适用场景 |
|---|---|---|
| 常规应用 | 4核CPU, 8GB内存 | Web服务、微服务 |
| 计算密集型 | 16核CPU, 32GB内存 | 大数据处理、AI推理 |
| 内存密集型 | 8核CPU, 64GB内存 | 缓存服务、数据库 |
| GPU加速 | 8核CPU+1张T4 GPU | 深度学习训练 |
2. 操作系统要求
bash
# 各Linux发行版推荐版本
cat /etc/os-release # 验证系统信息
# 内核参数优化
cat > /etc/sysctl.d/k8s.conf <<EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
kernel.panic = 10
EOF
sysctl -p /etc/sysctl.d/k8s.conf二、网络规划
1. IP地址分配
| 网络段 | 用途 | 示例范围 |
|---|---|---|
| 节点网络 | 服务器物理IP | 192.168.1.0/24 |
| Pod网络 | 容器间通信 | 10.244.0.0/16 |
| Service网络 | 集群内服务发现 | 10.96.0.0/12 |
| Ingress网络 | 外部访问入口 | 预留公网IP |
2. CNI插件选型
mermaid
graph TD
A[CNI选择] --> B{网络性能要求}
B -->|高吞吐低延迟| C[Calico]
B -->|高级策略| D[Cilium]
B -->|云厂商集成| E[AWS VPC CNI/Azure CNI]三、存储方案准备
1. 存储类型规划
bash
# 创建StorageClass示例
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-ssd
replication-type: regional-pd2. 数据持久化策略
| 数据类型 | 存储方案 | 备份策略 |
|---|---|---|
| 数据库 | 本地SSD+同步复制 | 每日全量+binlog |
| 日志文件 | 分布式存储(如Ceph) | 保留30天循环覆盖 |
| 配置文件 | Git仓库+ConfigMap | Git版本控制 |
四、安全配置
1. 证书管理
bash
# 使用cfssl生成CA证书
cfssl genkey -initca ca-csr.json | cfssl-json -bare ca
# kubeadm证书配置
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
certificatesDir: /etc/kubernetes/pki
clusterName: my-cluster
controlPlaneEndpoint: "k8s-api.example.com:6443"2. 访问控制矩阵
| 角色 | 权限范围 | 对应RBAC配置 |
|---|---|---|
| 集群管理员 | cluster-admin | ClusterRole绑定 |
| 命名空间管理员 | admin | RoleBinding |
| 开发人员 | edit | 项目级RoleBinding |
| 只读用户 | view | 跨命名空间绑定 |
五、部署工具选择
1. 主流部署方案对比
| 工具 | 优点 | 适用场景 |
|---|---|---|
| kubeadm | 官方推荐, 灵活 | 自定义集群部署 |
| kubespray | Ansible驱动, 成熟 | 大规模基础设施 |
| RKE | 简单易用, 支持离线 | 混合云环境 |
| 云托管服务 | 免运维, 弹性 | 快速上云需求 |
2. 使用kubeadm部署示例
bash
# Master节点初始化
kubeadm init \
--control-plane-endpoint "k8s-api.example.com:6443" \
--upload-certs \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
# Worker节点加入
kubeadm join k8s-api.example.com:6443 \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash>六、必备组件清单
1. 核心插件
mermaid
graph LR
A[核心组件] --> B[网络插件]
A --> C[DNS服务]
A --> D[Metrics Server]
A --> E[Ingress控制器]2. 运维工具栈
| 类别 | 推荐方案 | 功能描述 |
|---|---|---|
| 监控 | Prometheus+Alertmanager | 指标收集与告警 |
| 日志 | Loki+Fluentd | 集中日志管理 |
| 可视化 | Grafana+Kubernetes Dashboard | 集群状态展示 |
| 备份 | Velero | 集群状态备份 |
七、预检与验证
1. 系统检查清单
bash
# 验证节点资源
free -h
lscpu
df -h
# 检查网络连通性
ping <其他节点IP>
telnet <API Server IP> 6443
# 内核模块检查
lsmod | grep br_netfilter2. 集群健康检查
bash
kubectl get componentstatus
kubectl get nodes -o wide
kubectl get pods -n kube-system八、后续优化方向
1. 性能调优参数
yaml
# kubelet配置示例
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cpuManagerPolicy: "static"
reservedSystemCPUs: "0-3"
kubeReserved:
cpu: "500m"
memory: "1Gi"2. 自动化运维策略
| 场景 | 实现方案 | 工具链 |
|---|---|---|
| 自动扩缩容 | HPA+Cluster Autoscaler | metrics-server |
| 金丝雀发布 | Istio+Flagger | GitOps流水线 |
| 配置管理 | ArgoCD+ConfigMap | Kustomize/Helm |
搭建生产级Kubernetes集群需要根据业务需求灵活调整配置,建议先在小规模环境验证后再逐步扩大部署。对于关键业务系统,建议采用多可用区部署架构确保高可用性。