k8s 部署踩坑合集

k8s 部署踩坑合集

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

个人学习部署使用K8S时的踩坑合集,包括关闭swap、禁用swap挂载、部署重置、添加阿里云镜像、启用CRI集成插件、跳过预检、修改CGroupDriver、解决kubelet起不来的问题。

🔎

延伸解读

部署前的关键准备:关闭Swap

文章强调部署K8S前必须关闭Swap,否则可能影响kubelet运行。操作包括使用swapoff -a临时关闭,并编辑/etc/fstab永久禁用Swap挂载。这是许多初始化问题的根源,建议在安装前优先检查free -h输出中Swap值是否为0。

初始化失败后的重置与镜像加速

若kubeadm init失败,可用kubeadm reset重置,但个性化配置文件不会删除,需手动清理。针对无法连接Google服务器的问题,可在init命令中添加--image-repository registry.aliyuncs.com/google_containers使用阿里云镜像,加速镜像拉取并避免网络超时。

Preflight检查与CRI集成问题处理

Preflight阶段可能报错不支持CRI v1 API,通常需编辑/etc/containerd/config.toml,取消注释disabled_plugins = ["cri"]以启用CRI插件,并重启containerd。虽然可用--ignore-preflight-errors=all跳过所有检查,但文章明确不推荐,因为可能掩盖配置问题。

CGroupDriver与kubelet启动故障

Docker默认CGroupDriver可能与K8S要求不一致,需在/etc/docker/daemon.json中添加"exec-opts": ["native.cgroupdriver=systemd"],然后重启docker和containerd,并用docker info | grep Cgroup验证。若kubelet起不来,表现为等待API Server健康检查超时,可编辑/lib/systemd/system/kubelet.service,在ExecStart行添加启动参数。

❓

Q&A

部署K8S前为什么要关闭swap?如何操作?

因为K8S要求关闭swap,否则可能影响部署。操作:使用swapoff -a命令关闭swap,并编辑/etc/fstab禁用swap挂载。

kubeadm init时无法连接Google服务器怎么办?

在init命令中添加--image-repository registry.aliyuncs.com/google_containers参数,使用阿里云镜像。

Preflight检查报错不支持CRI v1 API如何解决?

编辑/etc/containerd/config.toml,取消注释disabled_plugins = ["cri"]行,然后重启containerd。

如何跳过kubeadm init的Preflight检查?

可以使用--ignore-preflight-errors=all参数跳过所有预检,但不推荐。

如何修改Docker的CGroupDriver为systemd?

在/etc/docker/daemon.json中添加"exec-opts": ["native.cgroupdriver=systemd"],然后重启docker和containerd。

kubelet启动失败,报错等待API server健康检查超时,如何解决?

编辑/lib/systemd/system/kubelet.service,在ExecStart行添加启动参数,然后重启kubelet服务。

🏷️

标签

➡️

继续阅读