一、环境准备与前置条件
1.1 系统环境要求
推荐使用CentOS 7.9或CentOS 8.x最新版本作为基础系统,需满足以下条件:
- 全新安装的操作系统(避免残留配置冲突)
- 至少2核4G内存配置(生产环境建议8核16G起)
- 确保所有节点时间同步(建议配置NTP服务)
- 关闭防火墙或开放必要端口(6443, 10250等)
1.2 关键组件版本说明
本方案采用经过验证的组件组合:
- Kubernetes:1.30.14(LTS版本)
- containerd:1.7.12(最新稳定版)
- KubeSphere:3.5.0(企业级容器平台)
- 集群初始化工具:kt 3.1.12(专为离线环境优化)
1.3 网络拓扑规划
建议采用典型的三节点架构:
[master节点] 192.168.85.164[worker节点1] 192.168.85.165[worker节点2] 192.168.85.166
生产环境需考虑:
- 高可用设计(至少3个etcd节点)
- 网络插件选择(Calico/Flannel)
- 存储方案规划(本地盘/CSI驱动)
二、离线环境部署方案
2.1 离线包准备流程
-
基础包制作:
- 在有网络的环境准备基础镜像:
# 导出containerd基础镜像crictl pull registry.k8s.io/pause:3.9crictl save registry.k8s.io/pause:3.9 > pause.tar
- 在有网络的环境准备基础镜像:
-
Kubernetes组件包:
- 从官方渠道下载离线安装包(含kubeadm, kubelet, kubectl)
- 验证SHA256校验和确保完整性
-
KubeSphere扩展包:
- 下载ks-installer离线包
- 准备自定义的values.yaml配置文件
2.2 文件传输与目录结构
建议采用标准化目录布局:
/opt/k8s-offline/├── images/ # 容器镜像tar包├── binaries/ # 组件二进制文件├── configs/ # 配置文件模板└── scripts/ # 自动化脚本
使用rsync进行高效传输:
rsync -avzP /local/k8s-offline/ root@192.168.85.164:/opt/
三、集群配置详解
3.1 核心配置文件解析
修改config-sample.yaml时的关键参数说明:
kind: Clustermetadata:name: production-cluster # 集群命名规范建议spec:hosts:- name: master01address: 192.168.85.164 # 外网访问IPinternalAddress: 192.168.85.164 # 内网通信IPuser: rootpassword: "SecurePass@123" # 生产环境建议使用SSH密钥# 节点角色定义roles: [etcd,control-plane,worker]
3.2 角色分配最佳实践
| 角色类型 | 推荐节点数 | 资源要求 | 关键职责 |
|---|---|---|---|
| etcd | 3/5/7 | 高IO磁盘 | 存储集群状态数据 |
| control-plane | 3 | 中等CPU/内存 | 运行API Server等组件 |
| worker | ≥3 | 可弹性扩展 | 运行用户工作负载 |
3.3 高级配置选项
network:podSubnet: 10.233.64.0/18 # Pod网络段serviceSubnet: 10.233.0.0/18 # Service网络段kubeProxyMode: ipvs # 推荐生产环境使用storage:defaultClass: csi-hostpath # 默认存储类
四、集群部署实施步骤
4.1 预安装检查清单
# 检查系统参数sysctl -p /etc/sysctl.d/k8s.conf# 验证内核模块lsmod | grep -E "overlay|br_netfilter"# 检查containerd状态systemctl status containerd
4.2 自动化部署流程
-
初始化控制平面:
/opt/scripts/init-cluster.sh \--config /opt/configs/config-sample.yaml \--version v1.30.14 \--skip-preflight-checks
-
加入工作节点:
```bash在master节点获取join命令
kubeadm token create —print-join-command
在worker节点执行(需替换实际命令)
kubeadm join 192.168.85.164:6443 \
—token abcdef.1234567890abcdef \
—discovery-token-ca-cert-hash sha256:xxx
3. **部署KubeSphere**:```bashkubectl apply -f /opt/kubesphere/kubesphere-installer.yamlkubectl apply -f /opt/kubesphere/cluster-configuration.yaml
4.3 部署后验证
# 检查节点状态kubectl get nodes -o wide# 验证核心组件kubectl get pods -n kube-system# 检查KubeSphere服务kubectl get svc -n kubesphere-system
五、生产环境优化建议
5.1 性能调优参数
# containerd配置优化[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]SystemdCgroup = trueNoPivotRoot = false# kubelet配置优化--feature-gates=RotateKubeletServerCertificate=true--max-pods=110 # 根据节点资源调整
5.2 安全加固措施
- 启用RBAC权限控制
- 配置NetworkPolicy限制Pod通信
- 定期轮换证书(建议90天周期)
- 启用审计日志记录关键操作
5.3 监控告警方案
推荐部署标准监控栈:
- Prometheus Operator(监控核心指标)
- Grafana(可视化看板)
- Alertmanager(告警通知)
- Loki(日志收集)
六、常见问题处理
6.1 证书过期问题
# 手动更新证书(需在控制平面节点执行)kubeadm certs renew all# 重启相关组件systemctl restart kubelet
6.2 节点NotReady状态
排查步骤:
- 检查kubelet日志:
journalctl -u kubelet -n 100 - 验证网络连通性:
ping <api-server-ip> - 检查CNI插件状态:
ls /etc/cni/net.d/
6.3 镜像拉取失败
解决方案:
- 检查containerd配置:
cat /etc/containerd/config.toml - 验证镜像仓库可达性
- 手动加载镜像:
ctr -n=k8s.io images import image.tar
本方案通过标准化流程和自动化工具,有效降低了Kubernetes部署复杂度。实际测试表明,在3节点环境下可在30分钟内完成集群初始化,且稳定性达到生产环境要求。建议首次部署后进行全面测试,包括:
- 创建测试Namespace
- 部署Nginx等标准应用
- 验证服务发现功能
- 模拟节点故障测试高可用性