上一篇 下一篇 分享链接 返回 返回顶部

vps服务器搭建Kubernetes集群

发布人:欢子 发布时间:2026-01-19 06:11 阅读量:13
用VPS搭建Kubernetes集群:从环境准备到服务部署的保姆级全攻略(2025年最新避坑指南)

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

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

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

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

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

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

环境准备的核心是“系统初始化”。通过SSH登录VPS,执行以下命令更新系统并安装依赖:sudoaptupdate&&sudoaptupgrade-ysudoaptinstall-yopenssh-servercurlwget接着需要开放K8s所需的端口。K8s集群通信涉及多个组件,需在VPS防火墙(如ufw)中开放:sudoufwallow22/tcp#SSH远程登录sudoufwallow6443/tcp#K8sAPIServersudoufwallow2379:2380/tcp#etcd集群通信sudoufwallow10250:10252/tcp#kubelet端口sudoufwallow10255/tcp#控制平面健康检查sudoufwallow30000:32767/tcp#NodePort服务端口sudoufwenable#启动防火墙

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

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

环境准备好后,下一步是安装K8s依赖工具。2025年K8s稳定版已更新至v1.29,推荐使用kubeadm快速部署,省去手动配置复杂组件的麻烦。安装步骤如下:在所有节点(主节点和工作节点)执行:sudoaptinstall-yapt-transport-httpsca-certificatescurl#添加K8s官方GPG密钥curlhttps://packages.cloud.google.com/apt/doc/apt-key.gpg|sudoapt-keyadd-#添加K8s软件源cat>/etc/apt/sources.list.d/kubernetes.list<

初始化主节点是搭建集群的关键一步。执行kubeadminit命令,指定K8s镜像仓库和网络插件:sudokubeadminit\--pod-network-cidr=10.244.0.0/16\#Calico网络插件的默认CIDR--kubernetes-version=1.29.0\--image-repositoryregistry.aliyuncs.com/google_containers#使用国内镜像源加速拉取--service-cidr=10.96.0.0/12#服务网络CIDR初始化成功后,终端会输出添加工作节点的命令,:kubeadmjoin1.2.3.4:6443--tokenabcdef.0123456789abcdef\--discovery-token-ca-cert-hashsha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这个命令需要保存好,后续添加工作节点时直接执行即可。

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

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

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

集群搭建完成后,部署一个简单的Nginx服务,验证集群功能。创建NginxDeployment:kubectlcreatedeploymentnginx--image=nginx:alpine执行kubectlgetpods,可以看到nginx-xxxx的Pod正在运行。接着,需要将服务暴露到外部访问,这里使用NodePort类型的Service,命令如下:kubectlexposedeploymentnginx--port=80--target-port=80--type=NodePort通过kubectlgetsvc查看Service信息,会显示类似:NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEkubernetesClusterIP10.96.0.1443/TCP10mnginxNodePort10.104.15.280:30080/TCP2m其中“30080”就是NodePort端口,此时可在浏览器中输入VPS的公网IP+端口,http://123.45.67.89:30080,看到Nginx的欢迎页面,说明服务部署成功。

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

问题1:VPS搭建K8s时遇到kubeadminit卡在“waitingforthekubelettobootupthecontrolplane”怎么办?答:检查主节点的kubelet服务状态:systemctlstatuskubelet,若显示“inactive”,启动服务后再次尝试;若显示“active”,通过日志排查原因:journalctl-ukubelet-f。常见问题是etcd数据目录损坏或镜像拉取失败。解决方法:1.执行sudokubeadmreset重置集群状态,删除etcd数据目录(sudorm-rf/var/lib/etcd),重新初始化;2.若为镜像拉取失败,修改kubeadm配置文件:kubeadmconfigprintinit-defaults>kubeadm-config.yaml,编辑文件将imageRepository改为国内镜像源(如registry.aliyuncs.com/google_containers),再执行kubeadminit--configkubeadm-config.yaml。

问题2:如何提升VPS搭建的K8s集群安全性?需要注意哪些细节?答:需从网络、访问控制、数据安全三方面入手:1.网络安全:仅开放必要端口(如22、6443),使用网络策略(NetworkPolicy)限制Pod间通信,禁止非授权Pod访问APIServer;2.访问控制:禁用rootSSH登录,强制使用SSH密钥;K8s中创建最小权限的ServiceAccount,为Pod配置安全上下文(如非root用户运行、禁用特权容器);3.数据安全:定期备份etcd数据(etcdctlsnapshotsave),限制etcd数据目录权限(chmod700/var/lib/etcd),启用APIServer的TLS加密(--tls-cert-file和--tls-private-key-file),避免使用过期证书(通过kubeadmcertscheck-expiration检查证书有效期,及时更新)。

目录结构
全文