1. 项目概述
在当前的容器化技术浪潮中,Kubernetes(简称k8s)已成为企业级容器编排的事实标准。尽管CentOS 7作为操作系统已经停止维护,但由于历史原因和兼容性考虑,国内仍有大量企业继续使用它作为生产环境的基础系统。本文将详细介绍如何在CentOS 7系统上从零开始部署Kubernetes 1.23.17版本,并集成KubeSphere容器管理平台。
这个部署方案特别适合以下场景:
- 需要在老旧CentOS系统上快速搭建k8s集群
- 企业内部需要私有化部署容器平台
- 希望使用KubeSphere提供的企业级k8s管理功能
- 需要兼容国产化环境的部署需求
2. 环境准备与工具选择
2.1 硬件与系统要求
对于测试环境,建议的最低配置如下:
- 服务器:1台(All-in-One模式)
- CPU:4核(x86_64架构)
- 内存:8GB
- 磁盘:50GB可用空间
- 操作系统:CentOS 7.6+
注意:生产环境建议至少3个节点(1个master+2个worker),配置根据实际负载需求相应提高。
2.2 工具选择:kt vs kk
本文使用kt工具而非原版kk(KubeKey)进行部署,主要基于以下考虑:
-
国产化适配增强:
- 支持鲲鹏、飞腾等国产CPU架构
- 适配银河麒麟、统信UOS等国产操作系统
-
部署简化:
- 内置常见操作系统依赖包
- 一条命令完成系统初始化(
./kt init-os) - 自动处理防火墙配置(
./kt firewall)
-
离线部署优化:
- 内置常用依赖包,减少外网依赖
- 支持arm架构的Harbor镜像仓库
2.3 网络规划建议
在开始部署前,建议规划好以下网络参数:
- Pod CIDR:10.233.64.0/18(默认)
- Service CIDR:10.233.0.0/18(默认)
- 确保30000-32767端口可访问(NodePort范围)
3. 详细部署步骤
3.1 初始环境配置
3.1.1 上传部署文件
将以下文件上传到服务器(本文以/root目录为例):
- kt二进制文件(如kt-3.1.12-centos)
- 离线制品包(artifact-x86-k8s12317-ks3.4.1.tar.gz)
- 配置文件模板(config-sample.yaml)
使用以下命令设置执行权限:
bash复制chmod +x kt-3.1.12-centos
mv kt-3.1.12-centos /usr/local/bin/kt
3.1.2 配置文件修改
典型的config-sample.yaml配置示例:
yaml复制kind: Cluster
metadata:
name: sample
spec:
hosts:
- {name: node1, address: 192.168.85.164, internalAddress: 192.168.85.164, user: root, password: "123123"}
roleGroups:
etcd:
- node1
control-plane:
- node1
worker:
- node1
registry:
- node1
controlPlaneEndpoint:
internalLoadbalancer: haproxy
domain: lb.kubesphere.local
port: 6443
kubernetes:
version: v1.23.17
containerManager: docker
network:
plugin: calico
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
registry:
type: harbor
privateRegistry: "dockerhub.kubekey.local"
auths:
"dockerhub.kubekey.local":
username: "admin"
password: "Harbor@123"
关键配置说明:
containerManager:建议使用docker而非containerd,兼容性更好network.plugin:Calico是生产环境推荐选择registry.auths:Harbor仓库认证信息,后续登录使用
3.2 系统初始化
执行以下命令完成系统初始化:
bash复制./kt init-os -f config-sample.yaml
这个命令会自动完成:
- 系统依赖包安装
- 内核参数调优
- 防火墙配置
- SELinux禁用
- Swap关闭
经验提示:即使init-os执行成功,也建议手动确认swap是否真正关闭(
free -h),这是k8s的硬性要求。
3.3 Harbor私有仓库部署
3.3.1 安装Harbor
bash复制./kt init registry -f config-sample.yaml -a artifact-x86-k8s12317-ks3.4.1.tar.gz
该命令会自动:
- 安装Docker和docker-compose
- 部署Harbor镜像仓库
- 配置TLS证书(如需要)
3.3.2 Harbor项目初始化
执行脚本创建必要项目:
bash复制chmod +x create_project_harbor.sh
./create_project_harbor.sh
默认会创建以下项目:
- kubesphereio(用于KubeSphere组件镜像)
- library(公共镜像库)
4. Kubernetes集群部署
4.1 集群创建命令
bash复制./kt create cluster -f config-sample.yaml -a artifact-x86-k8s12317-ks3.4.1.tar.gz
部署过程会经历以下阶段:
- 节点环境检查
- 镜像推送到Harbor仓库
- Kubernetes组件安装
- KubeSphere组件安装
4.2 部署监控与问题排查
查看实时部署日志:
bash复制kubectl logs -n kubesphere-system \
$(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
常见问题及解决方案:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 镜像推送失败 | Harbor仓库未就绪 | 检查Harbor服务状态,确保端口443/80可访问 |
| 节点NotReady | 网络插件未正确安装 | 检查calico-node Pod状态,确认网络配置 |
| 安装卡在etcd | 时钟不同步 | 所有节点执行ntpdate pool.ntp.org |
4.3 验证安装结果
成功部署后,可以通过以下方式访问:
- KubeSphere控制台:
http://<节点IP>:30880 - 默认管理员账号:admin / P@88w0rd
关键检查点:
- 集群状态:
bash复制
kubectl get nodes kubectl get pods -A - KubeSphere组件状态:
bash复制
kubectl get pods -n kubesphere-system
5. 生产环境优化建议
5.1 安全加固措施
-
修改默认凭证:
- KubeSphere管理员密码
- Harbor管理员密码
- k8s dashboard token
-
网络隔离:
- 使用NetworkPolicy实现Pod间网络隔离
- 限制NodePort访问范围
-
审计日志:
yaml复制# 在config-sample.yaml中添加 kubernetes: audit: enabled: true policyFile: "/etc/kubernetes/audit-policy.yaml"
5.2 性能调优建议
-
内核参数优化:
bash复制# 增加连接数限制 echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf echo "net.ipv4.tcp_max_syn_backlog = 8192" >> /etc/sysctl.conf sysctl -p -
Docker存储驱动:
json复制// /etc/docker/daemon.json { "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] }
5.3 组件扩展方案
通过修改KubeSphere的CRD启用更多功能:
bash复制kubectl edit cc -n kubesphere-system ks-installer
可启用的常见组件:
- 日志系统(Logging)
- 服务网格(Service Mesh)
- 告警通知(Alerting)
- DevOps流水线
6. 维护与升级
6.1 日常维护命令
-
查看集群状态:
bash复制
kt inspect cluster -f config-sample.yaml -
备份ETCD数据:
bash复制
kt backup -f config-sample.yaml --backup-path=/opt/backup
6.2 版本升级路径
-
KubeSphere升级:
bash复制
./kt upgrade -f config-sample.yaml --kubesphere v3.4.2 -
Kubernetes升级:
bash复制# 修改config-sample.yaml中的version字段后执行 ./kt create cluster -f config-sample.yaml --upgrade
重要提示:生产环境升级前务必先备份ETCD数据并测试升级流程。
7. 常见问题解决方案
7.1 镜像拉取失败
典型错误:
code复制Failed to pull image "dockerhub.kubekey.local/kubesphereio/kube-apiserver:v1.23.17"
解决方案:
- 确认Harbor仓库可访问
- 检查节点上的docker配置:
bash复制确保包含:cat /etc/docker/daemon.jsonjson复制{ "insecure-registries": ["dockerhub.kubekey.local"] } - 重启docker服务:
bash复制
systemctl restart docker
7.2 节点磁盘压力
监控到节点DiskPressure时:
- 清理docker无用资源:
bash复制
docker system prune -af - 调整kubelet配置:
bash复制
修改以下参数:kubectl edit kubeletconfig -n kube-systemyaml复制evictionHard: imagefs.available: "15%" memory.available: "100Mi" nodefs.available: "10%"
7.3 网络插件问题
Calico常见问题处理:
- 查看Calico节点状态:
bash复制
calicoctl node status - 如果节点间网络不通:
bash复制# 检查IPIP配置 kubectl get ipamblocks -o yaml # 必要时重建Calico kubectl delete -f https://docs.projectcalico.org/manifests/calico.yaml kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
8. 国产化环境特别说明
对于国产CPU和操作系统环境,kt工具已做特别适配:
-
飞腾/鲲鹏CPU:
- 使用对应的arm64版本离线包
- 镜像仓库自动识别架构
-
麒麟/统信OS:
- 内置所需依赖包
- 自动适配系统服务管理
部署命令与x86环境一致,kt会自动检测环境:
bash复制./kt init-os -f config-sample.yaml
./kt create cluster -f config-sample.yaml -a artifact-arm64-k8s12317-ks3.4.1.tar.gz
在国产化环境中部署时,建议额外注意:
- 确认CPU架构与软件包匹配
- 检查内核版本(建议3.10+)
- 提前测试存储性能(部分国产存储驱动有兼容性问题)