首页>>帮助中心>>vps服务器搭建Kubernetes集群

vps服务器搭建Kubernetes集群

2025/9/24 3次

用VPS搭建Kubernetes集群:从环境准备到服务部署的保姆级全攻略(2025年最新避坑指南)


副标题1:为什么越来越多人选择VPS搭建K8s集群?——低成本、高灵活的轻量实践


在云服务厂商竞争白热化的2025年,Kubernetes(简称K8s)作为容器编排领域的事实标准,早已成为开发者和企业必备的技术栈。但很多人不知道,搭建K8s集群不一定非要选择动辄上千元/月的云服务器——对于个人开发者、小型团队甚至初创公司而言,用VPS(虚拟专用服务器)搭建K8s集群,既能满足基础业务需求,又能把成本压到最低。



2025年的VPS市场已非常成熟,不少老牌服务商推出了“学生机”“轻量应用服务器”套餐,配置2核4G内存、50GB SSD存储的VPS,年付仅需数百元,部分新平台甚至提供首月免费试用。相比云服务器,VPS的优势在于“按需付费”和“环境隔离性”:每个VPS就是一台独立服务器,能灵活调整配置,适合测试环境快速迭代;而云服务器的多租户共享架构,反而可能因资源竞争影响性能稳定性。



不过需要注意,VPS搭建K8s的前提是“稳定性”和“网络连通性”。推荐选择支持“独立IP”“带宽保障”的服务商,避免共享IP导致的端口冲突,同时优先选择国内或离目标用户近的地域,减少网络延迟。



副标题2:2025年VPS环境准备全流程:系统配置、网络开放与基础依赖安装


搭建K8s集群的第一步是“搭好舞台”——确保VPS环境满足K8s的最低要求,且配置正确。以2025年的技术栈为例,单节点(主节点)推荐配置:2核CPU、4GB内存、40GB SSD存储、1Mbps以上带宽;工作节点可根据应用负载调整,建议至少1核2G。系统方面,Ubuntu 22.04 LTS是K8s官方推荐的稳定版本,兼容性最佳,本文所有操作均基于此系统展开。



环境准备的核心是“系统初始化”。通过SSH登录VPS,执行以下命令更新系统并安装依赖:

sudo apt update && sudo apt upgrade -y

sudo apt install -y openssh-server curl wget

接着需要开放K8s所需的端口。K8s集群通信涉及多个组件,需在VPS防火墙(如ufw)中开放:

sudo ufw allow 22/tcp # SSH远程登录

sudo ufw allow 6443/tcp # K8s API Server

sudo ufw allow 2379:2380/tcp # etcd集群通信

sudo ufw allow 10250:10252/tcp # kubelet端口

sudo ufw allow 10255/tcp # 控制平面健康检查

sudo ufw allow 30000:32767/tcp # NodePort服务端口

sudo ufw enable # 启动防火墙



必须禁用Swap——K8s要求禁用Swap以保证内存资源分配的稳定性。执行sudo swapoff -a临时禁用,若需永久生效,需编辑/etc/fstab文件,注释掉swap行并保存。完成后,可通过free -h确认Swap已关闭。



副标题3:2025年K8s集群初始化与节点添加:从主节点到工作节点的完整步骤


环境准备好后,下一步是安装K8s依赖工具。2025年K8s稳定版已更新至v1.29,推荐使用kubeadm快速部署,省去手动配置复杂组件的麻烦。安装步骤如下:在所有节点(主节点和工作节点)执行:

sudo apt install -y apt-transport-https ca-certificates curl

# 添加K8s官方GPG密钥

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

# 添加K8s软件源

cat > /etc/apt/sources.list.d/kubernetes.list << EOF

deb https://apt.kubernetes.io/ kubernetes-xenial main

EOF

# 安装kubeadm、kubelet、kubectl(指定版本避免自动更新)

sudo apt update && sudo apt install -y kubelet=1.29.0-00 kubeadm=1.29.0-00 kubectl=1.29.0-00

# 锁定版本防止自动升级

sudo apt-mark hold kubelet kubeadm kubectl



初始化主节点是搭建集群的关键一步。执行kubeadm init命令,指定K8s镜像仓库和网络插件:

sudo kubeadm init \

--pod-network-cidr=10.244.0.0/16 \ # Calico网络插件的默认CIDR

--kubernetes-version=1.29.0 \

--image-repository registry.aliyuncs.com/google_containers # 使用国内镜像源加速拉取

--service-cidr=10.96.0.0/12 # 服务网络CIDR


初始化成功后,终端会输出添加工作节点的命令,:

kubeadm join 1.2.3.4:6443 --token abcdef.0123456789abcdef \

--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


这个命令需要保存好,后续添加工作节点时直接执行即可。



主节点初始化后,还需安装网络插件才能正常通信。执行kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml(Calico最新版可能更新,建议确认官网最新链接)。安装完成后,等待约2分钟,执行kubectl get pods -n kube-system,看到calico-node-xxx等Pod状态为Running,说明网络插件部署成功。



添加工作节点,在工作节点上执行主节点输出的join命令,稍等片刻,回到主节点执行kubectl get nodes,若所有节点状态为Ready,说明K8s集群搭建完成。



副标题4:部署第一个K8s应用:用kubectl创建Nginx服务并暴露访问


集群搭建完成后,部署一个简单的Nginx服务,验证集群功能。创建Nginx Deployment:

kubectl create deployment nginx --image=nginx:alpine

执行kubectl get pods,可以看到nginx-xxxx的Pod正在运行。接着,需要将服务暴露到外部访问,这里使用NodePort类型的Service,命令如下:

kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort

通过kubectl get svc查看Service信息,会显示类似:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m

nginx NodePort 10.104.15.2 <none> 80:30080/TCP 2m


其中“30080”就是NodePort端口,此时可在浏览器中输入VPS的公网IP+端口,http://123.45.67.89:30080,看到Nginx的欢迎页面,说明服务部署成功。



如果需要更规范的访问,可添加Ingress控制器(如Ingress-NGINX),通过域名直接访问。但对于测试阶段,NodePort方式简单直观,适合快速验证效果。



问题1:VPS搭建K8s时遇到kubeadm init卡在“waiting for the kubelet to boot up the control plane”怎么办?

答:检查主节点的kubelet服务状态:systemctl status kubelet,若显示“inactive”,启动服务后再次尝试;若显示“active”,通过日志排查原因:journalctl -u kubelet -f。常见问题是etcd数据目录损坏或镜像拉取失败。解决方法:

1. 执行sudo kubeadm reset重置集群状态,删除etcd数据目录(sudo rm -rf /var/lib/etcd),重新初始化;

2. 若为镜像拉取失败,修改kubeadm配置文件:kubeadm config print init-defaults > kubeadm-config.yaml,编辑文件将imageRepository改为国内镜像源(如registry.aliyuncs.com/google_containers),再执行kubeadm init --config kubeadm-config.yaml



问题2:如何提升VPS搭建的K8s集群安全性?需要注意哪些细节?

答:需从网络、访问控制、数据安全三方面入手:

1. 网络安全:仅开放必要端口(如
22、6443),使用网络策略(Network Policy)限制Pod间通信,禁止非授权Pod访问API Server;

2. 访问控制:禁用root SSH登录,强制使用SSH密钥;K8s中创建最小权限的Service Account,为Pod配置安全上下文(如非root用户运行、禁用特权容器);

3.数据安全:定期备份etcd数据(etcdctl snapshot save),限制etcd数据目录权限(chmod 700 /var/lib/etcd),启用API Server的TLS加密(--tls-cert-file和--tls-private-key-file),避免使用过期证书(通过kubeadm certs check-expiration检查证书有效期,及时更新)。