1. 项目概述
在当今云原生技术蓬勃发展的时代,Kubernetes(简称k8s)已成为容器编排领域的事实标准。而KubeSphere作为一款开源的容器平台,为k8s提供了更加友好的管理界面和丰富的功能扩展。本文将详细记录在CentOS系统上从零开始部署k8s 1.23.17版本并集成KubeSphere的全过程。
这个部署方案特别适合以下场景:
- 企业内网环境需要搭建私有云平台
- 开发团队需要本地测试环境
- 学习k8s和云原生技术的实践者
- 需要将传统应用迁移到容器平台的技术人员
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与系统配置
2.1 硬件要求
对于生产环境,建议至少满足以下配置:
- 3台或以上物理机/虚拟机(1个master,2个worker)
- 每台机器至少4核CPU
- 8GB以上内存
- 100GB以上存储空间
如果是学习或测试环境,可以适当降低要求:
- 2台机器(1个master,1个worker)
- 每台2核CPU
- 4GB内存
- 50GB存储
注意:k8s对资源有一定要求,配置过低可能导致部署失败或运行不稳定。
2.2 操作系统准备
我们选择CentOS 7.x作为基础操作系统,具体版本建议使用CentOS 7.6或7.9。以下是系统初始化步骤:
- 安装最小化CentOS系统
- 更新系统:
bash复制
yum update -y yum install -y vim wget net-tools - 关闭防火墙:
bash复制systemctl stop firewalld systemctl disable firewalld - 关闭SELinux:
bash复制setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config - 关闭swap:
bash复制swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2.3 网络配置
确保所有节点之间网络互通,并配置好主机名解析。编辑/etc/hosts文件,添加类似如下内容:
code复制192.168.1.100 master
192.168.1.101 node1
192.168.1.102 node2
3. Docker安装与配置
3.1 安装Docker
k8s 1.23版本推荐使用Docker作为容器运行时:
bash复制yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io
3.2 配置Docker
创建/etc/docker/daemon.json文件,内容如下:
json复制{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": ["https://registry.docker-cn.com"]
}
然后启动Docker服务:
bash复制systemctl enable docker && systemctl start docker
4. k8s集群部署
4.1 安装kubeadm、kubelet和kubectl
在所有节点上执行以下命令:
bash复制cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.23.17 kubeadm-1.23.17 kubectl-1.23.17 --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet
4.2 初始化Master节点
在master节点上执行初始化:
bash复制kubeadm init \
--kubernetes-version=v1.23.17 \
--image-repository=registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.1.100
初始化成功后,按照提示执行以下命令配置kubectl:
bash复制mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4.3 安装网络插件
我们选择flannel作为网络插件:
bash复制kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4.4 加入Worker节点
在master节点上获取加入命令:
bash复制kubeadm token create --print-join-command
然后在每个worker节点上执行输出的join命令。
5. KubeSphere部署
5.1 安装准备工作
首先确保k8s集群正常运行:
bash复制kubectl get nodes
所有节点状态应为Ready。
5.2 安装KubeSphere
使用以下命令安装KubeSphere:
bash复制kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.1/kubesphere-installer.yaml
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.1/cluster-configuration.yaml
检查安装进度:
bash复制kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
5.3 访问KubeSphere控制台
安装完成后,获取访问地址:
bash复制kubectl get svc -n kubesphere-system ks-console
默认用户名和密码:
- 用户名:admin
- 密码:P@88w0rd
6. 常见问题与解决方案
6.1 kubeadm init卡住
可能原因:
- 镜像拉取失败
- 网络插件未正确配置
解决方案:
- 手动拉取镜像:
bash复制
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers - 检查网络配置,确保节点间可以通信
6.2 Node状态为NotReady
可能原因:
- 网络插件未安装
- kubelet服务异常
解决方案:
- 确认已安装flannel或其他CNI插件
- 检查kubelet日志:
bash复制
journalctl -u kubelet -f
6.3 KubeSphere安装失败
可能原因:
- 资源不足
- 存储类未配置
解决方案:
- 增加节点资源
- 安装前配置好默认存储类
7. 性能优化建议
7.1 资源分配
建议为k8s组件预留资源:
yaml复制apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
evictionHard:
memory.available: "500Mi"
nodefs.available: "10%"
nodefs.inodesFree: "5%"
imagefs.available: "15%"
7.2 日志管理
配置日志轮转:
bash复制cat <<EOF > /etc/logrotate.d/docker
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
missingok
delaycompress
copytruncate
}
EOF
7.3 监控与告警
KubeSphere内置了监控功能,也可以考虑部署Prometheus+Alertmanager实现更精细的监控。
8. 后续扩展方向
- 集成CI/CD流水线
- 部署服务网格(如Istio)
- 实现多集群管理
- 添加GPU支持
- 部署有状态应用(如数据库)
在实际部署过程中,我发现以下几个经验点特别值得注意:
- 网络配置一定要提前规划好,特别是CIDR范围不要冲突
- 资源监控要从部署初期就开始,避免后期发现问题难以排查
- 版本兼容性非常重要,组件版本要严格匹配
- 备份etcd数据是保障集群安全的重要手段
