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

一、安装前的系统准备工作
无论使用哪种Linux发行版,安装Kubernetes之前都需要完成一系列系统层面的准备。首先是主机规划,一个最小化的集群至少需要一台控制平面节点(master)和一台工作节点(node),建议每台机器至少2核CPU、2GB内存。莱卡云服务器可以在控制台直接创建多台实例,建议选择同一地域、同一内网网段的机型,这样节点之间的通信延迟最低。
其次是系统配置。Kubernetes要求关闭交换分区,否则kubelet会拒绝启动,临时关闭可以执行swapoff -a,永久关闭需要注释掉/etc/fstab中swap相关的行。同时需要设置主机名并配置hosts解析,让各节点之间能通过主机名互访。
还需要在防火墙层面放行Kubernetes所需的端口,或者在内网环境直接关闭防火墙降低排查难度。内核参数方面,需要开启桥接相关设置并加载br_netfilter和overlay模块。
# 关闭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/config将SELINUX设为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