导读:本期聚焦于罗经纬创作的《莱卡云Linux云服务器如何安装Kubernetes?附常见错误与解决方法》,敬请观看详情。在莱卡云的Linux云服务器上部署Kubernetes集群时,很多朋友会遇到kubeadm初始化失败、镜像拉取超时、节点NotReady等问题。本文将以CentOS和Ubuntu系统为例,详细介绍从系统准备、关闭交换分区、安装容器运行时、配置kubeadm与kubelet,到初始化控制平面节点和加入工作节点的完整流程,同时汇总部署过程中高频出现的报错原因与对应的排查解决方法,帮助你在云服务器上顺利搭建一套可用的Kubernetes集群,并给出日常运维中需要注意的事项。

Kubernetes已经成为容器编排领域的事实标准,无论是搭建测试环境还是部署生产集群,都离不开它在云服务器上的安装与配置。莱卡云的Linux云服务器提供了稳定的主机资源和较高的网络质量,非常适合用来搭建Kubernetes学习或生产环境。本文将以CentOS 7和Ubuntu 20.04为例,完整演示在莱卡云服务器上安装Kubernetes集群的全过程,并汇总部署中最常见的报错与解决办法,帮助你少走弯路。

莱卡云Linux云服务器如何安装Kubernetes?附常见错误与解决方法

一、安装前的系统准备工作

无论使用哪种Linux发行版,安装Kubernetes之前都需要完成一系列系统层面的准备。首先是主机规划,一个最小化的集群至少需要一台控制平面节点(master)和一台工作节点(node),建议每台机器至少2核CPU、2GB内存。莱卡云服务器可以在控制台直接创建多台实例,建议选择同一地域、同一内网网段的机型,这样节点之间的通信延迟最低。

其次是系统配置。Kubernetes要求关闭交换分区,否则kubelet会拒绝启动,临时关闭可以执行swapoff -a,永久关闭需要注释掉/etc/fstab中swap相关的行。同时需要设置主机名并配置hosts解析,让各节点之间能通过主机名互访。

还需要在防火墙层面放行Kubernetes所需的端口,或者在内网环境直接关闭防火墙降低排查难度。内核参数方面,需要开启桥接相关设置并加载br_netfilteroverlay模块。

# 关闭swap并确认
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
free -h

# 设置主机名(分别在两台机器执行)
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1

# 配置hosts解析
cat >> /etc/hosts <<EOF
192.168.1.10 k8s-master
192.168.1.11 k8s-node1
EOF

# 加载内核模块
cat > /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter

# 开启桥接网络参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sysctl --system

如果使用CentOS系统,还需要注意关闭SELinux,执行setenforce 0并修改/etc/selinux/configSELINUX设为disabled。这些准备工作虽然琐碎,但能规避后面百分之八十以上的初始化报错。

二、安装容器运行时与kubeadm工具

从Kubernetes 1.24版本开始,集群默认不再直接支持Docker作为运行时,推荐使用containerd。当然也可以继续安装Docker并启用其内置的containerd,两种方式都可以正常搭建集群。下面以containerd为例演示安装过程。

安装containerd后,需要生成默认配置并修改其中SystemdCgroup为true,这一点非常关键。如果控制平面使用systemd cgroup驱动而containerd使用cgroupfs,kubelet会报cgroup driver不一致的错误,导致节点始终处于NotReady状态。

# 安装containerd(Ubuntu示例)
apt-get update && apt-get install -y containerd

# 生成默认配置
mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# 修改cgroup驱动为systemd
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 如果使用国内镜像源,可同时修改sandbox镜像地址
# sed -i 's#registry.k8s.io/pause:3.8#registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8#' /etc/containerd/config.toml

systemctl restart containerd
systemctl enable containerd

接下来安装kubeadm、kubelet和kubectl三件套。由于官方源在国内访问不稳定,建议使用阿里云的镜像源。三个组件的版本必须保持一致,安装完成后执行kubeadm version确认。

# CentOS配置kubernetes源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet

# Ubuntu安装示例
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

三、初始化集群并加入工作节点

准备工作完成后,在master节点执行kubeadm init进行初始化。为了避免国内拉取registry.k8s.io镜像超时,建议显式指定阿里云的镜像仓库地址。初始化成功后,终端会输出一条kubeadm join命令,务必保存好,工作节点靠它加入集群。

# 在master节点初始化
kubeadm init \
  --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.2 \
  --pod-network-cidr 10.244.0.0/16 \
  --service-cidr 10.96.0.0/12

# 配置kubectl命令补全与凭证
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# 安装flannel网络插件
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# 查看节点状态
kubectl get nodes

网络插件必须在初始化后立即安装,否则coredns容器会一直处于ContainerCreating状态,节点也会显示NotReady。flannel默认使用的网段就是10.244.0.0/16,所以初始化时--pod-network-cidr要与此保持一致,如果改用calico则需要换成calico的默认网段。

工作节点上执行初始化时保存的join命令即可。如果token过期了(默认24小时有效),可以在master上执行kubeadm token create --print-join-command重新生成。加入成功后在master上再次执行kubectl get nodes,看到所有节点都是Ready状态,一个最小化集群就搭建完成了。

四、常见错误与解决方法

实际部署中,下面这些报错出现频率最高,这里逐条给出原因和解决办法。

  • 镜像拉取超时或失败:报错含registry.k8s.io连接超时,属于网络问题。解决方法是在init时加--image-repository参数指向国内镜像源,或者提前用kubeadm config images pull手动拉取镜像。
  • 节点NotReady:最常见原因是containerd的cgroup驱动与kubelet不一致,按前文修改SystemdCgroup为true即可;其次是网络插件未安装,安装flannel或calico后恢复。
  • 初始化报端口被占用:说明之前初始化过但未清理干净,执行kubeadm reset清理后再重新init,必要时删除/etc/cni/net.d$HOME/.kube目录。
  • kubelet无法启动:执行journalctl -u kubelet -n 50查看日志。常见原因包括swap未关闭、主机名冲突、containerd未启动。
  • join时报token无效:token默认24小时过期,用kubeadm token create --print-join-command生成新命令。
  • coredns一直ContainerCreating:多为网络插件未部署或多网卡环境下flannel绑定了错误的网卡,可编辑flannel配置指定正确的--iface参数。

排查问题时的通用思路是:先看节点事件,再看具体容器日志。善用kubectl describe node 节点名kubectl describe pod pod名journalctl -u kubelet这三个命令,绝大多数问题都能在输出信息中找到线索。

五、日常使用注意事项

集群搭建好之后,日常运维中还有几点需要留意。首先是版本升级,升级前务必用kubeadm upgrade plan查看可升级路径,且三个组件版本要同步升级,不要直接跨大版本跳跃。其次是资源监控,2GB内存的机器跑满负载后kubelet可能被OOM杀掉,导致节点失联,建议给生产环境至少4GB内存。

另外要注意莱卡云安全组的配置,如果需要从本地访问集群中的服务,除了在安全组放行端口,还可以使用kubectl的端口转发功能:kubectl port-forward svc/my-service 8080:80,这样无需暴露节点端口也能本地调试。最后建议定期备份/etc/kubernetes目录和etcd数据,控制平面证书默认有效期一年,可以通过kubeadm certs check-expiration检查并及时续期,避免证书过期导致整个集群不可用。

按照以上流程操作,在莱卡云的Linux服务器上搭建一个Kubernetes集群通常半小时内就能完成。遇到问题时保持耐心,按照报错信息逐层排查,Kubernetes的报错提示其实相当友好,绝大多数故障都能自行解决。

莱卡云Kubernetes安装Linux云服务器修改时间:2026-08-31 21:55:05

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。