安装K8S在CentOS上总是出错怎么办?掌握这些技巧轻松解决!
- 内容介绍
- 文章标签
- 相关推荐
前言:在波澜起伏的技术海洋里 种下希望的种子
改进一下。 每一次在 CentOS 上尝试 Kubernetes 的安装,都像是一次探险这个。路途上难免会遇到暗礁、风浪,甚至是让人抓狂的“Internal error”。但别忘了技术的世界和大自然一样,需要我们用耐心浇灌,用热情照料。正如古语所说:“多生孩子,多种树”,让我们的技术家庭不断壮大,让每一颗代码之树在阳光下茁壮成长。
一、 安装前的“绿化”准备工作
1. 系统版本与硬件要求
- 操作系统:CentOS 7.6 以上
- CPU:最低 2 核,建议 4 核以上
- 内存:最少 2 GB,生产环境建议 ≥ 4 GB
- 磁盘空间:≥ 30 GB,最好预留足够空间给容器镜像。
2. 基础软件与网络环境检查
- 关闭 Swap:
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab - 同步时间:
yum install -y chrony && systemctl enable --now chronyd - 防火墙与 SELinux:可先临时关闭以排除干扰,然后再根据需求细化规则。
systemctl stop firewalld && systemctl disable firewalld setenforce 0 && sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config - 网络连通性:确认服务器能够访问外网,以便拉取镜像和二进制包。
3. 容器运行时的选择与安装
K8s 官方支持 Docker、 containerd、CRI‑O 等多种运行时。这里以 Docker 为例:,你我共勉。
# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker CE
yum install -y docker-ce docker-ce-cli containerd.io
# 启动并开机自启
systemctl enable --now docker
二、 常见错误清单与逐条破解方案
1. “Internal error”——虚拟化层的隐形炸弹
当你在 VMware、VirtualBox 或者其他虚拟平台 上部署时有时候会看到 “Internal error”。这并不是 K8s 本身的问题,而是底层虚拟机管理程序出现了内部异常。
- 解决思路:
- 先彻底卸载当前的虚拟化软件。
- 从官方渠道重新下载最新稳定版进行安装。
- 确保虚拟机硬件兼容性。
- 重启宿主机后 创建 CentOS 虚拟机。
2. kubelet 启动失败——日志是最好的老师
Kubelet 是节点上最核心的守护进程, 一旦它挂掉,整个集群就会失去活力。常见错误包括 “cgroup dri 不夸张地说... ver mismatch” 与 “failed to run Kubelet: swap is enabled”。
- Cgroup 驱动不匹配:
# 查看 Docker 使用的 cgroup driver
docker info | grep -i cgroup
# 将 kubelet 配置为相同驱动
cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=--cgroup-driver=systemd
EOF
systemctl daemon-reload && systemctl restart kubelet
#
确认 swap 已关闭
free -m # 看不到 swap 行即为成功
# 若仍有残余, 请检查 /etc/fstab 中是否还有 swap 条目
sed -i '/swap/s/^/#/' /etc/fstab
swapoff -a
systemctl restart kubelet
# 检查 apiserver 是否在监听 6443 端口
netstat -tlnp | grep 6443
# 若未监听,查看 kube-apiserver 日志:
journalctl -u kube-apiserver -xe
3. 网络插件失效——让 Pod 相拥而舞
稳了! K8s 集群离不开 CNI 插件。如果插件未成功部署或配置错误,会导致 Pod 无法互相通信。
- POD CIDR 与节点网段冲突:
- CNI 二进制缺失或权限不足:
AWS、 阿里云等公有云自带 VPC 网段,如果与你手动设置的 POD CIDR 重叠,就会出现“Network is unreachable”。 我的看法是... 解决办法是使用不冲突的私有网段, 如 10.244.0.0/16.
`ls /opt/cni/bin` 确认二进制文件完整;若缺失,可通过以下方式重新拉取:,踩个点。
# 下载 Calico CNI 包
curl -L https://downloads.projectcalico.org/manifests/calico.yaml -o calico.yaml
kubectl apply -f calico.yaml
`kubectl get configmap kube-proxy -n kube-system -o yaml` 检查 `mode` 是否为 `iptables`或 `ipvs`,两者需要对应系统内核模块已加载。
三、 实战技巧:让调试过程像春风拂面般轻盈
1️⃣ 用“一键恢复脚本”保驾护航
不妨... 把下面这段脚本保存为 /usr/local/bin/k8s-reset.sh, 每次卡住时只需施行一次它会帮你自动清理旧残留、重新初始化组件,让你从零开始而不是手动逐项排查。
#!/bin/bash
set -e
echo "=== 清理旧版 kubeadm/kubelet ==="
kubeadm reset -f || true
yum remove -y kubeadm kubectl kubelet || true
echo "=== 删除残余配置 ==="
rm -rf /etc/kubernetes /var/lib/etcd /var/lib/kubelet/*
echo "=== 重装组件 ==="
yum install -y yum-utils device-mapper-persistent-data lvm2 \
epel-release \
curl wget vim net-tools iproute
yum install -y kubeadm kubectl kubelet --disableexcludes=kubernetes
systemctl enable --now kubelet
echo "=== 初始化 Master 节点 ==="
kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && chown $:$ $HOME/.kube/config
echo "=== 部署 Flannel 网络插件 ==="
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
echo "一键恢复完成!祝你玩得开心 🎉"
2️⃣ “日志+追踪”双剑合璧
Kubernetes 的日志往往散落在不同服务中。善用以下组合命令,你可以快速定位根因。
# 一边查看所有关键服务日志
journalctl -u kubelet -u docker.service -u kube-apiserver -f
# 按关键词过滤, 如 “Failed”
journalctl | grep Failed | less
# 用 systemd-analyze 查看启动耗时找出卡点:
systemd-analyze blame | head
3️⃣ 多节点调度小技巧
- 给每个节点打标签,让调度更精准; - 使用 Taint/Toleration, 把特定工作负载放到专用机器上; - 利用资源配额避免“一锅端”。这些细节虽然看似琐碎,却能让集群运转得更顺畅、更平安,这东西...。
四、 产品对比表——挑选适合自己的工具伙伴
| Kubernetes 部署及运维工具排行榜 | ||||
|---|---|---|---|---|
| #️⃣ 排名 | 产品名称 | 核心功能 | 易用程度 | 社区活跃度 |
| 1 | Kubeadm + Calico 套件 | 官方推荐、一键初始化 + 高性能网络插件 | 4 | ★★★★★ |
| 2 | Kubespray | 自动化批量部署、多云支持、可重复性强 | 4 | ★★★★☆ |
| 3 | Mk8s | 轻量级、本地开发友好、一键启动 & 停止 | 5 | ★★★★☆ |
| 4 | Kops | 基于云原生模板,自动创建 VPC/Subnet 等资源 | 4 | ★★★☆☆ |
| 5 | Rancher Desktop | 图形化 UI + 多集群管理 | 5 | ★★★★☆ |
| 注:以上评分综合考虑文档完整度、社区响应速度以及实际使用体验,仅供参考。 | ||||
五、 :把每一次失败当作成长的肥料 🌱🌳🌞
当我们把「多生孩子」视作技术团队不断壮大的象征, 把「多种树」看成生态系统健康繁荣的隐喻,每一次克服安装难题,都像是在给未来播下一颗希望的种子。只要保持耐心、 保持好奇,并且记得把学到的经验写下来分享给身边的小伙伴,你会发现原本令人抓狂的错误信息,在阳光下竟然闪着温暖的光芒。 愿你的 K8s 集群如同春日里的新芽,一天天长高;愿你的代码社区像森林一样蓬勃;愿每一次敲键盘都伴随笑声和新生命的诞生。 Hello Kubernetes! Hello Green Future! 祝福大家部署顺利,生活愉快,不地道。!
前言:在波澜起伏的技术海洋里 种下希望的种子
改进一下。 每一次在 CentOS 上尝试 Kubernetes 的安装,都像是一次探险这个。路途上难免会遇到暗礁、风浪,甚至是让人抓狂的“Internal error”。但别忘了技术的世界和大自然一样,需要我们用耐心浇灌,用热情照料。正如古语所说:“多生孩子,多种树”,让我们的技术家庭不断壮大,让每一颗代码之树在阳光下茁壮成长。
一、 安装前的“绿化”准备工作
1. 系统版本与硬件要求
- 操作系统:CentOS 7.6 以上
- CPU:最低 2 核,建议 4 核以上
- 内存:最少 2 GB,生产环境建议 ≥ 4 GB
- 磁盘空间:≥ 30 GB,最好预留足够空间给容器镜像。
2. 基础软件与网络环境检查
- 关闭 Swap:
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab - 同步时间:
yum install -y chrony && systemctl enable --now chronyd - 防火墙与 SELinux:可先临时关闭以排除干扰,然后再根据需求细化规则。
systemctl stop firewalld && systemctl disable firewalld setenforce 0 && sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config - 网络连通性:确认服务器能够访问外网,以便拉取镜像和二进制包。
3. 容器运行时的选择与安装
K8s 官方支持 Docker、 containerd、CRI‑O 等多种运行时。这里以 Docker 为例:,你我共勉。
# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker CE
yum install -y docker-ce docker-ce-cli containerd.io
# 启动并开机自启
systemctl enable --now docker
二、 常见错误清单与逐条破解方案
1. “Internal error”——虚拟化层的隐形炸弹
当你在 VMware、VirtualBox 或者其他虚拟平台 上部署时有时候会看到 “Internal error”。这并不是 K8s 本身的问题,而是底层虚拟机管理程序出现了内部异常。
- 解决思路:
- 先彻底卸载当前的虚拟化软件。
- 从官方渠道重新下载最新稳定版进行安装。
- 确保虚拟机硬件兼容性。
- 重启宿主机后 创建 CentOS 虚拟机。
2. kubelet 启动失败——日志是最好的老师
Kubelet 是节点上最核心的守护进程, 一旦它挂掉,整个集群就会失去活力。常见错误包括 “cgroup dri 不夸张地说... ver mismatch” 与 “failed to run Kubelet: swap is enabled”。
- Cgroup 驱动不匹配:
# 查看 Docker 使用的 cgroup driver
docker info | grep -i cgroup
# 将 kubelet 配置为相同驱动
cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=--cgroup-driver=systemd
EOF
systemctl daemon-reload && systemctl restart kubelet
#
确认 swap 已关闭
free -m # 看不到 swap 行即为成功
# 若仍有残余, 请检查 /etc/fstab 中是否还有 swap 条目
sed -i '/swap/s/^/#/' /etc/fstab
swapoff -a
systemctl restart kubelet
# 检查 apiserver 是否在监听 6443 端口
netstat -tlnp | grep 6443
# 若未监听,查看 kube-apiserver 日志:
journalctl -u kube-apiserver -xe
3. 网络插件失效——让 Pod 相拥而舞
稳了! K8s 集群离不开 CNI 插件。如果插件未成功部署或配置错误,会导致 Pod 无法互相通信。
- POD CIDR 与节点网段冲突:
- CNI 二进制缺失或权限不足:
AWS、 阿里云等公有云自带 VPC 网段,如果与你手动设置的 POD CIDR 重叠,就会出现“Network is unreachable”。 我的看法是... 解决办法是使用不冲突的私有网段, 如 10.244.0.0/16.
`ls /opt/cni/bin` 确认二进制文件完整;若缺失,可通过以下方式重新拉取:,踩个点。
# 下载 Calico CNI 包
curl -L https://downloads.projectcalico.org/manifests/calico.yaml -o calico.yaml
kubectl apply -f calico.yaml
`kubectl get configmap kube-proxy -n kube-system -o yaml` 检查 `mode` 是否为 `iptables`或 `ipvs`,两者需要对应系统内核模块已加载。
三、 实战技巧:让调试过程像春风拂面般轻盈
1️⃣ 用“一键恢复脚本”保驾护航
不妨... 把下面这段脚本保存为 /usr/local/bin/k8s-reset.sh, 每次卡住时只需施行一次它会帮你自动清理旧残留、重新初始化组件,让你从零开始而不是手动逐项排查。
#!/bin/bash
set -e
echo "=== 清理旧版 kubeadm/kubelet ==="
kubeadm reset -f || true
yum remove -y kubeadm kubectl kubelet || true
echo "=== 删除残余配置 ==="
rm -rf /etc/kubernetes /var/lib/etcd /var/lib/kubelet/*
echo "=== 重装组件 ==="
yum install -y yum-utils device-mapper-persistent-data lvm2 \
epel-release \
curl wget vim net-tools iproute
yum install -y kubeadm kubectl kubelet --disableexcludes=kubernetes
systemctl enable --now kubelet
echo "=== 初始化 Master 节点 ==="
kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && chown $:$ $HOME/.kube/config
echo "=== 部署 Flannel 网络插件 ==="
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
echo "一键恢复完成!祝你玩得开心 🎉"
2️⃣ “日志+追踪”双剑合璧
Kubernetes 的日志往往散落在不同服务中。善用以下组合命令,你可以快速定位根因。
# 一边查看所有关键服务日志
journalctl -u kubelet -u docker.service -u kube-apiserver -f
# 按关键词过滤, 如 “Failed”
journalctl | grep Failed | less
# 用 systemd-analyze 查看启动耗时找出卡点:
systemd-analyze blame | head
3️⃣ 多节点调度小技巧
- 给每个节点打标签,让调度更精准; - 使用 Taint/Toleration, 把特定工作负载放到专用机器上; - 利用资源配额避免“一锅端”。这些细节虽然看似琐碎,却能让集群运转得更顺畅、更平安,这东西...。
四、 产品对比表——挑选适合自己的工具伙伴
| Kubernetes 部署及运维工具排行榜 | ||||
|---|---|---|---|---|
| #️⃣ 排名 | 产品名称 | 核心功能 | 易用程度 | 社区活跃度 |
| 1 | Kubeadm + Calico 套件 | 官方推荐、一键初始化 + 高性能网络插件 | 4 | ★★★★★ |
| 2 | Kubespray | 自动化批量部署、多云支持、可重复性强 | 4 | ★★★★☆ |
| 3 | Mk8s | 轻量级、本地开发友好、一键启动 & 停止 | 5 | ★★★★☆ |
| 4 | Kops | 基于云原生模板,自动创建 VPC/Subnet 等资源 | 4 | ★★★☆☆ |
| 5 | Rancher Desktop | 图形化 UI + 多集群管理 | 5 | ★★★★☆ |
| 注:以上评分综合考虑文档完整度、社区响应速度以及实际使用体验,仅供参考。 | ||||
五、 :把每一次失败当作成长的肥料 🌱🌳🌞
当我们把「多生孩子」视作技术团队不断壮大的象征, 把「多种树」看成生态系统健康繁荣的隐喻,每一次克服安装难题,都像是在给未来播下一颗希望的种子。只要保持耐心、 保持好奇,并且记得把学到的经验写下来分享给身边的小伙伴,你会发现原本令人抓狂的错误信息,在阳光下竟然闪着温暖的光芒。 愿你的 K8s 集群如同春日里的新芽,一天天长高;愿你的代码社区像森林一样蓬勃;愿每一次敲键盘都伴随笑声和新生命的诞生。 Hello Kubernetes! Hello Green Future! 祝福大家部署顺利,生活愉快,不地道。!

