如何在Azure Ubuntu 20.04 LTS虚拟机安装Kubernetes集群并解决kubelet报错
报错原因说明
该报错本质是kubelet服务无法正常启动,绝大多数场景是swap未关闭、容器运行时与kubelet的cgroup驱动不匹配、内核参数未正确配置三类原因导致,按以下步骤执行即可在Azure Ubuntu 20.04 LTS虚拟机上完成Kubernetes集群部署:
所有节点通用前置配置(主节点、工作节点都需执行)
- 关闭swap分区
Kubernetes强制要求关闭swap分区,否则kubelet无法正常启动,执行如下命令:
# 临时关闭swap sudo swapoff -a # 永久禁用swap开机挂载 sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
执行完成后运行free -h验证,Swap行的total值为0即配置成功。
- 加载Kubernetes所需内核模块
sudo modprobe overlay sudo modprobe br_netfilter # 配置开机自动加载内核模块 cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF
- 配置系统内核参数
# 开启网桥流量过滤、IP转发能力 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # 立即生效内核参数 sudo sysctl --system
- 安装containerd容器运行时
# 安装基础依赖 sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release # 添加软件源GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 添加containerd软件源 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装containerd sudo apt update sudo apt install -y containerd.io # 生成默认配置并修改cgroup驱动为systemd,与kubelet保持一致 sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml # 重启并设置开机自启 sudo systemctl restart containerd sudo systemctl enable containerd
- 安装kubeadm、kubelet、kubectl
# 添加Kubernetes软件源 sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list # 安装指定版本组件,这里以1.27.3为例,可替换为你需要的版本 sudo apt update sudo apt install -y kubelet=1.27.3-00 kubeadm=1.27.3-00 kubectl=1.27.3-00 # 锁定组件版本,避免意外更新导致集群异常 sudo apt-mark hold kubelet kubeadm kubectl # 配置kubelet使用systemd作为cgroup驱动 cat <<EOF | sudo tee /etc/default/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" EOF # 重启kubelet生效配置 sudo systemctl daemon-reload sudo systemctl restart kubelet
Azure虚拟机专属配置
- 登录Azure控制台,打开主节点绑定的网络安全组入站规则,放开以下端口:6443、2379-2380、10250、10259、10257,源地址可配置为集群所有节点的内网IP段。
kubeadm init命令中的--apiserver-advertise-address参数必须填写主节点的内网IP,不要填写公网IP,避免网络连通问题。
集群初始化操作(仅主节点执行)
- 先重置之前初始化失败的残留配置:
sudo kubeadm reset -f
- 重新执行初始化命令,替换为你的主节点内网IP:
sudo kubeadm init --apiserver-advertise-address=你的主节点内网IP --pod-network-cidr=192.168.0.0/16
- 初始化成功后,执行如下命令配置普通用户的集群访问权限:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装Pod网络插件,选择与
192.168.0.0/16CIDR匹配的Calico插件,搜索对应版本的官方部署yaml执行安装即可,安装完成后等待所有kube-system命名空间下的Pod转为Running状态,集群即可正常使用。
问题排查
如果仍出现报错,执行journalctl -u kubelet -f查看kubelet实时运行日志,可定位具体错误原因。
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

